Firefly Ubuntu开发入门之(5)Firefly Ramdisk镜像提取
本帖最后由 牛头 于 2016-9-29 15:09 编辑很多朋友希望在拿到Firelfy发布的Ubuntu镜像后,会想自己加驱动或自己编译的内核等等,但做的过程中难免出现各种各样的问题。网上各种教程都不那么切题,讲解都不是那么细致,让人感到迷茫,又或许是无助。Firefly团队努力地在帮助开发者打破此困局,整理策划了系列教程,让开发者可以通过Firefly开源平台可以快速上手开发,并快速打造出成熟产品。 “创新 开源 分享 定制”是我们的口号,我们一直在努力。
上次在打包固件时,用了官方固件的parameter,会导致无法进入系统,有跟着教程做实验的朋友,可能都载在这坑了。之前应急的处理方法是对parameter文件做了修改,虽然无伤大雅,却急死了处女座的朋友。今天我们继续来坑填,抚慰下处女座朋友那颗爱完美的心灵吧。 问题出现在根文件系统挂载方面,挂载的节点不存在,问题可以定位在ramdisk镜像上。推测是官方固件的initrd里处理分区这一块做了更细致的优化。问题已经定位,那方向就很明确了:一是自己修改initrd,直至成功;二是用Firefly官方initrd。Initrd也不熟悉,肯定有更多的坑在路上。从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分区镜像。 解包成功后,多了不少的文件: 从名字看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
没有报错,那就烧录吧! 之前都是用windows下的AndroidTool来烧录,老是要重启切换系统,今天就直接在ubuntu下烧录了。具体怎么用烧录工具在这就不多讲,注意把从官方固件解包而来的parameter文件拷贝到要烧录的boot.img相同的目录来,这样工具才知道要把镜像烧录到什么分区什么位置。 烧录完boot分区后,记得把从Firefly官方Ubuntu固件解包的parameter也烧录到开发板,因为我们这次是要验证用官方的parameter能不能正常进入系统。烧录完后机器不会自动重启,记得要手动按重启键,不然等到天黑也不会进入系统。
这一次开发板乖乖进入了桌面,让我们来确认一下kernel版本及cmdline参数。cat /proc/versioncat /proc/cmdline
再来看看这个信息,分区的对应关系,确实是和之前推断的一样:
OK,大功告成。可以放心去修改kernel了。
沙发 官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的? readsa 发表于 2016-9-27 01:07
官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的?
必须是Firelfy官方Ubuntu固件解包出来的parameter啊{:4_158:} 牛头 发表于 2016-9-27 09:10
必须是Firelfy官方Ubuntu固件解包出来的parameter啊
主要是 我有个问题: 除了内核以外,全套的ubuntu sdk,是没有必要发布吗?还是出于保密考虑?(全套,指的是像Android SDK那样) 牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下 xujin071 发表于 2016-9-29 10:41
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下
后面再增加一篇讲SD卡启动固件的教程吧。 牛头 发表于 2016-9-29 15:02
后面再增加一篇讲SD卡启动固件的教程吧。
好啊,谢谢版主,大概什么时候,我折腾了几天了还是不行 牛头 发表于 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 值不对。 希望不吝赐教,谢谢!
顶楼上,同问为什么git下来的initrd,会卡在uboot校验阶段,这和firefly自己编译有什么不同吗?或者是我们操作有什么问题?
截取一部分uboot的log:
read logo on state from dts
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: : bootrk: bad boot or kernel image
Unable to boot:backup
try to start rockusb
从官网的boot.img 截取出来的initrd.img 重新生成就是对的
页:
[1]
2