固件编译
准备工作
开发环境搭建
除了系统要求外,还有其他软硬方面的要求。
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
编译 Kernel:
cd kernel/ make arch=arm64 firefly-rk3308_linux_defconfig make arch=arm64 rk3308-roc-cc-dmic-pdm_emmc.img
编译 kenrel 的时候可以直接 make arch=arm64 dts-name.img (如 rk3308-roc-cc-dmic-pdm_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-rk3308-cc_release_BoardConfig.mk ./build.sh
注意:由于ROC-RK3308-CC使用的WIFI是AP6236,需要修改buildroot/configs/firefly_rk3308_release_defconfig,关闭BR2_PACKAGE_RKWIFIBT_RTL8188EU,打开BR2_PACKAGE_RKWIFIBT_AP6236。如果编译过buildroot,则需要删除buildroot/output/firefly_rk3308_release/build/rkwifibt-1.0.0/这个目录,再进行编译。
git diff buildroot/configs/firefly_rk3308_release_defconfig diff --git a/buildroot/configs/firefly_rk3308_release_defconfig b/buildroot/configs/firefly_rk3308_release_defconfig index d64c090..929a55b 100755 --- a/buildroot/configs/firefly_rk3308_release_defconfig +++ b/buildroot/configs/firefly_rk3308_release_defconfig @@ -29,8 +29,8 @@ BR2_PACKAGE_SOFTAPSERVER=y BR2_PACKAGE_WIFIAUTOSETUP=y BR2_PACKAGE_RKWIFIBT=y # BR2_PACKAGE_RKWIFIBT_COMPATIBLE is not set -# BR2_PACKAGE_RKWIFIBT_AP6236 is not set -BR2_PACKAGE_RKWIFIBT_RTL8188EU=y +BR2_PACKAGE_RKWIFIBT_AP6236=y +# BR2_PACKAGE_RKWIFIBT_RTL8188EU is not set BR2_PACKAGE_EQ_DRC_PROCESS=y BR2_PACKAGE_ALSA_LADSPA=y BR2_PACKAGE_ROCKCHIP_TEST=y
也可以通过修改默认配置 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-rk3308_linux_defconfig # Kernel dts export RK_KERNEL_DTS=rk3308-roc-cc-dmic-pdm_emmc # boot image type export RK_BOOT_IMG=zboot.img # kernel image path export RK_KERNEL_IMG=kernel/arch/arm64/boot/Image.lz4
注意:由于ROC-RK3308-CC使用的WIFI是AP6236,需要修改buildroot/configs/firefly_rk3308_release_defconfig,关闭BR2_PACKAGE_RKWIFIBT_RTL8188EU,打开BR2_PACKAGE_RKWIFIBT_AP6236。如果编译过buildroot,则需要删除buildroot/output/firefly_rk3308_release/build/rkwifibt-1.0.0/这个目录,再进行编译。
git diff buildroot/configs/firefly_rk3308_release_defconfig diff --git a/buildroot/configs/firefly_rk3308_release_defconfig b/buildroot/configs/firefly_rk3308_release_defconfig index d64c090..929a55b 100755 --- a/buildroot/configs/firefly_rk3308_release_defconfig +++ b/buildroot/configs/firefly_rk3308_release_defconfig @@ -29,8 +29,8 @@ BR2_PACKAGE_SOFTAPSERVER=y BR2_PACKAGE_WIFIAUTOSETUP=y BR2_PACKAGE_RKWIFIBT=y # BR2_PACKAGE_RKWIFIBT_COMPATIBLE is not set -# BR2_PACKAGE_RKWIFIBT_AP6236 is not set -BR2_PACKAGE_RKWIFIBT_RTL8188EU=y +BR2_PACKAGE_RKWIFIBT_AP6236=y +# BR2_PACKAGE_RKWIFIBT_RTL8188EU is not set BR2_PACKAGE_EQ_DRC_PROCESS=y BR2_PACKAGE_ALSA_LADSPA=y BR2_PACKAGE_ROCKCHIP_TEST=y
执行自动编译脚本:
./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,打包步骤如下:
打开 rockdev 目录,编辑 package-file。按照 package-file 进行配置,package-file 里面配置 img 镜像放在 Image 目录底下的,将需要放到 Image 目录的镜像拷贝进去即可。且注意配置时,镜像名字的准确。其中注意bootloader选项,应该根据自己生成的 loader 名称进行修改。
编辑 mkupdate.bat。 需要修改 loader 名称为实际存放的loader 名称即可。
点击 mkupdate.bat 运行即可,运行完会在当前目录生成一个 update.img。
Linux 下打包
打包工具存放在 SDK/tools/linux/Linux_Pack_Firmware/rockdev/,打包步骤如下:
打开 rockdev 目录,编辑 package-file。 按照 package-file 进行配置,package-file 里面配置 img 镜像放在 Image 目录底下的,将需要放到 Image 目录的镜像拷贝进去即可。且注意配置时,镜像名字的准确。其中注意bootloader选项,应该根据自己生成的 loader 名称进行修改。
编辑 mkupdate.sh。 需要修改 loader 名称为实际存放的loader 名称即可。
在 rockdev 目录下,执行以下命令,运行完会在当前目录生成一个 update.img。
./mkupdate.sh
另外,Linux下,SDK有提供一键打包工具,自动生成统一固件 rockdev/update.img
./build.sh updateimg
烧写镜像文件
-
嵌入式主板
+关注
关注
7文章
6085浏览量
35332 -
安卓
+关注
关注
5文章
2130浏览量
57195 -
Firefly
+关注
关注
2文章
538浏览量
7044 -
RK3308
+关注
关注
1文章
39浏览量
1132
发布评论请先 登录
相关推荐
微雪电子RK3308主板CC启动模式介绍
Core 3308Y固件ROC RK3308B CC PLUS Buildroot NoUI
Core 3308Y固件ROC RK3308B CC PLUS Buildroot MiniGUI
ROC RK3308B CC PLUS Buildroot QT Desktop固件
Core 3308Y ROC RK3308B CC PLUS Ubuntu Minimal固件
Core 3308Y固件ROC RK3308B CC PLUS Ubuntu Desktop固件
Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件
Core 3308Y固件ROC RK3308B CC Buildroot NoUI固件
ROC RK3308B CC Buildroot Qt Desktop固件
IoT四核64位开源主板ROC RK3308B CC规格书
四核64位开源主板ROC RK3308B CC Plus规格书

微雪电子ROC-RK3308主板CC固件编译介绍
评论