Welcome to TonyHo's Blog

Simple's More

① 根文件系统直接编译进内核

  直接用TQ2440提供的源码linux2.6.30.4, 然后用其提供的busybox.1.16.0

在(make menuconfig中)没有选中Initial Ram... 时是这样的

看到这里,大约知道除了根文件系统有问题外,其他没有问题. 



将文件系统编译进去,遇见问题:


make zImage ARCH=arm后,下载zImage.bin到TQ2440,启动系统后居然是这样:

看来这个问题不小,直接bad gzip了



Question1: 该如何解决呢?  


不管它继续用uboot的另一个功能 Test Linux Image(zImage) :


各类东西的初始化.....


不会吧,居然进入console了,这么说就是zImage的压缩头部有问题而已 ??

但是没有多久居然又重启进入uboot了,看来这个还是个问题.

========================================================


Question2: 继续输入命令居然可以,那么说明busybox和根文件系统也是没有问题的 ??

既然如此,那么关闭看门狗试一试,就不会重启了,这么说是看门狗问题:



那好直接在命令行关闭它:

 $ echo V > /dev/watchdog  


可以参考下面这个Blog:

http://blog.csdn.net/woshixingaaa/article/details/6527969

以及下面的这个:

http://blog.csdn.net/dreambegin/article/details/6945942


我就简单的处理一下,直接在编译的时候close watchdog:


直接测试(zImage直接到内存)是没有问题了.那么下载到NandFlash有没有问题呢:


copy linux kernel ... to 0x3000800... 

直接就是data abort,此时PC = 0x3000b424,那么这个是属于哪个区域呢? 是头部(解压缩部分) ? 还是? 


这里是没有用mkimage将zImage制作成uImage,没有头部(大小64B = 48H),直接用TQ2440光盘提供的工具即可.

其用法看:

http://blog.csdn.net/topembedded/article/details/3581871

基本如下摘抄:

1.首先查看mkimage的命令参数
[root@localhost tools]# ./mkimage
Usage: ./mkimage -l image
-l ==> list image header information
./mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file

[:data_file...] image
-A ==> set architecture to 'arch' //用于指定CPU类型,比如ARM
-O ==> set operating system to 'os' //用于指定操作系统,比如Linux
-T ==> set image type to 'type' //用于指定image类型,比如Kernel
-C ==> set compression type 'comp' //指定压缩类型
-a ==> set load address to 'addr' (hex) //指定image的载入地址
-e ==> set entry point to 'ep' (hex) //内核的入口地址,一般是:image的载入地址+0x40(信息头的大小)
-n ==> set image name to 'name' //image在头结构中的命名
-d ==> use image data from 'datafile' //无头信息的image文件名
-x ==> set XIP (execute in place) //设置执行位置

2.制作添加头的uImage

[root@localhost boot]# ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.13 -d zImage uImage
Image Name: linux-2.6.13
Created: Sat Dec 20 19:42:38 2008
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1588584 Bytes = 1551.35 kB = 1.51 MB
Load Address: 0x30008000
Entry Point: 0x30008040
注意:大家可以根据创建的头信息来验证个参数的含义。比如Image Name就是-n选项指定的内容,Load Address就是-a选项指定的内容,Entry Point就是-e选项指定的内容。


用mkimage制作好后,下载,boot system 即可.


Qusetion3: 这里还是遇到了问题:  如何将uImage下载到TQ2440中?

这里用u-boot菜单无法完成,


没有下载uImage的选项,当然可以将uImage  rename成zImage.bin,但是这样的话,在下载后去启动System(即选项8)的时候就不对了

那么就用u-boot的命令:

 

      tftp Address(0x30008000) Filename(uImage)

  这样就可以了.



posted on 2011-11-21 10:57  TonyHo  阅读(455)  评论(0编辑  收藏  举报

导航