0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

fireflyROC-RK3308B主板CC固件编译简介

firefly 来源:firefly 作者:firefly 2019-12-20 09:10 次阅读
固件编译
准备工作
开发环境搭建

除了系统要求外,还有其他软硬方面的要求。

  • 64 位系统

  • 硬盘空间大于 40G,如果您进行多个构建,将需要更大的硬盘空间。

推荐使用Ubuntu 16.04 的系统进行编译。其他版本没有具体测试,可能需要对软件包做相应调整。

软件包安装

操作系统安装好后,且用户已自行配置好网络环境,则可继续如下步骤完成相关软件包的安装。

  • apt-get update

sudo apt-get update
  • 安装 Kernel 及 U-Boot 编译需要依赖的软件包

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl \ zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev \ x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev \ libxml2-utils xsltproc unzip device-tree-compiler
  • 安装 Buildroot 编译需要依赖的软件包

sudo apt-get install libfile-which-perl sed make binutils gcc g++ bash \ patch gzip bzip2 perl tar cpio python unzip rsync file bc libmpc3 \ git repo texinfo pkg-config cmake tree
  • 必要工具安装

sudo apt install genext2fs sudo apt install gawk

注意:编译若遇到报错,可以视报错信息,安装对应的软件包。

交叉编译工具链介绍

鉴于 Rockchip Buildroot SDK 目前只在 Linux 下编译,我们也仅提供了 Linux 下的交叉编译工具链。其中 U-Boot 及 Kernel 使用的编译工具链预置目录在 prebuilt/gcc下,buildroot 使用该开源软件中编译出来的工具链。

U-Boot 及 Kernel 编译工具链

prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

对应版本

gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)

Buildroot 编译工具链

buildroot/output/rockchip_rk3308_release/host/bin/aarch64-rockchip-linux-gnu-

对应版本

gcc version 6.4.0 (Buildroot 2018.02-rc3-00017-g9c68ede)

如果需要其他平台或版本的工具链,需自行编译。

下载 SDK

由于 SDK 比较大,我们提供了一个打包好的.git以供下载:

  • Firefly-RK3308_Linux_SDK

下载完成后先验证一下 MD5 码:

md5sum Firefly-RK3308_Linux_SDK_git_20190924.7z 97837ef273541b45ab12260db6c01fdd Firefly-RK3308_Linux_SDK_git_20190924.7z

确认无误后,就可以解压:

mkdir -p ~/prj/Firefly-RK3308 cd ~/prj/Firefly-RK3308 7zr x Firefly-RK3308_Linux_SDK_git_20190924.7z git reset --hard HEAD

解压出来的SDK,已经默认添加远程仓库

git remote -v gitlab git@gitlab.com/TeeFirefly/rk3308-linux.git (fetch) gitlab git@gitlab.com/TeeFirefly/rk3308-linux.git (push)

以后就可以直接从 gitlab 处更新:

git pull gitlab firefly:firefly

也可以到 https://gitlab.com/TeeFirefly/rk3308-linux 在线浏览源码

SDK 目录结构
. ├── buildroot ├── build.sh -> device/rockchip/common/build.sh ├── device ├── envsetup.sh -> buildroot/build/envsetup.sh ├── external ├── kernel ├── Makefile -> buildroot/build/Makefile ├── mkfirmware.sh -> device/rockchip/rk3308/mkfirmware.sh ├── prebuilts ├── rkbin ├── rockdev ├── tools ├── u-boot └── yocto

其中:

  • buildroot 目录存放 buildroot 开源项目代码,可定制根文件系统

  • build.sh 为系统编译脚本,执行可进行 SDK 的完整编译

  • device 目录存放板级配置及一些预置文件,开机脚本等

  • external 目录存放 SDK 相关库及工具源码

  • kernel 为内核部分源码

  • mkfirmware.sh 脚本可对镜像文件进行打包,并统一拷贝至 rockdev/ 目录

  • prebuilts 目录存放 U-Boot、Kernel 编译使用的交叉编译工具链

  • rkbin 目录存放 Rockchip 平台一些关键性二进制文件,包括ddr.bin,miniloader.bin,bl31.bin,在 U-Boot 编译过程中会用到

  • rockdev 执行 mkfirmware.sh 会把系统编译的生成的镜像,统一拷贝至 rockdev/

  • tools 目录存放着 Windows 及 Linux 环境下的开发工具、调试工具、量产工具

  • u-boot 目录存放着 U-Boot 部分的源码

编译 Uboot

编译 Uboot:

cd u-boot/ ./make.sh rk3308

编译完,会生成 trust.img、rk3308_loader_xxx.bin、uboot.img 三个镜像文件。

编译 Kernel
cd kernel/ make arch=arm64 firefly-rk3308b_linux_defconfig make arch=arm64 rk3308b-roc-cc-amic_emmc.img

编译 kenrel 的时候可以直接 make arch=arm64 dts-name.img (如 rk3308b-roc-cc-amic_emmc.img),即可生成对应的 resource.img(包含 dtb 数据)。

