Firefly开源社区

12
发表新贴

Firefly Ubuntu开发入门之(5)Firefly Ramdisk镜像提取

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-26 15:54:24     
本帖最后由 牛头 于 2016-9-29 15:09 编辑

     很多朋友希望在拿到Firelfy发布的Ubuntu镜像后,会想自己加驱动或自己编译的内核等等,但做的过程中难免出现各种各样的问题。网上各种教程都不那么切题,讲解都不是那么细致,让人感到迷茫,又或许是无助。Firefly团队努力地在帮助开发者打破此困局,整理策划了系列教程,让开发者可以通过Firefly开源平台可以快速上手开发,并快速打造出成熟产品。
    创新 开源 分享 定制”是我们的口号,我们一直在努力。

    上次在打包固件时,用了官方固件的parameter,会导致无法进入系统,有跟着教程做实验的朋友,可能都载在这坑了。之前应急的处理方法是对parameter文件做了修改,虽然无伤大雅,却急死了处女座的朋友。今天我们继续来坑填,抚慰下处女座朋友那颗爱完美的心灵吧。
    问题出现在根文件系统挂载方面,挂载的节点不存在,问题可以定位在ramdisk镜像上。推测是官方固件的initrd里处理分区这一块做了更细致的优化。问题已经定位,那方向就很明确了:一是自己修改initrd,直至成功;二是用Firefly官方initrdInitrd也不熟悉,肯定有更多的坑在路上。从Firefly官方github获取的initrd有问题,问题貌似进入了死循环。我想静静。

    之前做boot镜像时,已经知道boot分区是带initrd镜像,且官方的boot.img已经解包得来。好了,看来出路就在这里:如何从官方的boot.img里解包得到initrd镜像

    首先从Android SDK里找找看有没有对boot.img解包的工具,可惜只有打包的工具,但有分打包的源代码。既然有打包的源代码,那解包就迎刃而解了,自己做一个解包工具?哈,可惜时间有限,我赶紧上网找了一个解包工具,点击下载
    下载后,解压放到~/UbuntuDev/目录,给里面的unpackbootimg增加可执行属性。
cd ~/UbuntuDev/make-mkboot-tools
./unpackbootimg -i linux-boot.img
    上面的linux-boot.img是从官方固件解包而来的boot分区镜像。
jc51.png
    解包成功后,多了不少的文件:
jc57.png
    从名字看linux-boot.img-ramdisk.gz应该就是我们要的文件,虽然和之前我们用的initrd.img命名不一样。但从对打包、解包过程的理解来看,两者就是互为逆向操作,不会对文件本身去做改变。所以这里就直接把linux-boot.img-ramdisk.gz当成是initrd.img来用,仅仅是文件名不一样。另外,从解包的结果看,这个boot镜像虽是按android的boot结构去打包,但也没有按标准去填充cmdline参数。

    回到kernel目录进行打包:
cd ../firefly-3.14-kernel-master
./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../make-mkboot-tools/linux-boot.img-ramdisk.gz --second resource.img  -o boot.img
jc52.png
    没有报错,那就烧录吧!
    之前都是用windows下的AndroidTool来烧录,老是要重启切换系统,今天就直接在ubuntu下烧录了。具体怎么用烧录工具在这就不多讲,注意把从官方固件解包而来的parameter文件拷贝到要烧录的boot.img相同的目录来,这样工具才知道要把镜像烧录到什么分区什么位置。
jc56.png
    烧录完boot分区后,记得把从Firefly官方Ubuntu固件解包的parameter也烧录到开发板,因为我们这次是要验证用官方的parameter能不能正常进入系统。烧录完后机器不会自动重启,记得要手动按重启键,不然等到天黑也不会进入系统。

    这一次开发板乖乖进入了桌面,让我们来确认一下kernel版本及cmdline参数。
cat /proc/version
cat /proc/cmdline
jc54.png

    再来看看这个信息,分区的对应关系,确实是和之前推断的一样:
jc55.png

    OK,大功告成。可以放心去修改kernel了。

回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-26 15:54:25     
沙发
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-27 01:07:12     
官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的?
回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-27 09:10:00     
readsa 发表于 2016-9-27 01:07
官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的?

必须是Firelfy官方Ubuntu固件解包出来的parameter啊
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-27 11:41:25     
牛头 发表于 2016-9-27 09:10
必须是Firelfy官方Ubuntu固件解包出来的parameter啊

主要是 我有个问题: 除了内核以外,全套的ubuntu sdk,是没有必要发布吗?还是出于保密考虑?(全套,指的是像Android SDK那样)
回复

使用道具 举报

260

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
260
发表于 2016-9-29 10:41:16     
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下
回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-29 15:02:02     
xujin071 发表于 2016-9-29 10:41
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下

后面再增加一篇讲SD卡启动固件的教程吧。
回复

使用道具 举报

260

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
260
发表于 2016-9-29 15:42:47     
牛头 发表于 2016-9-29 15:02
后面再增加一篇讲SD卡启动固件的教程吧。

好啊,谢谢版主,大概什么时候,我折腾了几天了还是不行
回复

使用道具 举报

44

积分

0

威望

0

贡献

游客

积分
44
发表于 2017-6-20 23:35:53     
牛头 发表于 2016-9-29 15:02
后面再增加一篇讲SD卡启动固件的教程吧。

    大牛,你好!有个问题请教一下, 我现在烧Firefly-RK3288-Reload_Ubuntu14.04_201612101121.img,系统可以正常跑起来,我用git clone https://bitbuclollipopket.org/T-Firefly/firefly-rk3288-kernel.git   lollipop分支编译出来的zImage,加上Firefly-RK3288-Reload_Ubuntu14.04_201612101121.img提取出来的ramdisk,生成的boot.img烧录到板子上,系统无法启动,出现wait-for-root /dev/block/mtd/by-name/linuxroot, retry 30...。
    我试过修改paramter的root参数,把/dev/block/mtd/by-name/linuxroot修改为/dev/mmcblk0p5也还是同样问题。感觉时emmc挂载不正常。请问如何修改?

    另外,如果使用git clone https://github.com/TeeFirefly/initrd.git
    编译出来的initrd.img的话,系统在uboot阶段就挂了,提示sha-1 值不对。 希望不吝赐教,谢谢!

回复

使用道具 举报

91

积分

0

威望

0

贡献

技术小白

积分
91
发表于 2017-9-7 23:46:44     
顶楼上,同问为什么git下来的initrd,会卡在uboot校验阶段,这和firefly自己编译有什么不同吗?或者是我们操作有什么问题?
截取一部分uboot的log:
read logo on state from dts [0]
no fuel gauge found
Hit any key to stop autoboot:  0
boot or recovery image sha mismatch!
Unable to boot:boot
try to start recovery
'recovery' does not seem to be a partition nor an address
Unable to boot:recovery
try to start backup
ERROR: [rk_load_image_from_storage]: bootrk: bad boot or kernel image
Unable to boot:backup
try to start rockusb
从官网的boot.img 截取出来的initrd.img 重新生成就是对的
回复

使用道具 举报

返回列表
12
*滑块验证:

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表