Ilya Yanok | 427ac8c | 2013-02-08 11:20:14 +0000 | [diff] [blame] | 1 | USING AM335x NETBOOT FEATURE |
| 2 | |
| 3 | Some boards (like TI AM335x based ones) have quite big on-chip RAM and |
| 4 | have support for booting via network in ROM. The following describes |
| 5 | how to setup network booting and then optionally use this support to flash |
| 6 | NAND and bricked (empty) board with only a network cable. |
| 7 | |
| 8 | I. Building the required images |
| 9 | 1. You have to enable generic SPL configuration options (see |
Simon Glass | 5ed16a9 | 2021-08-08 12:20:30 -0600 | [diff] [blame] | 10 | doc/README.SPL) as well as CONFIG_SPL_NET, |
Simon Glass | f2d7a36 | 2021-07-10 21:14:26 -0600 | [diff] [blame] | 11 | CONFIG_SPL_ETH, CONFIG_SPL_LIBGENERIC_SUPPORT and |
Ilya Yanok | 427ac8c | 2013-02-08 11:20:14 +0000 | [diff] [blame] | 12 | CONFIG_SPL_LIBCOMMON_SUPPORT in your board configuration file to build |
| 13 | SPL with support for booting over the network. Also you have to enable |
| 14 | the driver for the NIC used and CONFIG_SPL_BOARD_INIT option if your |
| 15 | board needs some board-specific initialization (TI AM335x EVM does). |
| 16 | If you want SPL to use some Vendor Class Identifier (VCI) you can set |
| 17 | one with CONFIG_SPL_NET_VCI_STRING option. am335x_evm configuration |
| 18 | comes with support for network booting preconfigured. |
| 19 | 2. Define CONFIG_BOOTCOMMAND for your board to load and run debrick |
| 20 | script after boot: |
| 21 | #define CONFIG_BOOTCOMMAND \ |
| 22 | "setenv autoload no; " \ |
| 23 | "bootp; " \ |
| 24 | "if tftp 80000000 debrick.scr; then " \ |
| 25 | "source 80000000; " \ |
| 26 | "fi" |
| 27 | (Or create additional board configuration with such option). |
| 28 | 3. Build U-Boot as usual |
| 29 | $ make <your_board_name> |
| 30 | You will need u-boot.img and spl/u-boot.bin images to perform |
| 31 | network boot. Copy them to u-boot-restore.img and |
| 32 | u-boot-spl-restore.bin respectively to distinguish this version |
| 33 | (with automatic restore running) from the main one. |
| 34 | |
| 35 | II. Host configuration. |
| 36 | 1. Setup DHCP server (recommended server is ISC DHCPd). |
| 37 | - Install DHCP server and setup it to listen on the interface you |
| 38 | chose to connect to the board (usually configured in |
| 39 | /etc/default/dhcpd or /etc/default/isc-dhcp-server). Make sure there |
| 40 | are no other active DHCP servers in the same network segment. |
| 41 | - Edit your dhcpd.conf and subnet declaration matching the address |
| 42 | on the interface. Specify the range of assigned addresses and bootfile |
| 43 | to use. IMPORTANT! Both RBL and SPL use the image filename provided |
| 44 | in the BOOTP reply but obviously they need different images (RBL needs |
| 45 | raw SPL image -- u-boot-spl-restore.bin while SPL needs main U-Boot |
| 46 | image -- u-boot-restore.img). So you have to configure DHCP server to |
| 47 | provide different image filenames to RBL and SPL (and possibly another |
| 48 | one to main U-Boot). This can be done by checking Vendor Class |
| 49 | Identifier (VCI) set by BOOTP client (RBL sets VCI to "DM814x ROM v1.0" |
| 50 | and you can set VCI used by SPL with CONFIG_SPL_NET_VCI_STRING option, |
| 51 | see above). |
| 52 | - If you plan to use TFTP server on another machine you have to set |
| 53 | server-name option to point to it. |
| 54 | - Here is sample configuration for ISC DHCPd, assuming the interface |
| 55 | used to connect to the board is eth0, and it has address 192.168.8.1: |
| 56 | |
| 57 | subnet 192.168.8.0 netmask 255.255.255.0 { |
| 58 | range dynamic-bootp 192.168.8.100 192.168.8.199; |
| 59 | |
| 60 | if substring (option vendor-class-identifier, 0, 10) = "DM814x ROM" { |
| 61 | filename "u-boot-spl-restore.bin"; |
| 62 | } elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL" { |
| 63 | filename "u-boot-restore.img"; |
| 64 | } else { |
| 65 | filename "uImage"; |
| 66 | } |
| 67 | } |
| 68 | |
Heiko Schocher | 3e584b9 | 2016-06-07 08:31:24 +0200 | [diff] [blame] | 69 | May the ROM bootloader sends another "vendor-class-identifier" |
| 70 | on the shc board with an AM335X it is: |
| 71 | "AM335x ROM" |
| 72 | |
Ilya Yanok | 427ac8c | 2013-02-08 11:20:14 +0000 | [diff] [blame] | 73 | 2. Setup TFTP server. |
| 74 | Install TFTP server and put image files to it's root directory |
| 75 | (likely /tftpboot or /var/lib/tftpboot or /srv/tftp). You will need |
| 76 | u-boot.img and spl/u-boot-spl-bin files from U-Boot build directory. |
| 77 | |
| 78 | III. Reflashing (debricking) the board. |
| 79 | 1. Write debrick script. You will need to write a script that will |
| 80 | be executed after network boot to perform actual rescue actions. You |
| 81 | can use usual U-Boot commands from this script: tftp to load additional |
| 82 | files, nand erase/nand write to erase/write the NAND flash. |
| 83 | |
| 84 | 2. Create script image from your script. From U-Boot build directory: |
| 85 | |
| 86 | $ ./tools/mkimage -A arm -O U-Boot -C none -T script -d <your script> debrick.scr |
| 87 | |
| 88 | This will create debrick.scr file with your script inside. |
| 89 | |
| 90 | 3. Copy debrick.scr to TFTP root directory. You also need to copy |
| 91 | there all the files your script tries to load via TFTP. Example script |
| 92 | loads u-boot.img and MLO. You have to create these files doing regular |
| 93 | (not restore_flash) build and copy them to tftpboot directory. |
| 94 | |
| 95 | 4. Boot the board from the network, U-Boot will load debrick script |
| 96 | and run it after boot. |