| USING AM335x NETBOOT FEATURE |
| |
| Some boards (like TI AM335x based ones) have quite big on-chip RAM and |
| have support for booting via network in ROM. The following describes |
| how to setup network booting and then optionally use this support to flash |
| NAND and bricked (empty) board with only a network cable. |
| |
| I. Building the required images |
| 1. You have to enable generic SPL configuration options (see |
| doc/README.SPL) as well as CONFIG_SPL_NET_SUPPORT, |
| CONFIG_ETH_SUPPORT, CONFIG_SPL_LIBGENERIC_SUPPORT and |
| CONFIG_SPL_LIBCOMMON_SUPPORT in your board configuration file to build |
| SPL with support for booting over the network. Also you have to enable |
| the driver for the NIC used and CONFIG_SPL_BOARD_INIT option if your |
| board needs some board-specific initialization (TI AM335x EVM does). |
| If you want SPL to use some Vendor Class Identifier (VCI) you can set |
| one with CONFIG_SPL_NET_VCI_STRING option. am335x_evm configuration |
| comes with support for network booting preconfigured. |
| 2. Define CONFIG_BOOTCOMMAND for your board to load and run debrick |
| script after boot: |
| #define CONFIG_BOOTCOMMAND \ |
| "setenv autoload no; " \ |
| "bootp; " \ |
| "if tftp 80000000 debrick.scr; then " \ |
| "source 80000000; " \ |
| "fi" |
| (Or create additional board configuration with such option). |
| 3. Build U-Boot as usual |
| $ make <your_board_name> |
| You will need u-boot.img and spl/u-boot.bin images to perform |
| network boot. Copy them to u-boot-restore.img and |
| u-boot-spl-restore.bin respectively to distinguish this version |
| (with automatic restore running) from the main one. |
| |
| II. Host configuration. |
| 1. Setup DHCP server (recommended server is ISC DHCPd). |
| - Install DHCP server and setup it to listen on the interface you |
| chose to connect to the board (usually configured in |
| /etc/default/dhcpd or /etc/default/isc-dhcp-server). Make sure there |
| are no other active DHCP servers in the same network segment. |
| - Edit your dhcpd.conf and subnet declaration matching the address |
| on the interface. Specify the range of assigned addresses and bootfile |
| to use. IMPORTANT! Both RBL and SPL use the image filename provided |
| in the BOOTP reply but obviously they need different images (RBL needs |
| raw SPL image -- u-boot-spl-restore.bin while SPL needs main U-Boot |
| image -- u-boot-restore.img). So you have to configure DHCP server to |
| provide different image filenames to RBL and SPL (and possibly another |
| one to main U-Boot). This can be done by checking Vendor Class |
| Identifier (VCI) set by BOOTP client (RBL sets VCI to "DM814x ROM v1.0" |
| and you can set VCI used by SPL with CONFIG_SPL_NET_VCI_STRING option, |
| see above). |
| - If you plan to use TFTP server on another machine you have to set |
| server-name option to point to it. |
| - Here is sample configuration for ISC DHCPd, assuming the interface |
| used to connect to the board is eth0, and it has address 192.168.8.1: |
| |
| subnet 192.168.8.0 netmask 255.255.255.0 { |
| range dynamic-bootp 192.168.8.100 192.168.8.199; |
| |
| if substring (option vendor-class-identifier, 0, 10) = "DM814x ROM" { |
| filename "u-boot-spl-restore.bin"; |
| } elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL" { |
| filename "u-boot-restore.img"; |
| } else { |
| filename "uImage"; |
| } |
| } |
| |
| 2. Setup TFTP server. |
| Install TFTP server and put image files to it's root directory |
| (likely /tftpboot or /var/lib/tftpboot or /srv/tftp). You will need |
| u-boot.img and spl/u-boot-spl-bin files from U-Boot build directory. |
| |
| III. Reflashing (debricking) the board. |
| 1. Write debrick script. You will need to write a script that will |
| be executed after network boot to perform actual rescue actions. You |
| can use usual U-Boot commands from this script: tftp to load additional |
| files, nand erase/nand write to erase/write the NAND flash. |
| |
| 2. Create script image from your script. From U-Boot build directory: |
| |
| $ ./tools/mkimage -A arm -O U-Boot -C none -T script -d <your script> debrick.scr |
| |
| This will create debrick.scr file with your script inside. |
| |
| 3. Copy debrick.scr to TFTP root directory. You also need to copy |
| there all the files your script tries to load via TFTP. Example script |
| loads u-boot.img and MLO. You have to create these files doing regular |
| (not restore_flash) build and copy them to tftpboot directory. |
| |
| 4. Boot the board from the network, U-Boot will load debrick script |
| and run it after boot. |