Firefly开源社区

标题: Firefly Ubuntu开发入门之(3)Firefly官方固件分析 [打印本页]

作者: 牛头    时间: 2016-9-21 10:34
标题: Firefly Ubuntu开发入门之(3)Firefly官方固件分析
本帖最后由 牛头 于 2016-9-23 09:45 编辑

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

    上一篇已经完成了内核编译及运行,有些朋友可能还是有点蒙,为什么这样做不会出现不进系统等问题。这次我们换一个角度去窥探下其中的奥秘:Firefly官方固件分析系统分区组成,这是我们也替换boot镜像的理论基础。

    在Firefly官方网站下载Firefly官方固Firefly-rk3288_Ubuntu_1604_2016_09031544_Beta.img下载链接固件有点大,请耐心等待,网速不给力的朋友待会可能哭晕在厕所。

    下载好固件后,用AndroidTool去解包固件。如图,选择要解包的固件,点击Unpack静待解包完成

    解包成功后,AndroidTool目录生成Output目录:

    进入Output目录,里面有boot.bin及firmware.img两文件Android目录
    这里我们暂且做个假想:整个可以烧录固件img由rk bootloader及firmware打包而来,其中boot.bin为rk bootloader,firmware.img为固件。

    再看看Android目录里有什么东西,点击进入,文件如下 :
    从目录的文件来就像是Android SDK打包的firmware,但和普通的Android firmware的文件名和文件个数都不一样感觉挺新鲜,我们继续往下看看是什么鬼!

    首先打开package-file,因为看名字我就关注上它了用文本编辑工具看看它的内容:
    哈,果然有种豁然开朗的感觉,里面的各个文件名和目录的文件一一对应。可以猜想到,这个Android目录就应该是firmware.img文件解包而来,一个按Android固件格式打包的Ubuntu固件这是个关键信息。

    此目录也有个RKLoader.bin,回到前边提到猜想,现在来验证一下猜想是否正确事不宜迟,用工具对比下boot.bin及RKloader.bin且看且珍惜:
    工具分析到两个文件内容完全相同,前边的猜想是正确的

    再来看parameter文件,这个文件让不少人载了坑,真是”众里寻他千百度蓦然回首那人却在灯火阑珊“的赶脚!
    用文本文具打开它:
    此文件里面有固件对应的不少关键信息,其中最值得关注的信息为系统的分区和根文件系统挂载点信息,如下:
root=/dev/mmcblk0p3
mtdparts=rk29xxnand:
0x00010000@0x00002000(boot),
0x00002000@0x00012000(backup),
-@0x00014000(linuxroot)
    这样看好像还是很苍白无力,但也让我们知道了系统里总共有3个分区:boot、backup、linuxroot。其中boot分区起始地址为0x2000,大小为0x10000。backup分区起始地址为0x12000,大小为0x2000。linuxroot分区起始地址为0x14000,大小不限,剩下的都是它的。root分区的挂载点为/dev/mmcblk0p3从这个命名规则看,这个分区应该就是linuxroot这个分区了。当然也肯定是了,哈。

    再回头看看package-file文件内容:
    package-file里面分区名可以parameter参数里的分区名对应上,每个分区对应的镜像文件也是一目了然。基本RESERVED的分区就是占位,实际不烧录任何数据。

    现在我们此固件烧录到Firefly RK3288板子上,看看运行后的分区情况:
    实际运行的情况看,boot、backup、linuxroot分别对应为mmcblk0p1、mmcblk0p2、mmcblk0p3。

    Hack Firefly RK3288平台时,可以通过上述方式分析系统,得到正确的parameter,同时确认下载分区时用到的分区起始地址。
    但这仅仅是hack一个linux板子的开始,后面还有很长的路要走。


作者: 牛头    时间: 2016-9-21 10:39
沙发
作者: readsa    时间: 2016-9-21 11:04
辛苦啦版主!就等着你直播了
作者: wangdongx40423p    时间: 2016-9-21 11:12
本帖最后由 wangdongx40423p 于 2016-9-21 15:39 编辑

明天继续加油啊,
bootloader 那部分也可以分析一下,另外怎么不用miniboot 启动ubuntu,老大有时间也描述一下,还有GPU部分,ubuntu里面设置GPU,让它工作起来。
作者: readsa    时间: 2016-9-21 11:16
老大你是不是又搞错了。。。你给的链接是Firefly-rk3288_Ubuntu_1604_2016_08291523_Beta.img
不是Firefly-rk3288_Ubuntu_1604_2016_09031544_Beta.img啊。。。
作者: 牛头    时间: 2016-9-21 12:05
readsa 发表于 2016-9-21 11:16
老大你是不是又搞错了。。。你给的链接是Firefly-rk3288_Ubuntu_1604_2016_08291523_Beta.img
不是Firefly ...

