ddd
全部博文(22)
分类: 嵌入式
2010-06-03 18:44:31
移植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
指定制作映象的源文件