1. Linux SDK 介绍

Linux SDK 是由 Firefly 官方提供的 Linux 软件开发工具包,旨在方便用户基于其进行模块开发与系统定制。

1.1. 获取与编译 SDK

具体详细请到《维基教程》,选择设备后,点击 Linux 开发 标题下的 编译 Ubuntu 固件 页面。

例如 ROC-RK3568-PC:

_images/wiki_select_roc-rk3568-pc_zh.png _images/wiki_select_roc-rk3568-pc_build_ubuntu_zh.png

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 格式固件的工具可以选用:

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 卡:

_images/sdcard-samsung-1.png _images/sdcard-sandisk-1.png _images/sdcard-transcend-1.png