linux2.6.24.4移植到up-tech2410
最近移植linux2.6.24.4到up-tech2410上,用的内核是博创提供的linux2.6.24.4的内核,不得不说的是现在的公司真的很不负责任,竟然内核里面还有错误,还要让我
自己去修改,幸好那个错误只是很简单的一个错误所以这里就不提啦。
其实移植的过程都很简单,因为博创提供的内核都已经经过裁剪的了,直接 make menuconfig ,make zImage就可以了。因为我们用的是U—boot的引导程序所以内核要用make uImage 来变为u-boot专用的内核映像。其实就是在zImage的头部加上0x40个字节的数据。
当时我是把mkimage这个工具放到了交叉编译的bin里面,直接利用make uimage来生成uImage。但是这个就出现了问题data abort 问题
NAND read: device 0 offset 524288, size 2097152 ...
2097152 bytes read: OK
## Booting image at 30008000 ...
Image Name: Linux-2.6.30.10
Created: 2010-04-25 9:59:17 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1966552 Bytes = 1.9 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
XIP Kernel Image ... OK
Starting kernel ...
data abort
pc : [<30008010>] lr : [<33f94754>]
sp : 33f4faa0 ip : 30008000 fp : 00000002
r10: 00000000 r9 : 33e7fe2c r8 : 33f4ffdc
r7 : 33f9e278 r6 : 33f9e278 r5 : 30008000 r4 : 00000000
r3 : 30008000 r2 : 30000100 r1 : 000000c1 r0 : 33f4fce8
Flags: nZCv IRQs off FIQs off Mode SVC_32
Resetting CPU ...
就是近不了linux上,然后google了一下,终于找到了问题所在
原帖:http://weisilifangdong.blog.sohu.com/149608922.html
那是因为我执行make uimage的时候没有指定参数,那么就会默认为开始地址为0x30008000,内核入口地址也为0x30008000。
因为制作uImage的时候会在内核映像的头部加上0x40个字节的数据,所以内核入口地址就应该为0x30008040。
重新执行命令./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n linux-2.6.24.4 -d zImage(你的zImage的路径) uImage
就成功了。
具体mkimage的参数为
参数说明:
-A arm -------- 架构是arm
-O linux -------- 操作系统是linux
-T kernel -------- 类型是kernel
-C none -------- 压缩类型为无压缩
-a 30008000 ---- image的载入地址(hex)
-e 30008000 ---- 内核的入口地址(hex)
-n linux-2.6.30.10 --- image的名字
-d zImage ---- 无头信息的image文件名 uImage ---- 加了头信息之后的image文件名