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
用来分析一样的,忽略吧。那个固件在上传,还没有链接,就用之前的版本链接代替了。
作者: 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
我也碰到同样的问题,你解决了吗?求助!
作者: 宇智波流浪 时间: 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
能把你的固件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 |