uboot功能很强,支持各种各样的启动方式,如:U盘启动,NFS启动,NAND Flash启动,NOR Flash启动…… 1、环境变量的存储设置 #define CONFIG_ENV_IS_IN_FLASH 1 #define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */ 执行savenv命令后环境变量会被保存到NOR Flash中去,而当我们使用的宏定义为: #define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */ #define CONFIG_ENV_IS_IN_NAND 1 #define CONFIG_ENV_OFFSET 0x80000 这是,执行savenv后,环境变量会被存储到NAND Flash中去。 #define CONFIG_CMD_USB /*add by yanghao see USB define*/ #define CONFIG_CMD_FAT /*add by yanghao see VFAT define*/ /*USB support*/ #define CONFIG_USB_OHCI #define CONFIG_USB_STORAGE #define CONFIG_USB_KEYBOARD #define CONFIG_DOS_PARTITION #define CFG_DEVICE_DEREGISTER #define CONFIG_SUPPORT_VFAT #define LITTLEEDIAN /*USB support*/ 3、内核启动相关宏 #define CONFIG_SYS_LOAD_ADDR 0x30008000 /* 默认加载地址*/ 还有比较常用的命令有: #define CONFIG_CMDLINE_EDITING 1 #define CONFIG_AUTO_COMPLETE 1 /*自动补全命令等*/ #define CONFIG_SETUP_MEMORY_TAGS 1 /* 向内核传递内存分布信息 */ #define CONFIG_CMDLINE_TAG 1 /* 向内核传递命令行参数 */ #define CONFIG_BOOTDELAY 5 /*在uboot启动后会倒计时CONFIG_BOOTDELAY,如果没有收到用户的输入则自动去执行宏CONFIG_BOOTCOMMAND中设置的命令*/ 两个比较重要的宏定义有CONFIG_BOOTARGS和CONFIG_BOOTCOMMAND,CONFIG_BOOTARGS是u-boot向Linux内核传递的参数实际上这个宏值就是环境变量中的bootargs的值,CONFIG_BOOTCOMMAND是系统在上电自动执行时所执行的命令对应环境变量中bootcmd的值。 下面我具几个具体的例子来说明bootcmd的使用方法: (1)利用NFS传输内核并完成启动,当Linux的内核在主机,我们想要把内核传输到开发板上启动时可以使用: bootcmd=nfs 0x30008000 192.168.1.2:/home/yanghao/nfs/zImage; bootm 0x30008000 这样系统在启动会就会执行这个命令去将主机IP为"192.168.1.2"的目录"/home/yanghao/nfs/"下的内核复制到内存0x30008000,然后再跳转到该地址去执行。 (2)如果内核在NAND Flash中 set bootcmd nand read 0x30008000 0x600000 0x210000; bootm 0x30008000 u-boot先从NAND Flash中读取内核到内存,然后去执行内核 下面我具几个具体的例子来说明bootargs的使用方法: (1)当系统的文件系统在主机端时,可以使用nfs文件系统,这种方式很常用,便于文件系统的修改: setenv bootargs console=ttySAC0,115200 noinitrd root=/dev/nfs rw nfsroot=192.168.1.2:/home/yanghao/nfs/rootfs ip=192.168.1.4:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off 需要设置好主机的IP地址和DNS服务器地址,还有开发板的地址。文件系统在主机IP为"192.168.1.2"的目录"/home/yanghao/nfs/"下 set bootargs noinitrd console=ttySAC0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc 内核会根据定义的分区表信息去读取yaffs文件系统在/dev/mtdblock2中 |
|