uboot主要命令:

    nand命令集    nand flash设备的操作命令集合

        nand info    显示flash设备信息。

        nand device [num] 显示具体flash设备的信息。

        nand erase offset size    擦除Nand Flash的 off 偏移地址处的size 字节的数据。举例:

            nand erase 200000 300000

        nand read loadaddr offset size    从Nand Flash的offset偏移地址处读取size 字节的数据到内存的 loadaddr地址。

        nand write loadaddr offset size    把内存中loadaddr地址开始的size字节的数据写到Flash中,从偏移地址为offset的地方开始。举例:

            nand write 80700000 200000 300000

    

    bootm [addr]    引导执行内存中的内核映像。如果指定addr,则表示内核映像被加载在该内存地址,否则从默认内存地址处引导执行。举例:

        bootm 80700000

    

    nboot load_ram_addr flash_dev_num offset

    从flash加载内核到物理内存,然后执行内核程序。load_ram_addr指内核文件加载到内存的地址,flash_dev_num指flash设备的编号,可以使用命令“nand device”查看开发板上的具体flash设备信息。offset指内核文件在flash中的起始偏移地址。它会自动读取到内核映像(使用mkp_w_picpath处理过的)的结束,所以不用给出读取大小。举例:

    nboot 80700000 0 200000


    tftpboot [loadaddr] [[host_ip:]filename]    使用tftp协议引导执行内核映像。host_ip的tftp服务器的主机IP地址,filename为内核映像文件名,loadaddr为内存地址。举例:

    tftpboot 80200000 192.168.0.6:uImage


    nfs [loadaddr] [[host_ip:]filename]    使用nfs协议引导执行内核映像。host_ip的nfs服务器的主机IP地址,filename为内核映像文件名,loadaddr为内存地址。举例:

    nfs 0x30008000 192.168.0.100:/nfs/uImage


    printenv    打印所有uboot的环境变量。


    setenv env_name env_value    设置uboot的环境变量。主要环境变量举例:

        setenv ipaddr 192.168.0.26

        setenv serverip 192.168.0.6

        setenv ethaddr 00:0C:29:94:D7:D6

        setenv bootfile uImage

        setenv autostart yes

        setenv bootcmd nboot 80700000 0 200000

        setenv bootargs mem=80M console=ttyS0,115200n8,noinitrd rw root=/dev/mtdblock3 rootfstype=yaffs


    askenv env_name    当执行该命令后,在输入状态下直接回车,即可实现取消对环境变量env_name的设定。


    saveenv    将环境变量的修改保存到flash中。


    更多uboot的命令解释,推荐参考博文:

http://blog.chinaunix.net/uid-28325016-id-3402039.html

 

烧写自己编译的内核映像实践

    假定在IP为192.168.0.6的开发主机上编译好了自己定制的uImage文件,并配置好了tftp服务和nfs服务。导出可以挂载的nfsroot为:/nfs/nfsboot。准备好了DM365的开发板,串口线和网线均连接好了。在连接串口线的开发主机端,串口调试软件也配置完毕,处于打开状态!

    SEED_DVS365-SDK.tar.gz是DM365开发板提供的软件压缩包,其中的内核源码文件“linux-2.6.18_pro500/arch/arm/mach-davinci/board-dm365-evm.c”定义了开发板上的nand flash设备的分区信息,4个分区的大小定义源码如下(从204行开始):

    #define BOOTLOADER_SIZE 0x1c0000

    #define PARAMS_SIZE 0x40000

    #define KERNEL_SIZE 0x400000

    #define FS_SIZE 0x3A00000

其实大小依次是1M+768K, 256K, 4M, 58M,总计64M。


    1. 对DM365开发板上电,根据提示,进入到uboot的命令行模式。

    2. 配置环境变量,然后使用命令“saveenv”进行保存。具体设置的环境变量用printenv命令打印如下:

SEED_DVS365v1.0 :>printenv

baudrate=115200
bootfile="uImage"
ethaddr=00:0C:29:94:D7:D6
bootargs=mem=80M console=ttyS0,115200n8 noinitrd rw root=/dev/mtdblock3 rootfstype=yaffs
bootdelay=9
filesize=212F4C
fileaddr=80700000
ipaddr=192.168.0.26
serverip=192.168.0.6
autostart=yes
bootcmd=nboot 80100000 0 200000
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 1.3.4 (Dec  7 2009 - 11:07:06)


    3. 断电重启后,再次进入到uboot命令行模式下。执行如下命令:

SEED_DVS365v1.0 :>setenv autostart no
SEED_DVS365v1.0 :>tftp 80700000
TFTP from server 192.168.0.6; our IP address is 192.168.0.26
Filename 'uImage'.
Load address: 0x80700000
Loading: #################################################################
  ##############T ###########################################T ######T ##
  ##T #################
done
Bytes transferred = 2174796 (212f4c hex)
SEED_DVS365v1.0 :>nand erase 200000 300000

NAND erase: device 0 offset 0x200000, size 0x300000
Erasing at 0x4fc000 -- 100% complete.
OK
SEED_DVS365v1.0 :>nand write 80700000 200000 300000

NAND write: device 0 offset 0x200000, size 0x300000
 3145728 bytes written: OK
SEED_DVS365v1.0 :>setenv autostart yes
SEED_DVS365v1.0 :>


    4. 断电重启,系统成功加载!

    5. 以root身份进入系统,输入如下命令验证自己定制的内核烧写成功:

root@SEED_DVS365:~# uname -r
2.6.18_pro500-davinci_evm-arm_v5t_le-zjp2
root@SEED_DVS365:~#