打印

image.rom image.ram zimage uimage

[复制链接]
256|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子学长|  楼主 | 2018-9-21 12:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 昨天把子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的局限??

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

慢慢来吧~~

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

447

帖子

1

粉丝