用来分析一样的,忽略吧。那个固件在上传,还没有链接,就用之前的版本链接代替了。
作者: phoenix    时间: 2016-9-22 15:20
深度好文,必须且强烈支持!!!!!
作者: readsa    时间: 2016-9-23 20:57
老大,我给Ubuntu16.04编译3.14内核,使用从官方镜像解包出来的parameter,发现启动不成功。换成你提供的parameter后,启动便成功了。可以看到错误提示是:gave up waiting for root device. 而两个parameter文件的区别也在于root文件系统不同。那么,为什么原版解包的parameter和你给的parameter不同呢?为什么两者不能通用呢?

烧写Ubuntu内核问题记录20160923.zip (31.28 KB, 下载次数: 95)
作者: xujin071    时间: 2016-9-29 10:36
牛头版主,Android SD卡启动固件怎么制作啊?不要官方固件,要自己制作,可否指点一下
作者: winterner    时间: 2016-12-30 20:31
老大,我用https://pan.baidu.com/s/1i4REPKh (AndroidTool.rar)烧官方固件Firefly-rk3288_Ubuntu_1604_2016_08291523_Beta.img,一直启动失败。还是应该使用别的烧写工具?
log提示:
wait-for-root /dev/block/mtd/by-name/linuxroot, retry 2...

wait-for-root /dev/block/mtd/by-name/linuxroot, retry 30...
Gave up waiting for root device.  Common problems:
- Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
   - Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT!  /dev/block/mtd/by-name/linuxroot does not exist.  Dropping to a shell!
FATAL: Could not load /lib/modules/3.14.0/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/3.14.0/modules.dep: No such file or directory
/bin/sh: can't access tty; job control turned off
(initramfs)



作者: winterner    时间: 2017-1-3 16:58
经过尝试,我的开发板烧Firefly-rk3288_Ubuntu_1404_2016_11211031固件是正常的,更新内核也正常。
作者: wod    时间: 2017-4-18 17:35
rk3288-reload开发板只有14.04,不知道该怎么刷机?
作者: pinuo_cao124    时间: 2018-9-19 19:12
good good good
作者: lindianfeng    时间: 2018-10-8 17:23
厉害,厉害!!!!!
作者: xupeili2006    时间: 2019-1-18 18:47
深度好文,学习了!
作者: zhaoxuji    时间: 2019-2-19 16:18
真心学习了
作者: lite    时间: 2019-6-4 19:18
谢谢老大
作者: x-forever    时间: 2019-6-13 15:51
厉害了啊!
十分谢谢,最近准备定制一些驱动!
作者: 阿庆    时间: 2020-4-23 13:36
学习了,谢谢!
作者: tomas    时间: 2020-6-12 15:00
winterner 发表于 2016-12-30 20:31
老大,我用https://pan.baidu.com/s/1i4REPKh (AndroidTool.rar)烧官方固件Firefly-rk3288_Ubuntu_1604_2 ...

我也碰到同样的问题,你解决了吗?求助!
作者: 宇智波流浪    时间: 2020-10-23 16:03
版主,我的parameter.txt文件没有那个文件分区信息呢
作者: slyb2001    时间: 2020-10-24 14:13
Firefly官方网站下载Firefly官方固件Firefly-rk3288_Ubuntu_1604_2016_09031544_Beta.img已经过期,无法下载了,官网上有的都是GPT格式的镜像,盼哪位大神更给个好用的链接,谢谢!
作者: slyb2001    时间: 2020-11-2 21:08
winterner 发表于 2017-1-3 16:58
经过尝试,我的开发板烧Firefly-rk3288_Ubuntu_1404_2016_11211031固件是正常的,更新内核也正常。

能把你的固件img分享一下吗?谢谢
作者: lwh1119    时间: 2020-11-13 13:56
学习了,感谢版主。
作者: tom_liu    时间: 2021-7-2 16:55
Worth studying. Wonderful!
作者: lianghongfei    时间: 2021-9-7 14:12
C:\Users\EDZ\Desktop\111.png
官方下载的固件包,解包直接失败,这是啥原因,求问




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