Firefly开源社区

[Linux] [已解决]试图将rk3288 linux 内核升级为其他版本内核,请问rk3288-firefly.dtb如何

86

积分

0

威望

0

贡献

技术小白

积分
86
发表于 2019-7-31 10:21:50     
本帖最后由 adgnaf 于 2019-8-7 14:11 编辑

按照firefly 手册进行ubuntu 固件更新[1],更新的firefly ubuntu 固件的linux kernel版本为 4.4.153.
也实践了单独编译firefly linux sdk的4.4.153 linux kernel,得出zboot.img并烧入rk3288。

想请教的是,若想更新linux kernel 版本至 kernel 4.4.[xxx, xxx > 153] , 有需要注意的事项吗?

[1]: http://wiki.t-firefly.com/zh_CN/ ... rameter-fen-qu-biao


====更新 7.31====
需要更新的kernel 版本为 4.4.185。实践发现,4.4.185 的arch/arm/Makefile 相比 4.4.153 的arch/arm/Makefile 缺少一部分,使得不能使用 firefly 提供的`build.sh kernel` 来生成`zboot.img`.

目前,在Ubuntu 16.04 中使用工具链 arm-linux-gnueabihf-gcc 5.4.0, 使用 firefly_linux_defconfig 作为linux kernel配置文件,能够编译出`zImage`。
请问编出zImage的话,有办法生成firefly-rk3288需要的`zboot.img` 吗?


(firefly linux sdk中 build.sh 不能用于编译linux kernel 4.4.185 的解释)

在build.sh 中,生成zboot.img 的脚本片段为

```shell
function build_kernel() {
  # build kernel

  ...

  ... make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG && make ARCH=$RK_ARCH $RK_KERNEL_DTS.img ...

}

```
其中 `make ARCH=arm rk3288-firefly.img` 生成`zboot.img`, 依赖kernel中 arch/arm/Makefile中的 "%.img" 目标,而该目标在linux kernel 4.4.185的arch/arm/Makefile中移除了。因此,不能直接使用firefly linux sdk中提供的build.sh 直接生成"zboot.img".

====更新8.1====

对mainline linux kernel 4.4.154 与 mainline linux kernel 4.4.185 进行比较。发现rockchip 团队对4.4.154 中arch/arm/Makefile 添加了额外的构造逻辑。对"zboot.img"的构造方法如下:

zboot.img <= mkbootimg(zImage, resource.img)
(mkbootimg为firefly 提供的镜像打包程序、zImage为编译linux kernel后的内核压缩包、resource.img为firefly rk3288自定义的镜像文件)

zImage <= 常规编译linux kernel 的产出。


resource.img <= resource_tool(rk3288-firefly.dtb)
resource_tool为firefly提供的资源镜像打包程序。rk3288-firefly.dtb可能是与开发板设备树有关的二进制格式文件,未详细理解产生机制。

手工重复这个过程,以firefly 修改的kernel作为基础,能够构造出firefly-rk3288能够接受的zboot.img. 但把zImage 换成 4.4.185内核编译出的zImage,上电后会阻塞在“解压kerenl”阶段。

请问是否和"rk3288-firefly.dtb"有关?


回复

使用道具 举报

86

积分

0

威望

0

贡献

技术小白

积分
86
发表于 2019-8-7 14:11:12     
对设备树rk3288-firefly.dtb的生成已经解决。
将firefly 在github上维护的基于4.4.154内核修改的kernel中,将rk3288-firefly.dts及其依赖的.dtsi及其他文件都抽取出来,拷贝至新内核源代码目录,再进行dtb生成,能生成合法的dtb文件。
```shell
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rk3288-firefly.dtb
```
回复

使用道具 举报

86

积分

0

威望

0

贡献

技术小白

积分
86
发表于 2019-8-7 14:13:32     
将在4.4.185 内核源代码构建系统中构建的rk3288-firefly.dtb 与 firefly 基于 4.4.154 修改的内核编译出的zImage, 经过mkbootimg脚本打包,烧录至rk3288开发板后,Linux系统能够正常启动。
回复

使用道具 举报

28

积分

0

威望

0

贡献

技术小白

积分
28
发表于 2019-8-14 23:42:05     
adgnaf 发表于 2019-8-7 14:13
将在4.4.185 内核源代码构建系统中构建的rk3288-firefly.dtb 与 firefly 基于 4.4.154 修改的内核编译出的z ...

请问可以发我一份完整的linux镜像文件吗?谢谢。
回复

使用道具 举报

3

积分

0

威望

0

贡献

吃瓜的群众

积分
3
发表于 2019-8-15 15:19:23     
tw_XonOE 发表于 2019-8-14 23:42
请问可以发我一份完整的linux镜像文件吗?谢谢。

可以说一下方法。不过之后我发现,firefly 仓库(https://github.com/FireflyTeam/k ... 799a174ba290fc9+140) 中 4.4.154 linux kernel 其实不是 stable linux kernel 的 4.4.154.

因为mainline linxu kernel 中 4.4.154 的 commit id 为 4d9339a1f0 , 而 firefly 仓库历史中 4.4.154 commit id 为 28d9e2af。

方法:
1)构造dtb, 在 firefly 仓库中构造.dtb 文件。(rk3288-firefly.dtb)
2) 编译kernel, 构造出 zImage, 使用配置 firefly_linux_defconfig
3) 在firefly kernel 源码仓库中搜索 mkbootimg, 构造镜像
```
./mkbootimg --kernel zImage --second rk3288-firefly.dtb -o zboot.img
```
zboot.img 为产出,可通过AndroidTool将zboot.img 写入boot分区替换。
回复

使用道具 举报

28

积分

0

威望

0

贡献

技术小白

积分
28
发表于 2019-8-15 22:15:40     
wx_adgnaf_n9bzp 发表于 2019-8-15 15:19
可以说一下方法。不过之后我发现,firefly 仓库(https://github.com/FireflyTeam/kernel/commits/stable- ...

你好,我现在是刷了Firefly-RK3288-Reload_Ubuntu14.04_201803201147.img之后   USB无法识别并且一直停留在starting kernel,请问还有其他方式可以进行烧录文件吗,或者还有挽救USB的方法吗?谢谢。
回复

使用道具 举报

86

积分

0

威望

0

贡献

技术小白

积分
86
发表于 2020-8-6 16:14:24     
tw_XonOE 发表于 2019-8-15 22:15
你好,我现在是刷了Firefly-RK3288-Reload_Ubuntu14.04_201803201147.img之后   USB无法识别并且一直停 ...

firefly wiki提到一个灾难恢复办法,用一个镊子接通两个金属点,就能进入到一个状态。在这个状态下,能够再次少些镜像。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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