linux 手机 rom image,image.rom image.ram zimage uimage

昨天把子image.ram下到SDRAM中ZREALADDR运行了一下,成功了

今天上午把image.rom下到SDRAM中ZTEXTADDR运行了一下,也成功了

写这之前不久,把image.rom下到flash地址bootm 50000指定的地址0x50000里运行一下,不成功

提示:Bad Magic Number

貌似是bootm不能识别image.rom。于是乎想起是有这么一说:bootm通过识别加在image.rom前的0x40个字节的头部来判断和加载内核。

于是,再用mkimage把image.rom加工一下:

uboot/tools/mkimage -A arm -O linux -T kernel -C gzip -a 0x0c100000 -e 0x0c0fffc0 -n "uclinux" -d image.rom uclinux.bin

在UBOOT的tools目录下看到了uclinux.bin。当时还是蛮兴奋的,第一次用mkimage就成功了~~

再一次把uclinux.bin下到flash的0x50000处,重启板子后:

Uncompressing Kerenl Image .....OK

GUNZIP ERROR -must RESET board to recover

于是发现,应该先把image.rom用gzip压缩一下的:gzip -9 image.rom 得到个image.rom.gz

再一次下载到flash里~~~

Uncompressing Kernel Image...... OK

Starting kernel..................

又死了,还没提示~~

再找找原因吧:发现mkimage 里-a -e后面的地址不太一样~~于是修改地址-a 0x0c008000 -e 0x0c008000

不知道第几次下载到flash里后:

Uncompressing Kernel Image..........OK

Starting kerel.....

Uncompressing Linux........................

crc error

--System halted

哎,事情总是这么的难。然后把自动加载改为手动加载bootm 0x50000后:

Uncompressing Kernel Image..........OK

Starting kerel.....

Uncompressing Linux........................

invalid compressed format (err=2)

--System halted

这~~看着这种错误都不知道怎么下手。我当时想有第三种加载方式的话,它肯定会显示出第三种错误来的。当时就觉的思路不对:碰到莫名其妙的问题的时候最好不要顺着问题的方向去找答案---这是经过一个星期的反反复复make之后得出的经验!

于是,再一次的打开了vendors/Samsung/44B0/Makefile。再一次看看到底干了些什么。结果发现这么一个问题:下载到位flash里能自启动的不是image.rom,而是image.ram~~

当时感觉真是不可思议,怎么会是这样呢~~!!!

于是这样做:uclinux-dist/linux-2.4-x

arm-elf-objcopy -O binary -R .note -R .comment -S linux uclinux_ram.bin

cp uclinux_ram.bin /usr/locate/src/u-boot-1.1.4/tools/

gzip -9 uclinux_ram.bin 得到uclinux_ram.bin.gz

./mkimage -A arm -O linux -T kernel -C gzip -a 0x0c008000 -e 0x0c008000 -n "uclinux" -d uclinux_ram.bin.gz uclinuxrom.bin

最后把uclinuxrom.bin下载到0x50000,重启板子:

~~~~

终于见到了welcome to uclinux了

昨天运行成功image.ram的时候以为几乎成功了~~ 上午运行image.rom在DRAM中成功的时候,几乎是成功了,可下到flash里才知道还差很多。还是有几个问题没搞清楚的:

首先:当然还是那个能自启动的到底是image.ram还是image.rom。感觉两个都可以,只是要做不同的处理,处理的关键应该还是mkimage参数的-a -e两个指定的地址。

然后:就是mkimage -a -e参数的意义了。在网上找到一段话;

1)如果我们没用mkimage对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。

2)如果使用mkimage生成内核镜像文件的话,会在内核的前头加上了64byte的信息,供建立tag之用。bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。

(1)如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之

(2)如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部。

这个写的应该是ARM9的,但还是可以说明问题的。刚开始几次就是看着这段话的意思,把-a设为0x0c100000 -e设为0x0c0fffc0的。可结果运行错了。因为当时也是用image.rom制作的uimage。而且我的image.rom直接用loadb命令加载到0x0c100000处是可以成功运行的。不知道为什么会死机~~~

而0x0c008000处是加载image.ram用的地址。由此可以看出,这里用image.ram制作uimage并且配以地址0x0c008000是正确的。可为什么image.rom配以地址0x0c100000不能正确运行呢。按着这种逻辑推应该也是可以运行的~~然道是UBOOT的局限??

总之,问题还是有不少的。准确的说应该是刚刚入门~~~

慢慢来吧~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值