1. Linux SDK 介绍¶
Linux SDK 是由 Firefly 官方提供的 Linux 软件开发工具包,旨在方便用户基于其进行模块开发与系统定制。
1.2. SDK 目录树¶
各个芯片平台的 Linux SDK 目录树可能略有差异,但一般如下:
.
├── app # 存放上层应用 app,主要是 qcamera/qfm/qplayer/settings 等一些应用程序。
├── buildroot # 基于 buildroot (2018.02-rc3) 开发的根文件系统。
├── build.sh -> device/rockchip/common/build.sh # Linux SDK 编译脚本。
├── device # 存放各芯片板级配置和 Parameter 文件,以及一些编译与打包固件的脚本和预备文件。
├── debian # 基于debian 开发的根文件系统。
├── docs # 存放芯片模块开发指导文档、平台支持列表、芯片平台相关文档、Linux开发指南等。
├── envsetup.sh -> buildroot/build/envsetup.sh # 配置 Buildroot 编译环境脚本。
├── external # 存放第三方相关仓库,包括音频、视频、网络、recovery 等。
├── kernel # 存放 kernel 开发的代码。
├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh # rockdev 目录链接更新脚本。
├── prebuilts # 存放交叉编译工具链。
├── rkbin # 存放 Rockchip 相关的 Binary 和工具。
├── rkflash.sh -> device/rockchip/common/rkflash.sh # 固件烧写脚本。
├── tools # 存放 Linux 和 Windows 操作系统环境下常用工具。
├── u-boot # 存放基于 v2017.09 版本进行开发的 uboot 代码。
└── yocto # 基于 yocto 开发的根文件系统。
1.3. 板级配置文件¶
编译 SDK 之前,用户需要选择板级配置文件,这些文件位于<SDK>/device/rockchip
目录下,例如rk356x
:
.
├── aio-3566-jd4-2cam-buildroot.mk
├── aio-3566-jd4-2cam-ubuntu.mk
├── aio-3566-jd4-buildroot.mk
├── aio-3566-jd4-mipi-2cam-buildroot.mk
├── aio-3566-jd4-mipi-2cam-ubuntu.mk
├── aio-3566-jd4-mipi-buildroot.mk
├── aio-3566-jd4-mipi-ubuntu.mk
├── aio-3566-jd4-ubuntu.mk
├── aio-3568j-2cam-buildroot.mk
├── aio-3568j-2cam-ubuntu.mk
├── aio-3568j-buildroot.mk
├── aio-3568j-lede.mk
├── aio-3568j-mipi-2cam-buildroot.mk
├── aio-3568j-mipi-2cam-ubuntu.mk
├── aio-3568j-mipi-buildroot.mk
├── aio-3568j-mipi-ubuntu.mk
├── aio-3568j-nvr.mk
├── aio-3568j-openwrt.mk
├── aio-3568j-ubuntu.mk
├── ipc-m10r800-a3568j-ubuntu.mk
├── itx-3568jq-2cam-ubuntu.mk
├── itx-3568jq-lvds-2cam-ubuntu.mk
├── itx-3568jq-lvds-ubuntu.mk
├── itx-3568jq-mipi-ubuntu.mk
├── itx-3568jq-ubuntu.mk
├── roc-rk3566-pc-2cam-buildroot.mk
├── roc-rk3566-pc-2cam-ubuntu.mk
├── roc-rk3566-pc-buildroot.mk
├── roc-rk3566-pc-lede.mk
├── roc-rk3566-pc-mipi-2cam-buildroot.mk
├── roc-rk3566-pc-mipi-2cam-ubuntu.mk
├── roc-rk3566-pc-mipi-buildroot.mk
├── roc-rk3566-pc-mipi-ubuntu.mk
├── roc-rk3566-pc-openwrt.mk
├── roc-rk3566-pc-ubuntu.mk
├── roc-rk3568-pc-2cam-buildroot.mk
├── roc-rk3568-pc-2cam-ubuntu.mk
├── roc-rk3568-pc-buildroot.mk
├── roc-rk3568-pc-lede.mk
├── roc-rk3568-pc-mipi-2cam-buildroot.mk
├── roc-rk3568-pc-mipi-2cam-ubuntu.mk
├── roc-rk3568-pc-mipi-buildroot.mk
├── roc-rk3568-pc-mipi-ubuntu.mk
├── roc-rk3568-pc-openwrt.mk
├── roc-rk3568-pc-ubuntu.mk
├── station-m2-ubuntu.mk
└── station-p2-ubuntu.mk
注意:由于 SDK 版本的不同,这些文件略有差异,请以 SDK 为准!
以roc-rk3568-pc-mipi-2cam-buildroot.mk
为例,板级配置文件的命名组合如下:
设备名:
roc-rk3568-pc
配件:
mipi-2cam
文件系统:
buildroot
各个配件命名的含义如下:
xxxx-buildroot.mk # 使用 HDMI + 单目摄像头
xxxx-2cam-buildroot.mk # 使用 HDMI + 双目摄像头
xxxx-mipi-buildroot.mk # 使用 mipi + 单目摄像头
xxxx-mipi-2cam-buildroot.mk # 使用 mipi + 双目摄像头
确认好在板级配置文件后,在 SDK 根目录下使用build.sh
脚本指定:
./build.sh roc-rk3568-pc-mipi-2cam-buildroot.mk
指定文件后会更新到<SDK>/device/rockchip/.BoardConfig.mk
文件,检查该文件可以验证是否配置成功。
相关配置介绍:
# Target arch
export RK_ARCH=arm64 # 64位 ARM 架构
# Uboot defconfig
export RK_UBOOT_DEFCONFIG=firefly_rk3568 # u-boot 配置文件
# Kernel defconfig
export RK_KERNEL_DEFCONFIG=firefly_linux_defconfig # kernel 配置文件
# Kernel dts
export RK_KERNEL_DTS=rk3568-firefly-roc-pc # dts 文件
# parameter for GPT table
export RK_PARAMETER=parameter-ubuntu-fit.txt # 分区表
# rootfs image path
export RK_ROOTFS_IMG=ubuntu_rootfs/rk356x_ubuntu_rootfs.img # 根文件系统路径
1.4. 固件分区说明¶
1.4.1. parameter 分区表¶
parameter.txt
文件中包含了固件的分区信息,以parameter-ubuntu-fit.txt
为例:
路径:<SDK>/device/rockchip/rk356x/parameter-ubuntu-fit.txt
FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot:bootable),0x00020000@0x00028000(recovery),0x00010000@0x00048000(backup),0x00c00000@0x00058000(rootfs),-@0x00c58000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
CMDLINE
属性是我们关注的地方,以 uboot 为例,0x00002000@0x00004000(uboot)
中 0x00004000
为 uboot 分区的起始位置,0x00002000
为分区的大小,以此类推。
1.4.2. package-file¶
package-file
文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt
文件保持一致。
分区镜像,是分区的镜像数据,用于存储设备对应分区的烧写。例如,编译 SDK 会构建出 u-boot.img、boot.img、和 recovery.img 等分区镜像文件,boot.img 会被写到 eMMC 或 SD 卡的 “boot” 分区, 注意 boot.img 实际上是 kernel 镜像文件。
路径:<SDK>/tools/linux/Linux_Pack_Firmware/rockdev/rk356x-ubuntu-package-file
# NAME Relative path
#
#HWDEF HWDEF
package-file package-file
bootloader Image/MiniLoaderAll.bin
parameter Image/parameter.txt
uboot Image/uboot.img
misc Image/misc.img
boot Image/boot.img
recovery Image/recovery.img
rootfs Image/rootfs.img
userdata RESERVED
backup RESERVED
1.5. 固件打包格式¶
SDK 可打包两种格式固件:
RK 格式固件:
./build.sh updateimg
(默认打包此格式)RAW 格式固件:
./build.sh rawimg
RAW 格式固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始镜像。RAW 格式固件一般烧写到 SD 卡中。烧写 RAW 格式固件的工具可以选用:
balenaEtcher (Linux/Windows/Mac)
dd (Linux)
RK 格式固件,是以 Rockchip 专有格式打包的固件,使用 Rockchip 提供的工具可以烧写到 eMMC 或者 SD 卡中。 烧写 RK 格式固件的工具可以选用:
烧写 eMMC:
AndroidTool(RKDevTool) (Windows)
Linux_Upgrade_Tool(upgrade_tool) (Linux)
烧写 SD 卡:
SD_Firmware_Tool (Windows)
若您想要把固件烧写到 SD 卡,要注意 SD 卡的选购,这是因为作为启动盘,一张优质可靠、高速读写的 SD 卡,对于系统的稳定性来说是非常关键。现将《如何准备一张 SD 卡(英文)》一文的要点摘录如下:
遇到启动或稳定性问题,有超过 95% 的可能是电源供应不足或 SD 卡问题(坏卡,坏读卡器,烧写SD卡时出错,卡读写太慢)。
推荐使用 Class 10 以上的 SD 卡,并使用专业工具去测试是否真卡。
尽量使用带校验的烧写工具。
如需将 SD 卡恢复至出厂设置,使用 SD Formatter 工具做格式化。
选择以下优质 SD 卡: