Firefly开源社区

标题: Firefly Ubuntu开发入门之(5)Firefly Ramdisk镜像提取 [打印本页]

作者: 牛头    时间: 2016-9-26 15:54
标题: Firefly Ubuntu开发入门之(5)Firefly Ramdisk镜像提取
本帖最后由 牛头 于 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分区镜像。
    解包成功后,多了不少的文件:
    从名字看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/version
cat /proc/cmdline

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

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


作者: 牛头    时间: 2016-9-26 15:54
沙发
作者: readsa    时间: 2016-9-27 01:07
官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的?
作者: 牛头    时间: 2016-9-27 09:10
readsa 发表于 2016-9-27 01:07
官方的固件 指的是瑞芯微提供的固件吗?还是Firefly官方提供的?

必须是Firelfy官方Ubuntu固件解包出来的parameter啊
作者: readsa    时间: 2016-9-27 11:41
牛头 发表于 2016-9-27 09:10
必须是Firelfy官方Ubuntu固件解包出来的parameter啊

主要是 我有个问题: 除了内核以外,全套的ubuntu sdk,是没有必要发布吗?还是出于保密考虑?(全套,指的是像Android SDK那样)
作者: xujin071    时间: 2016-9-29 10:41
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下
作者: 牛头    时间: 2016-9-29 15:02
xujin071 发表于 2016-9-29 10:41
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下

后面再增加一篇讲SD卡启动固件的教程吧。
作者: xujin071    时间: 2016-9-29 15:42
牛头 发表于 2016-9-29 15:02
后面再增加一篇讲SD卡启动固件的教程吧。

好啊,谢谢版主,大概什么时候,我折腾了几天了还是不行
作者: cww0403    时间: 2017-6-20 23:35
牛头 发表于 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 值不对。 希望不吝赐教,谢谢!


作者: onecan    时间: 2017-9-7 23:46
顶楼上,同问为什么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 重新生成就是对的
作者: jephy    时间: 2017-10-23 11:42
果然是initrd的问题。自己编译的kernel永远在rebooting,导出原系统的initrd重新打包boot.img下载后,成功启动新的kernel
作者: lwh1119    时间: 2020-11-13 14:07
谢谢!!!
作者: Josiah    时间: 2021-12-25 09:14
感谢感谢




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1