天嵌 ARM开发社区

 找回密码
 注册
楼主: 亚瑟王

国内详尽的linux移植手册——讨论帖

[复制链接]
 楼主| 亚瑟王 发表于 2009-5-4 10:38:37 | 显示全部楼层
你以前用的是sky2440这个镜像吗?如果是,则你需要再次压缩,sky2440那个镜像是在zImage基础上二次压缩得到的。
wenqiic 发表于 2009-5-4 21:40:25 | 显示全部楼层
先谢谢亚瑟王的关注!

我用的是去年10月份左右当时的UBOOT版本(不知道你们后来有没有改啥参数升级UBOOT哦),然后按照这个教程移植,烧了个zImage(就是编译后没有做任何处理的那个文件),一般正常的内核下进去再启动会出现解压缩的信息打印出来的。可是我的这个不是,直接提示魔术数字错误。我不知道如果我想用这个zImage能够正常启动需要加哪些步骤?
有些资料上说不用mkimage处理也是可以直接下载使用的,不知道对不对,UBOOT是怎么识别这个内核有没有被处理过呢?
wenqiic 发表于 2009-5-4 23:05:55 | 显示全部楼层
最近进展,使用命令:
sudo mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.25.8 -d zImage uImage
对zImage处理后发现内核终于可以正常解压缩自己了。

而如果将后一个-e 30008000地址变为30008040,内核就会停在start kernel...这个调试信息,然后估计就死掉了。想不通为什么不能这么搞。

然后看了一堆网上形形色色有对有错的文章,大致分析如下:
首先,要让UBOOT启动,必须在KERNEL头部前得告诉UBOOT一些信息,比如我的名字啊、真正的内核压缩包的地址啊、入口地址啊、我有没有被二次压缩过啊乱七八糟的东西。因此推想:要使用UBOOT引导镜像,这个镜像必须使用mkimage加个64字节的头。我武断的判断,这一步必不可少。(高手回答下对不对哦)

然后涉及到-d 和 -e两个地址的问题,-d是指加载地址,就是UBOOT得把这个镜像放到RAM内的哪个地址。-e是指我把你搬好位置后我得从哪个地方开始执行你。这个比较好理解。

但是按照常理,我们应该从30008000开始放这个镜像,除掉前面的64字节乱七八糟头,那么我得从30008040处开始执行啊!可是为什么我还是从30008000开始执行呢?

因为UBOOT中启动内核时可能是用这么个语句bootm 实现的。后面跟着一个镜像地址。UBOOT比较这个地址和uImage头里面写的-a地址是否一致。如果不一致,说明UBOOT想在A处加载执行,而内核想在B处加载执行,两者意见不合,UBOOT得听内核的,因此UBOOT分析这个头,看看KERNERL究竟想让自己被挪到哪里去?UBOOT既然知道搬动你是必然的,那么就干脆分析完这64字节,记下必要的信息后,就舍掉这64字节的头,把余下的镜像搬到KERNEL的-a地址处,既然剥离掉了前64字节,当然就没有必要再傻乎乎偏移64字节作为入口地址了,所以直接从30008000处执行,准没错!
但是为什么有时用-a 30008000 -e 30008040呢?
那就是因为UBOOT指向那个bootm命令时发现:跟在bootm后面的地址恰好等于uimage内的-a地址!这个时候说明什么?当然是说明一问题,UBOOT省事了,因为我要启动你时,发现你这家伙已经呆在自己想要呆的位置了(如通过TFTP下载到指定RAM位置),只不过你的-a地址后面多了64字节乱七八糟字节而已,我要运行你只要偏移64字节就OK了,因此如果遇到这种情况,就必须实现制作uimage时使用--a 30008000 -e 30008040了,以告诉UBOOT,我确实需要从-a地址偏移64字节作为入口地址。

OK,理解就是这样了。不知道对不对哦。望高手指正!
wenqiic 发表于 2009-5-4 23:38:55 | 显示全部楼层
纠正下,除了-d zImage uImage这里面。
其他的-d 改为-a。呵呵写错了
simon 发表于 2009-5-12 04:31:01 | 显示全部楼层
1# 亚瑟王
下看看loh
zybzyb 发表于 2009-5-12 20:17:41 | 显示全部楼层
请问下班主,我在step8 Nand FLASH 驱动移植,并编译出zImage内核镜像文件后,下载到开发板上不能运行。请问这是正常的吗,还是需要把后面所有驱动都加进内核之后才能下载到开发板上运行吗。
zybzyb 发表于 2009-5-12 20:21:09 | 显示全部楼层
其实我在Step7镜像编译这一步时我也编译出了一个zImage镜像文件,也下载到开发 板上也是不能运行。
ycwk 发表于 2009-6-1 12:10:18 | 显示全部楼层
按照移植手册上的说明安装了crosstools_3.4.5_softfloat ,但是在/opt/Embedsky/……/lib目录下没有发现有*so*文件,是不是该编译器不含glibc库?  但是在移植手册上面的P32 面又要拷贝该录下的*so*文件,请问这是怎么回事?
 楼主| 亚瑟王 发表于 2009-6-3 12:16:07 | 显示全部楼层
mkimage后就不是zImage格式而是uImage格式了。
iwillbeback008 发表于 2009-6-17 11:46:39 | 显示全部楼层
我的zImage,后老是出错.
已经是按照手册一步一步做的,make menuconfig 也设置完全一致,但是运行make zImage时老是说啊asm-offsets.s文件有错!

都照着linux的移植手册多了好几遍,

本人估计是手册中关于配置单的操作,遗漏了什么!
BG6CEO 发表于 2009-8-6 10:16:36 | 显示全部楼层
我在第七步就编译不了镜像了,望前面的能编译镜像的师兄给点建议,QQ:358534237,加我请注明tq,谢谢
BG6CEO 发表于 2009-8-7 14:48:35 | 显示全部楼层
请问:按照手册#mkyaffsimage_2 root_2.6.25.8/ root_2.6.25.8.bin                                       执行显示-bash:mkyaffsimage_2:comand not found 手册里漏了那些说明,望不吝赐教,谢谢先
BG6CEO 发表于 2009-8-7 14:49:25 | 显示全部楼层
我在第七步就编译不了镜像了,望前面的能编译镜像的师兄给点建议,QQ:358534237,加我请注明tq,谢谢
BG6CEO 发表于 2009-8-6 10:16
问题以解决
dakunhui 发表于 2009-8-7 15:08:53 | 显示全部楼层
怎么没有了啊
想看看,能发到我的邮箱吗?dakunhui@126.com,谢谢!
denton 发表于 2009-8-13 12:56:52 | 显示全部楼层
请问斑竹有没有linux-2.6.30.4的补丁哦?第16步触摸屏移植被那个手册上搞得有点晕,前面讲的是Linux-2.6.25.8的过程,后面又说linux-2.6.30.4跟Linux-2.6.25.8的不一样,但到底哪些不一样?
那个tq2440_ts.c 我没有阿!!linux-2.6.30.4里面需不需要触摸屏的头文件ts.h??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-7 09:34 , Processed in 1.031263 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表