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

固件编译
准备工作
开发环境搭建
除了系统要求外,还有其他软硬方面的要求。
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
烧写镜像文件

英创信息技术嵌入式Linux应用程序自动载入驱动模块方法简介
ASCB1智慧空开 智能微型断路器
双极型晶体管的工作原理详解
新制程引导新需求,满足韩国在内的亚洲地区PCB厂的市场需求
建筑中BIM数字化建模过程
微雪电子ROC-RK3308主板CC固件编译介绍
三星Galaxy S21 Ultra:慢动作模式解释了差异
电源效率的关键因素-电池拓扑
Silterra携半导体制造工艺技术布局中国市场
使用bc45编译ucos-II的配置过程
杉杉拟向关联方内蒙古蒙集石墨化加工服务预计金额不超5亿元
关于几款电路设计的“败笔”
荣耀用实际行动证明自己,太给力了
三星晶圆代工落后台积电 10纳米制程订单并未增加
DK075G东科650V/160mΩ氮化镓HEMT准谐振反激控制AC-DC功率开关芯片
华为将在年底前发布“吓人”的技术!
客户对薄膜电容的常见疑问
为什么中美都这么急于宣布自己的芯片技术取得进步?
无线主动降噪耳机 年轻人的降噪耳机
虹科Panorama SCADA平台在风电场测量的应用