Firefly开源社区

12
发表新贴

Firefly Ubuntu开发入门之(3)Firefly官方固件分析

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-21 10:34:33     
本帖最后由 牛头 于 2016-9-23 09:45 编辑

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

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

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

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

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

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

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

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

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

    再来看parameter文件,这个文件让不少人载了坑,真是”众里寻他千百度蓦然回首那人却在灯火阑珊“的赶脚!
    用文本文具打开它:
jcjt7.png
    此文件里面有固件对应的不少关键信息,其中最值得关注的信息为系统的分区和根文件系统挂载点信息,如下:
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文件内容:
jcjt8.png
    package-file里面分区名可以parameter参数里的分区名对应上,每个分区对应的镜像文件也是一目了然。基本RESERVED的分区就是占位,实际不烧录任何数据。

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

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

回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-21 10:39:13     
沙发
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-21 11:04:26     
辛苦啦版主!就等着你直播了
回复

使用道具 举报

168

积分

1

威望

0

贡献

游客

积分
168
发表于 2016-9-21 11:12:26     
本帖最后由 wangdongx40423p 于 2016-9-21 15:39 编辑

明天继续加油啊,
bootloader 那部分也可以分析一下,另外怎么不用miniboot 启动ubuntu,老大有时间也描述一下,还有GPU部分,ubuntu里面设置GPU,让它工作起来。
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-21 11:16:30     
老大你是不是又搞错了。。。你给的链接是Firefly-rk3288_Ubuntu_1604_2016_08291523_Beta.img
不是Firefly-rk3288_Ubuntu_1604_2016_09031544_Beta.img啊。。。
回复

使用道具 举报

891

积分

76

威望

51

贡献

超级版主

Rank: 8Rank: 8

积分
891
发表于 2016-9-21 12:05:50     
readsa 发表于 2016-9-21 11:16
老大你是不是又搞错了。。。你给的链接是Firefly-rk3288_Ubuntu_1604_2016_08291523_Beta.img
不是Firefly ...

用来分析一样的,忽略吧。那个固件在上传,还没有链接,就用之前的版本链接代替了。
回复

使用道具 举报

69

积分

0

威望

0

贡献

游客

积分
69
发表于 2016-9-22 15:20:48     
深度好文,必须且强烈支持!!!!!
回复

使用道具 举报

64

积分

0

威望

0

贡献

技术小白

积分
64
发表于 2016-9-23 20:57:27     
老大,我给Ubuntu16.04编译3.14内核,使用从官方镜像解包出来的parameter,发现启动不成功。换成你提供的parameter后,启动便成功了。可以看到错误提示是:gave up waiting for root device. 而两个parameter文件的区别也在于root文件系统不同。那么,为什么原版解包的parameter和你给的parameter不同呢?为什么两者不能通用呢?

烧写Ubuntu内核问题记录20160923.zip (31.28 KB, 下载次数: 90)
回复

使用道具 举报

260

积分

0

威望

0

贡献

技术达人

Rank: 2

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

使用道具 举报

34

积分

0

威望

0

贡献

游客

积分
34
发表于 2016-12-30 20:31:21     
老大,我用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)


回复

使用道具 举报

返回列表
12
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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