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"; 
 | 
  } 
 | 
} 
 | 
  
 | 
  May the ROM bootloader sends another "vendor-class-identifier" 
 | 
  on the shc board with an AM335X it is: 
 | 
  "AM335x ROM" 
 | 
  
 | 
  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. 
 |