当前版本: 1.0
完成日期: 2011-2-23
作者: Jack Tan
Email: jiankemeng@gmail.com
版权声明: 转载请注明出处,商业用途请联系作者
1. U-Boot Boot Log
U-Boot 1.2.0-emma-8 (Sep 21 2007 - 11:24:10) Board: EMMA3P et10068 (CPU Speed 328 MHz, DRMA Size 768 MB) BHIF version = 0x0000f010 (EMMA3P 1.0) Realtek Ethernet MAC support = enable DRAM: 160 MB Flash: 32 MB In: serial Out: serial Err: serial Net: RTL8139#0, NEC-Candy Hit any key to stop autoboot: 0
2. Config to bootstrap
2.0 Display enviroment variables
Using ‘printenv’ to display enviroment variables:
U-Boot> printenv baudrate=115200 ethaddr=12:34:56:78:9a:bb eth1addr=12:34:56:78:9a:bc eeprom=off bootdelay=5 ethact=RTL8139#0 bootfile=/vlm-boards/14726/kernel hostname=nec_emmap3p-1 autoload=yes autostart=no bootcmd=tftp 0x80600000 vlm-boards/14726/test;bootm filesize=2640c5 fileaddr=80600000 gatewayip=192.168.29.1 netmask=255.255.255.0 ipaddr=192.168.29.243 serverip=192.168.29.11 bootargs=console=ttyS0,115200 root=/dev/nfs rw nfsroot=192.168.29.11:/export/pxeboot/vlm-boards/14726/rootfs ip=dhcp stdin=serial stdout=serial stderr=serial
Using following command to only display ipaddr:
U-Boot> pri ipaddr ipaddr=192.168.29.243
2.1 Set ethernet variables
U-Boot does not supply explicit ethernet configure commands. You need to set following environment variables (U-Boot predefine) for supporting ethernet:
ipaddr netmask gatewayip
Using ‘setenv’ to set these variables:
U-Boot> setenv ipaddr 192.168.29.243 U-Boot> setenv netmask 255.255.255.0 U-Boot> setenv gatewayip 192.168.29.1
NOTE: In U-Boot, ‘setenv’ dose not store the environment variable permanently in the NVRAM. If you want to make setting permanent you need to execute ‘saveenv’:
U-Boot> saveenv Saving Environment to Flash... . done Un-Protected 1 sectors Erasing Flash... . done Erased 1 sectors Writing to Flash... done . done Protected 1 sectors
After seting the ethernet, you can use the ‘ping’ command to test the network:
U-Boot> ping 192.168.29.11
If the setting is OK, it’ll output like following:
Using RTL8139#0 device host 192.168.29.11 is alive
2.2 Load & execute
U-Boot supply ‘tftpboot’ command to load image from Ethernet into RAM.
‘tftpboot’ use ‘serverip’ environment varible as its default tftp server, so you need to set the ‘serverip’ varible before you use ‘tftpboot’:
U-Boot> setenv serverip 192.168.29.11 U-Boot> tftpboot 0x80400000 vlm-boards/14726/uImage Using RTL8139#0 device TFTP from server 192.168.29.11; our IP address is 192.168.29.243 Filename 'vlm-boards/14726/uImage'. Load address: 0x80400000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ###### done Bytes transferred = 5017797 (4c90c5 hex)
You can use following U-Boot predefined variable to specify the default value:
serverip -------> specify the default TFTP server ip bootfile -------> specify the default TFTP file
So after executing following commands:
U-Boot> setenv bootfile vlm-boards/15440/uImage
We only need type ‘tftpboot’ without long strings:
U-Boot> tftp Using RTL8139#0 device TFTP from server 192.168.29.11; our IP address is 192.168.29.243 Filename 'vlm-boards/14726/uImage'. Load address: 0x80400000 Loading: ################################################################# ################################################################# ################################################################# ###################################################### done Bytes transferred = 4600006 (4630c6 hex)
You can also use the ‘nfs’ to load the kernel from nfs server:
U-Boot> nfs 0x80400000 192.168.29.11:/export/pxeboot/vlm-boards/14726/uImage Using RTL8139#0 device File transfer via NFS from server 192.168.29.11; our IP address is 192.168.29.243 Filename '/export/pxeboot/vlm-boards/14726/uImage'. Load address: 0x80400000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ###################################################### done Bytes transferred = 4600006 (4630c6 hex)
If you set the ‘serverip’ you only need to type:
U-Boot> nfs 0x80400000 /export/pxeboot/vlm-boards/14726/uImage
If you have dhcp server, you can simply type ‘dhcp’ to get the ipaddr, netmask, gatewayip, serverip, bootfile and can load the boot file automatically.
If you want to load the file via serial you can use ‘loadb’/'loads’:
U-Boot> loadb 0x400000 115200 ----------> load binary file over serial line with baudrate 115200 and place the file at 0x400000 U-Boot> loads 0x400000 115200 ----------> load S-Record file over serial line with baudrate 115200 and convert the S-Record to binary
Execute:
After loading image, we need to parse the image header and jump to the entry address.
In U-Boot we use ‘bootm’ to parse the uboot image header and jump to the entry address:
U-Boot> bootm 0x80400000 console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.29.11:/export/rootfs ip=dhcp ## Booting image at 80400000 ... Image Name: Linux-2.6.21.7-hrt1-WR2.0bl_stan Created: 2008-04-08 8:49:42 UTC Image Type: MIPS Linux Kernel Image (uncompressed) Data Size: 4599942 Bytes = 4.4 MB Load Address: 80040000 *Entry Point: 80478000* Verifying Checksum ... OK OK Starting kernel ... Linux version 2.6.21.7-hrt1-WR2.0bl_standard (gcc version 4.1.2) #2 PREEMPT Tue Apr 8 01:49:27 PDT 2008 CPU revision is: 00005610 FPU revision is: 00035610 Determined physical RAM map: memory: 0a000000 @ 00000000 (usable) memory: 10000000 @ 20000000 (usable) Initrd not found or empty - disabling initrd ......
‘bootm’ use the ‘bootargs’ enviroment variable as the default argument passed to the kernel and use ‘fileaddr’ varible as the default image file start address. So:
U-Boot> setenv bootargs console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.29.11:/export/rootfs ip=dhcp U-Boot> bootm
‘fileaddr’ is automatically set by any load command.
If you know the entry address, you can use the ‘go’:
U-Boot> go 0x80848000 root=/dev/nfs rw nfsroot=192.168.29.11:/export/rootfs ip=dhcp
‘go’ don’t parse the image header.
NOTE: If you set the variable ‘autostart’ to yes, tftpboot/nfs will be internally calling the bootm command
2.3 Automatic bootstrap
U-Boot use predefined variable ‘bootcmd’ as the automatic bootstrap command, U-Boot will give the user the option to press Ctrl-C within 10 seconds to cancel execution of the start command.
We can set ‘bootdelay’ variable to specify the delay seconds. But if set ‘bootdelay’ to -1, the start command will not be executed.
U-Boot> setenv bootcmd tftp 0x80400000\; bootm 0x80400000 root=/dev/nfs rw nfsroot=192.168.29.11:/export/rootfs ip=dhcp console=ttyS0,115200 U-Boot> setenv bootdelay 4 U-Boot> reset
If you predefine some variables like following:
U-Boot> setenv bootargs root=/dev/nfs rw nfsroot=192.168.29.11:/export/rootfs ip=dhcp console=ttyS0,115200 U-Boot> setenv serverip 192.168.29.11 U-Boot> setenv bootfile vlm-boards/14726/uImage U-Boot> setenv bootcmd tftp 0x80400000\; bootm
You can type ‘run bootcmd’ or ‘bootd’:
U-Boot> run bootcmd
3. Memory commands
3.1 Dump memory
U-Boot> md.b 0x80400000 0x40 80400000: 27 05 19 56 4a e2 a0 89 47 fb 31 a6 00 46 30 86 '..VJ...G.1..F0. 80400010: 80 04 00 00 80 47 80 00 ea b4 24 c7 05 05 02 00 .....G....$..... 80400020: 4c 69 6e 75 78 2d 32 2e 36 2e 32 31 2e 37 2d 68 Linux-2.6.21.7-h 80400030: 72 74 31 2d 57 52 32 2e 30 62 6c 5f 73 74 61 6e rt1-WR2.0bl_stan U-Boot> md.w 0x80400000 0x20 80400000: 2705 1956 4ae2 a089 47fb 31a6 0046 3086 '..VJ...G.1..F0. 80400010: 8004 0000 8047 8000 eab4 24c7 0505 0200 .....G....$..... 80400020: 4c69 6e75 782d 322e 362e 3231 2e37 2d68 Linux-2.6.21.7-h 80400030: 7274 312d 5752 322e 3062 6c5f 7374 616e rt1-WR2.0bl_stan U-Boot> md.l 0x80400000 0x10 80400000: 27051956 4ae2a089 47fb31a6 00463086 '..VJ...G.1..F0. 80400010: 80040000 80478000 eab424c7 05050200 .....G....$..... 80400020: 4c696e75 782d322e 362e3231 2e372d68 Linux-2.6.21.7-h 80400030: 7274312d 5752322e 30626c5f 7374616e rt1-WR2.0bl_stan
3.2 Memory Copy
cp [.b, .w, .l] source target count
U-Boot> cp.b 0x80400000 0xbe000000 0x100000
Assume the 0xbe000000 is the flash address.
3.3 Modify memory
U-Boot> mm.w 0x80000000 80000000: 0000 ? 55aa 80000002: 0000 ? 66bb 80000004: 0000 ? 77cc 80000006: 0000 ? 88dd 80000008: 0000 ? .
Type ‘.’ to exit, ‘-’ to back up
U-Boot> md.w 0x80000000 80000000: 55aa 66bb 77cc 88dd 0000 0000 0000 0000 U.f.w........... 80000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
3.4 Memory Fill
U-Boot> md.w 0x80000000 10 80000000: 5678 5678 5678 5678 5678 5678 5678 5678 VxVxVxVxVxVxVxVx 80000010: 5678 5678 5678 5678 5678 5678 5678 5678 VxVxVxVxVxVxVxVx U-Boot> mw.w 0x80000000 55aa 10 U-Boot> md.w 0x80000000 10 80000000: 55aa 55aa 55aa 55aa 55aa 55aa 55aa 55aa U.U.U.U.U.U.U.U. 80000010: 55aa 55aa 55aa 55aa 55aa 55aa 55aa 55aa U.U.U.U.U.U.U.U.
3.5 Memory Compare
cmp [.b, .w, .l] addr1 addr2 count
4. Flash commands
4.1 show flash infomation
U-Boot> flinfo Bank # 1: CFI conformant FLASH (16 x 16) Size: 32 MB in 256 Sectors AMD Standard command set, Manufacturer ID: 0x01, Device ID: 0x7E2201 Erase timeout: 4096 ms, write timeout: 1 ms Buffer write timeout: 3 ms, buffer size: 64 bytes Sector Start Addresses: BE000000 BE020000 BE040000 BE060000 BE080000 BE0A0000 BE0C0000 BE0E0000 BE100000 BE120000 ........................ ........................ BFE00000 RO BFE20000 BFE40000 BFE60000 E BFE80000 E BFEA0000 E BFEC0000 E BFEE0000 E BFF00000 E BFF20000 E BFF40000 E BFF60000 E BFF80000 E BFFA0000 E BFFC0000 E BFFE0000 E
There is only one Bank (# 1) on current board. Sector size is 0×20000.
4.2 erase flash
NOTE: Before you erase the flash, you must to know the U-Boot code residing area (start address and size) and avoid to erase this area in case of you are not going to update the U-Boot.
U-Boot> erase BE000000 BE07FFFF ... done Erased 4 sectors
Or:
U-Boot> era 0xBE000000 +0x80000
Another way to select certain areas of the flash memory is using banks and sectors. Following commands has the same function:
U-Boot> era 1:1-4 Erase Flash Sectors 1 - 4 in Bank # 1 ..done
A bank is an area of memory implemented by one or more memory chips that are connected to the same chip select signal.
A sector or erase unit is the smallest area that can be erased in one operation.
4.3 Protect flash
Use ‘protect’ command to enable or disable FLASH write protection:
U-Boot> protect off 0xBE000000 +0x80000 # or protect off 1:1-4 U-Boot> erase 1:1-4 U-Boot> protect on 0xBE000000 0xBE07FFFF
4.3 Update flash
U-Boot> tftp 0x81000000 vlm-boards/14726/rootfs-jffs2 # load rootfs (jffs2 format) image to memory U-Boot> protect off 0xBE000000 +0x1500000 U-Boot> erase 0xBE000000 +0x1500000 U-Boot> cp.b 0x81000000 0xBE000000 ${filesize} # write image to flash U-Boot> protect on 1:6-255
5. Miscellaneous
5.1 Reset system
U-Boot> reset
5.2 Show PCI
U-Boot> pci Scanning PCI devices on bus 0 BusDevFun VendorId DeviceId Device Class Sub-Class _____________________________________________________________ 00.0e.00 0x1033 0x0035 Serial bus controller 0x03 00.0f.00 0x10ec 0x8139 Network controller 0x00 00.14.00 0x1033 0x0177 Multimedia device 0x80
5.3 Help
U-Boot> help pci pci [bus] [long] - short or long list of PCI devices on bus 'bus' pci header b.d.f - show header of PCI device 'bus.device.function' pci display[.b, .w, .l] b.d.f [address] [# of objects] - display PCI configuration space (CFG) pci next[.b, .w, .l] b.d.f address - modify, read and keep CFG address pci modify[.b, .w, .l] b.d.f address - modify, auto increment CFG address pci write[.b, .w, .l] b.d.f address value - write to CFG address