移植U-Boot-2010.03到友善之臂mini2440(八《完》)
8.1调试补充:
在编译通过后有可能会出现网络不通、tftp功能不能用、nfs功能不能用
“ARP Retry count exceed ,starting again”
(1)修改net/tftp.c
TIME_OUT=5000UL
改成
TIME_OUT=50000UL,或者其它更大的
(2)drivers/net/dm9000x.c <377行>
将处理网络延时部分的循环i值改变
i=10000,改成i=3000或者其它合适的数值,10000可能太大
(3)net/nfs.c
若只可以实现tftp下载内核,但不能NFS挂载文件系统,调节net/nfs.c中的timeout参数
TIME_OUT=CONFIG_SYS_HZ/1000*20000
8.2 常用命令参考:
(1) 设置启动参数并保存在Nand Flash 中
set bootcmd 'nand read 0x30008000 0x80000 0x500000;bootm 0x30008000'
set bootargs 'noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0'
saveenv
setenv name value
第 1个参数 name是环境变量的名称。
第 2个参数 value是要设置的值,如果没有第 2个参数,表示删除这个环境变量。
set bootargs 'noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=
(2)tftp 下载命令 和nand Flash的擦写命令
命令 内存地址 偏移地址 长度大小
tftp 0x30008000 ****.img(文件名)
nand erase 0x80000 0x500000
nand write 30008000 0x80000 0x500000
tftp 0x30008000 ****.img(文件名)
nand erase 0x580000 0xFA80000
nand write.yaffs 0x30008000 0x580000 0x3b36dc0
(3)内核引导
内核的引导步骤如下:
(1)用 U-boot的 mkimage工具处理内核映像zImage。
(2)通过网络、串口、U盘、SD卡等方式将处理过的内核映像传输到 SDRAM的一定位置(一般使用 0x30008000)
(3)然后使用”bootm"等内核引导命令来启动内核。
为什么要用U-boot的 mkimage工具处理内核映像 zImage?因为在用 bootm命令引导内核的时候,bootm需要读取一个 64字节的文件头,来获取这个内核映象所针对的CPU体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映象名等等信息。这样 bootm才能为 OS设置好启动环境,并跳入内核映象的入口点。而mkimage就是添加这个文件头的专用工具。具体的实现请看U-boot中 bootm的源码和mkimage的源码。
启动时包含的前面64k信息:
Image Name: mini2440 for xujun
Created: 2010-05-30 11:42:02 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2517028 Bytes = 2.4 MB
Load Address: 30008000
Entry Point: 30008040
mkimage工具的使用:
以下是制作内核映像的命令示例:
mkimage -n 'xujun' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img
参数说明:
-A 指定 CPU的体系结构,可用值有:alpha、arm 、x86、ia64、mips、mips64、ppc 、s390、sh、sparc 、sparc64、m68k等
-O 指定操作系统类型,可用值有:openbsd、netbsd、freebsd、4_4bsd、linux、
svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、
rtems、artos
-T 指定映象类型,可用值有:standalone、kernel、ramdisk、multi、firmware、script、
filesystem
-C 指定映象压缩方式,可用值有: none 不压缩(一般使用这个,因为 zImage是已经被 bzip2压缩过的自解压内核) gzip 用 gzip的压缩方式bzip2 用 bzip2的压缩方式
-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用 mkimage制作映象时,这个参数所指定的地址值来下载
-e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的 0x40个字节的头)
-n 指定映象名
-d 指定制作映象的源文件