2. Linux SDK 简介
Xniupi Linux SDK
是基于Rockchip Linux SDK
优化开发的针对XNIUPI小牛派R系列开发板/开发主机的Linux SDK,包含 Linux 系统开发用到的 boot 源码、内核源码、MCU源码、驱动、工具、系统中间件与应用程序包等,可以方便的定制、编译、打包生成Linux固件镜像。
2.1 SDK 工程目录结构
Xniupi Linux SDK
工程目录包含有buildroot、debian、app、kernel、u-boot、device、docs、external等目录。采用manifest来管理仓库,用repo工具来管理每个目录或其子目录会对应的git工程。以下为SDK工程目录结构(以基于RK3588的XNIUPI-R800为例):
XNIUPI-R800_RK3588_Linux_SDK
|-- app # 存放上层应用APP,主要是一些应用Demo
|-- buildroot
| |-- configs
| | |-- rockchip_rk3588_defconfig # Rockchip RK3588 的默认配置文件
| |-- package
| | |-- custom_package # 自定义的软件包目录
| | |-- rockchip
| | |-- rk-kernel # RK 内核相关的配置和补丁
| | |-- patches # 内核补丁文件
| | |-- configs # 内核配置文件
| |-- support
| | |-- toolchain # 工具链相关的脚本和配置
|-- debian
| |-- overlay # 存放文件和目录,用于覆盖根文件系统,满足定制化需求,比如添加自定义配置文件、脚本等
| |-- overlay-debug # 可能用于存放调试相关的覆盖文件,比如包含调试工具、调试信息配置等
| |-- packages # 用于存放 Debian 软件包相关文件,如软件包的源代码、编译脚本、控制文件等
| |-- packages - patches # 存放对 Debian 软件包的补丁文件,用于修改软件包的源代码以适配特定需求或修复问题
| |-- scripts # 包含各种脚本文件,可能用于自动化构建、配置、打包 Debian 系统相关的任务,比如编译脚本、安装脚本等
| |-- ubuntu - build - service # 可能用于存放 Ubuntu 构建服务相关的配置文件,比如构建服务的脚本、配置文件等
|-- device
| |-- rockchip
| | |-- rk3588
| | |-- rockchip_rk3588_evb7_v11_defconfig # 一个defconfig 配置代表一种 BSP 支持
|-- docs # 存放文档,包括开发指南、用户手册等
|-- external # 存放第三方仓库,比如显示、音视频、摄像头、网络、安全等
| |-- alsa-config # ALSA音频配置相关
| |-- camera_engine_rkaiq # Rockchip AIQ相机引擎
| |-- chromium # Chromium浏览器相关
| |-- common_algorithm # 通用算法库
| |-- dpdk # 数据平面开发套件
| |-- drm-cursor # DRM显示光标相关
| |-- gstreamer-rockchip # Rockchip定制的GStreamer多媒体框架
| |-- libmali # Mali GPU驱动库
| |-- linux-rga # Rockchip RGA(2D加速)驱动
| |-- mpp # Rockchip媒体处理平台
| |-- recovery # 恢复模式相关
| |-- rk_pcba_test # PCBA测试工具
| |-- rknn-toolkit2 # RKNN神经网络工具包
| |-- rknpu2 # Rockchip NPU驱动
| |-- rkscript # Rockchip脚本工具
| |-- rktoolkit # Rockchip工具包
| |-- rkupdate # 固件更新工具
| |-- rkwifibt # WiFi/BT驱动
| |-- rkwifibt-app # WiFi/BT应用
| |-- rockchip-test # Rockchip测试工具
| |-- rockit # Rockchip IT测试框架
| |-- security # 安全相关组件
| |-- uac_app # USB音频应用
| |-- uvc_app # USB视频应用
| |-- xserver # X窗口系统服务
|-- kernel
| |-- arch
| | |-- arm64 # ARM64 架构相关代码
| | |-- boot # 启动相关代码
| | |-- configs # 内核配置文件
| | |-- dts # 设备树源文件目录
| | |-- rockchip # Rockchip 设备树文件
| |-- drivers
| | |-- display # 显示驱动目录
| | |-- rockchip # Rockchip 显示驱动相关代码
| | |-- input # 输入设备驱动目录
| |-- fs # 文件系统相关代码
|-- output # 存放编译输出的固件信息、编译信息、XML、主机环境等
| |-- log # 日志
|-- prebuilts # 存放交叉编译工具链
|-- rkbin # 存放Rockchip相关二进制和工具
| |-- bin # 二进制文件目录
| |-- scripts # 脚本目录
| |-- tools # 工具目录
|-- rockdev -> output/firmware # 软链接到 output/firmware
|-- tools # 存放常用开发工具
|-- u-boot
| |-- arch
| | |-- arm64 # ARM64 架构相关代码
| |-- board
| | |-- rockchip # Rockchip 相关的开发板代码
| | |-- rk3588 # RK3588 开发板相关代码
| |-- common # 通用代码目录
| |-- include # 头文件目录
|-- yocto
| |-- conf
| | |-- local.conf # Yocto 本地配置文件
| |-- layers
| | |-- meta-rockchip # Rockchip 相关的层目录
| | |-- recipes-core # 核心配方目录
| | |-- recipes-kernel # 内核配方目录
2.2 Linux软件框架
SDK软件架构主要分为四个层次:启动层、内核层、中间层(库)、应用层,系统框图架如下:
2.2.1 启动层
启动层主要主要提供系统启动,如BootROM、U-Boot、ATF等相关支持。
2.2.2 内核层
内核层主要提供Linux Kernel的标准实现,Linux也是一个开放的操作系统,Rockchip平台的Linux核心为标准的Linux4.19/5.10内核,提供安全性,内存管理,进程管理,网络协议栈等基础支持;主要是通过Linux内核管理设备硬件资源,如CPU调度、缓存、内存、I/O等。
2.2.3 中间层(库)
中间库对应一般嵌入式系统,相当于中间件层次。包含了各种系统基础库,及第三方开源程序库支持,对应用层提供API接口,系统定制者和应用开发者可以基于Libraries的API开发新的应用。
2.2.4 应用层
应用层主要实现具体的产品功能及交互逻辑,需要一些系统基础库及第三方程序库支持,开发者可以开发是自己的应用程序,提供系统各种能力给到最终用户。
2.3 SDK 已集成的 Linux 发行版
Xniupi Linux SDK目前已集成主流的几个Linux发行版(Distribution),包括buildroot、Debian、Yocto,以下简要介绍这几种SDK原生支持的Linux发行版。
2.3.1 Buildroot
Rockchip Linux SDK 的Buildroot系统,其包含了基于 Linux 系统开发用到的各种系统源码,驱动,工具,应用软件包。Buildroot 是 Linux 平台上一个开源的嵌入式 Linux 系统自动构建框架。整个Buildroot 是由 Makefile 脚本和 Kconfig 配置文件构成的。可通过Buildroot配置,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件。
Buildroot 有以下几点优势:
通过源码构建,有很大的灵活性;
方便的交叉编译环境,可以进行快速构建,容易上手;
提供系统各组件的配置,方便定制开发。
使用 Buildroot 的 project 最出名的就是 Openwrt。可以看到,由它制作出的镜像可以跑在搭载16 Mb SPI NOR的路由器上,系统基本没包含多余的东西。 这就是得益于 Buildroot的简单化。整个 Buildroot工程在一个git维护。
Buildroot 使用 kconfig 和 make,一个defconfig 配置代表一种 BSP 支持。Buildroot 本身不具备扩展能力,用户需要自己通过脚本来完成工作。这些列出来的特点,都是和 Yocto 不同的地方。
小技巧
推荐有较强自主开发能力的用户使用 buildroot 进行开发,大部分用户建议直接使用Debian系统进行二次开发!
2.3.2 Debian
Debian 是一种完全自由开放并广泛用于各种设备的 Linux 操作系统选择Debian原因如下:
Debian 是自由软件 Debian 是由自由和开放源代码的软件组成,并将始终保持100%自由。每个人都能自由使用、修改,以及发布。大家可以基于Rockchip构建的Debian系统进行二次开发。
Debian 是一个基于 Linux稳定且安全的的操作系统。
Debian 是一个广泛用于各种设备的操作系统,其使用范围包括笔记本计算机,台式机和服务器。自1993年以来,它的稳定性和可靠性就深受用户的喜爱。我们为每个软件包提供合理的默认配置。
Debian 开发人员会尽可能在其生命周期内为所有软件包提供安全更新。
Debian 具有广泛的硬件支持。大多数硬件已获得 Linux 内核的支持。当自由软件无法提供足够的支持时,也可使用专用的硬件驱 动程序。目前Rockchip RK3588/RK3568/RK3566/RK3399/RK3288等芯片已经适配并支持。
Debian 提供平滑的更新。
Debian 以在其发行周期内轻松流畅地进行更新而闻名,不仅如此,还包括轻松升级到下一个大版本。Rockchip目前已从Debian Stretch(9)升级到Debian Buster(10)和 Bullseye(11)版本。
Debian 是许多其他发行版的种子和基础。 许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS、SteamOS 以及 Tails,都选择了 Debian 作为它们的软件基础。Debian 提供了所有工具,因此每个人都可以用能满足自己需求的软件包来扩展 Debian 档案库中的软件包。
Debian 项目是一个社区。
Debian 不只是一个 Linux 操作系统。该软件由来自世界各地的数百名志愿者共同制作。即使您不是一个程序员或系统管理员,也可以成为 Debian 社区的一员。
Rockchip定制版的Debian系统是通过Shell脚本来达到获取构建Linux Debian发行版源码,编译和安装适配Rockchip硬加速包的操作系统。
小技巧
目前该系统主要针对客户前期评估、第三方系统移植参考、和产品有复杂桌面需求等。为降低开发难度和维护难度,针对大部分用户,我们还是推荐直接使用 Linux Debian 系统!
2.3.3 Yocto
Yocto 和 Buildroot 一样, 是一套构建嵌入式系统的工具,但是两者的风格完全不同。Yocto 工程是通过一个个单独的包(meta)来维护,比如有的包负责核心,有的包负责外围。有的包用于跑 Rockchip 的芯片,有的包用于安装上weston, 有的包是则是用于跑 debian, 同样采用类似机制的nodejs,社区膨胀非常厉害,活跃度很高,每个人都可分享自己的成果到 github 上,这样的机制保证了我们可从互联网复用别人的工作成果,相当有价值。相比Buildroot系统,Yocto有其更强的编译机制,比如第三方包的依赖和重编,都会自动处理。缺点相对复杂、需VPN网络。
Yocto是一个非常灵活的构建系统,允许用户使用shell和Python来处理各种特殊情况。如果您需要更多关于Yocto的信息,请查看以下参考资料:
小技巧
目前,该系统主要针对国外客户。如果用户使用该系统,需要用户具有较强开发能力,我司不提供额外技术支持!
2.4 系统启动流程
SDK系统启动流程如下:
注解
AP 和 MCU 内部都有集成⼀个 BOOTROM,系统上电时先会运⾏ BOOTROM代码,然后 BOOTROM 代码会探测外设存储器并加载 Loader 代码。 Pre Loader ⽬前有 3 个: miniloader(⾮开源), uboot spl 和 loader。
修订历史
修订时间 | 版本号 | 修订人 | 修订内容 |
---|---|---|---|
2025年4月6号 | V0.9 | nnewn-kwf | 首次创建 |