最终生成的kernel.img和resource.img将会被打包进zboot.img,更换内核的时候,只需烧写zboot.img即可。

编译 Buildroot

注意:凡是有大更新或者个别软件更新,需要清掉旧版本的相关内容,但编译脚本是不会自动覆盖的。因此需要手动解决。最省事的方法就是删掉 buildroot/output/ 目录,然后再重新编译SDK。

rm buildroot/output -rf

编译 Buildroot,envsetup.sh 是终端环境变量设置脚本:

source buildroot/build/envsetup.sh You're building on Linux Lunch menu...pick a combo: 1. firefly_rk3308_release 2. firefly_rk3308_recovery 3. firefly_rk3308_pcba Which would you like? [1] 1 ===========================================

如选择 firefly_rk3308_release,输入对应序号 1

执行编译:

make

完成编译后执行 SDK 根目录下的 mkfirmware.sh 脚本生成固件。

./mkfirmware.sh

所有烧写所需的镜像都将会拷贝于 rockdev 目录。

rockdev/ ├── boot.img ├── MiniLoaderAll.bin ├── misc.img ├── oem.img ├── parameter.txt ├── recovery.img ├── rootfs.img ├── trust.img ├── uboot.img └── userdata.img

得到了所有镜像文件后,为了方便烧写及量产,通常可手动将这些单独的镜像通过脚本打包成为一个统一固件:update.img。打包方法见下文。

全自动编译脚本

为了提高编译的效率,降低人工编译可能出现的误操作,该 SDK 中集成了全自动化编译脚本,方便固件编译、备份。

该全自动化编译脚本原始文件存放于:

device/rockchip/common/build.sh

在SDK根目录创建了相应软链接build.sh

./build.sh roc-rk3308b-cc_release_BoardConfig.mk ./build.sh

或者可以通过修改默认配置 device/rockchip/rk3308/BoardConfig.mk 脚本中的特定变量,以编出对应产品固件

#========================= # Compile Config #========================= # Target arch export RK_ARCH=arm64 # Uboot defconfig export RK_UBOOT_DEFCONFIG=rk3308 # Kernel defconfig export RK_KERNEL_DEFCONFIG=firefly-rk3308b_linux_defconfig # Kernel dts export RK_KERNEL_DTS=rk3308b-roc-cc-amic_emmc # boot image type export RK_BOOT_IMG=zboot.img # kernel image path export RK_KERNEL_IMG=kernel/arch/arm64/boot/Image.lz4

执行自动编译脚本:

./build.sh

该脚本会自动配置环境变量,并自动编译 U-Boot,编译 Kernel,编译Buildroot,编译 Recovery 继而生成固件。

模块编译

为了方便开发调试,上文说到的“全自动化编译脚本”,也支持单独模块进行编译,方便模块调试,可指定并编译部分模块。

部分编译可参见使用说明:

./build.sh -h ====USAGE: build.sh modules==== uboot -build uboot kernel -build kernel rootfs -build default rootfs, currently build buildroot as default buildroot -build buildroot rootfs yocto -build yocto rootfs, currently build ros as default ros -build ros rootfs debian -build debian rootfs pcba -build pcba recovery -build recovery all -build uboot, kernel, rootfs, recovery image cleanall -clean uboot, kernel, rootfs, recovery firmware -pack all the image we need to boot up system updateimg -pack update image save -save images, patches, commands used to debug default -build all modules

如单独编译 kernel,只需要执行以下命令:

./build.sh kernel
统一固件打包工具

固件打包工具可将各零散镜像文件,打包成一个完整的 update.img 形式,方便量产烧写及升级。

Windows 下打包

Windows 系统下,打包工具存放在 tools\windows\AndroidTool\rockdev,打包步骤如下:

  1. 打开 rockdev 目录,编辑 package-file。按照 package-file 进行配置,package-file 里面配置 img 镜像放在 Image 目录底下的,将需要放到 Image 目录的镜像拷贝进去即可。且注意配置时,镜像名字的准确。其中注意bootloader选项,应该根据自己生成的 loader 名称进行修改。

  2. 编辑 mkupdate.bat。 需要修改 loader 名称为实际存放的loader 名称即可。

  3. 点击 mkupdate.bat 运行即可,运行完会在当前目录生成一个 update.img。

Linux 下打包

打包工具存放在 SDK/tools/linux/Linux_Pack_Firmware/rockdev/,打包步骤如下:

  1. 打开 rockdev 目录,编辑 package-file。 按照 package-file 进行配置,package-file 里面配置 img 镜像放在 Image 目录底下的,将需要放到 Image 目录的镜像拷贝进去即可。且注意配置时,镜像名字的准确。其中注意bootloader选项,应该根据自己生成的 loader 名称进行修改。

  2. 编辑 mkupdate.sh。 需要修改 loader 名称为实际存放的loader 名称即可。

  3. 在 rockdev 目录下,执行以下命令,运行完会在当前目录生成一个 update.img。

