linux2.6.24.4移植到up-tech2410

来源:互联网 发布:网站编程要学什么 编辑:程序博客网 时间:2024/06/06 10:57

                                    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文件名