./mkupdate.sh

另外,Linux下,SDK有提供一键打包工具,自动生成统一固件 rockdev/update.img

./build.sh updateimg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34616
  • 安卓
    +关注

    关注

    5

    文章

    2081

    浏览量

    54577
  • Firefly
    +关注

    关注

    2

    文章

    534

    浏览量

    6757
  • RK3308
    +关注

    关注

    1

    文章

    39

    浏览量

    949
收藏 人收藏

    评论

    相关推荐

    ROC-RK3308主板CC固件编译的知识点解析,绝对实用

    ROC-RK3308主板CC固件编译的知识点解析,绝对实用
    发表于 03-09 07:29

    firefly RK3308开发板ROC-RK3308-CC四核64位AIOT主板规格

    ROC-RK3308-CC 四核64位AIOT主板
    的头像 发表于 11-03 11:08 4324次阅读
    firefly <b class='flag-5'>RK3308</b>开发板ROC-<b class='flag-5'>RK3308-CC</b>四核64位AIOT<b class='flag-5'>主板</b>规格

    fireflyROC-RK3308B-CC固件编译工具简介

    Docker镜像内配置好了编译SDK所需的依赖环境,无需在本地配置编译环境,进入对应的docker容器内进行SDK编译即可。 目前暂时只支持ROC-RK3308B-CC Buildro
    的头像 发表于 12-20 09:30 1684次阅读

    fireflyROC-RK3308B-CC--启动模式说明

    ROC-RK3308B-CC 有着非常灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3308B-CC 主板是不会变砖的。
    的头像 发表于 12-20 09:20 2546次阅读

    fireflyROC-RK3308B主板CC升级固件简介

    本文介绍了如何将主机上的固件文件,通过 USB Type-C 线,烧写到开发板的emmc闪存中。
    的头像 发表于 12-20 09:29 1543次阅读

    fireflyROC-RK3308B主板CC教程简介

    确认主板配件连接无误后,通过 USB Type-C 线给 ROC-RK3308B-CC 供电。
    的头像 发表于 12-20 09:32 1982次阅读

    微雪电子RK3308主板CC启动模式介绍

    ROC-RK3308-CC 有着非常灵活的启动方式。一般情况下,除非硬件损坏,ROC-RK3308-CC 主板是不会变砖的。
    的头像 发表于 12-23 15:47 2043次阅读

    微雪电子RK3308主板CC上手介绍

    确认主板配件连接无误后,通过 USB Type-C 线给 ROC-RK3308-CC 供电。
    的头像 发表于 12-23 15:50 1979次阅读

    Core 3308Y固件ROC RK3308B CC PLUS Buildroot NoUI

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS Buildroot NoUI.txt》资料免费下载
    发表于 09-13 10:01 1次下载
    Core <b class='flag-5'>3308</b>Y<b class='flag-5'>固件</b>ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> PLUS Buildroot NoUI

    Core 3308Y固件ROC RK3308B CC PLUS Buildroot MiniGUI

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS Buildroot MiniGUI.txt》资料免费下载
    发表于 09-13 10:00 3次下载
    Core <b class='flag-5'>3308</b>Y<b class='flag-5'>固件</b>ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> PLUS Buildroot MiniGUI

    ROC RK3308B CC PLUS Buildroot QT Desktop固件

    电子发烧友网站提供《ROC RK3308B CC PLUS Buildroot QT Desktop固件.txt》资料免费下载
    发表于 09-13 10:08 0次下载
    ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> PLUS Buildroot QT Desktop<b class='flag-5'>固件</b>

    Core 3308Y固件ROC RK3308B CC PLUS Ubuntu Desktop固件

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS Ubuntu Desktop固件.txt》资料免费下载
    发表于 09-13 09:53 0次下载
    Core <b class='flag-5'>3308</b>Y<b class='flag-5'>固件</b>ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> PLUS Ubuntu Desktop<b class='flag-5'>固件</b>

    Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件.txt》资料免费下载
    发表于 09-13 09:52 10次下载
    Core <b class='flag-5'>3308</b>Y<b class='flag-5'>固件</b>ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> PLUS支持Docker<b class='flag-5'>固件</b>

    Core 3308Y固件ROC RK3308B CC Buildroot NoUI固件

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC Buildroot NoUI固件.txt》资料免费下载
    发表于 09-13 09:51 0次下载
    Core <b class='flag-5'>3308</b>Y<b class='flag-5'>固件</b>ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> Buildroot NoUI<b class='flag-5'>固件</b>

    ROC RK3308B CC Buildroot Qt Desktop固件

    电子发烧友网站提供《ROC RK3308B CC Buildroot Qt Desktop固件.txt》资料免费下载
    发表于 09-13 09:49 0次下载
    ROC <b class='flag-5'>RK3308</b>B <b class='flag-5'>CC</b> Buildroot Qt Desktop<b class='flag-5'>固件</b>