7.7 KiB
7.7 KiB
02-设备树与Linux系统构建
资料源:
TL3568-EVM\3-用户手册\+TL3568-EVM\4-软件资料\Linux\+ 正点原子 B 盘
一、可学习的内容
1.1 设备树(Device Tree / DTS)
设备树是 ARM Linux 的硬件描述语言。你在 DTS 里描述"CAN 控制器挂在哪条总线、用哪些 GPIO",内核启动时解析 DTS 并自动加载对应驱动。
资料位置:
| 在哪里学 | 路径 |
|---|---|
| 正点原子 DTS 源码 | 正点原子 B 盘 02、ATK-DLRK3568开发板SDK\linux\ SDK 中的 arch/arm64/boot/dts/rockchip/rk3568-atk*.dts |
| 创龙 DTS 源码 | TL3568-EVM\4-软件资料\Linux\Kernel\src\ 解压后找 rk3568-tl3568*.dts |
| 写入 DTS 后验证 | cat /sys/kernel/debug/pinctrl/*/pinmux-pins | grep can 看引脚复用是否正确 |
DTS 节点示例(RK3568 CAN):
&can0 {
status = "okay";
assigned-clocks = <&cru CLK_CAN0>;
assigned-clock-rates = <200000000>;
pinctrl-names = "default";
pinctrl-0 = <&can0m1_pins>;
};
关键概念:
&can0→ 引用 SoC 级预定义的节点status = "okay"→ 启用此设备(默认 disabled)pinctrl-0→ 指定使用哪些 GPIO 引脚(can0m1_pins在rk3568-pinctrl.dtsi中预定义)assigned-clock-rates→ 设置 CAN 控制器时钟为 200MHz
1.2 Linux 系统构建(Buildroot)
创龙板用的是 Buildroot 2018.02,正点原子用的是 SDK 脚本编译。
| 内容 | 资料位置 |
|---|---|
| 构建完整说明 | TL3568-EVM\3-用户手册\3-1-Linux系统使用手册.pdf |
| SDK 包 | TL3568-EVM\4-软件资料\Linux\LinuxSDK\ (3 个 .tar.gz) |
| 内核源码 | TL3568-EVM\4-软件资料\Linux\Kernel\src\ |
| U-Boot 源码 | TL3568-EVM\4-软件资料\Linux\U-Boot\src\ |
| 文件系统 | TL3568-EVM\4-软件资料\Linux\Filesystem\buildroot-201802\ |
| 系统镜像烧写 | TL3568-EVM\3-用户手册\3-2-Linux系统启动卡制作及系统固化.pdf |
完整构建流程:
1. 解压 LinuxSDK/*.tar.gz → 得到 SDK 根目录
2. 进入 kernel/ → make ARCH=arm64 tl3568_linux_defconfig
3. make ARCH=arm64 rk3568-evb.dtb → 编译设备树
4. 进入 buildroot-201802/ → make tl3568_defconfig && make
5. 输出: output/images/ → boot.img + rootfs.ext4
6. 制作 SD 启动卡 → rkdeveloptool / upgrade_tool 烧写
关键命令:
# 查看当前 DTB 是否包含 CAN 节点
dtc -I dtb -O dts /boot/rk3568-tl3568.dtb | grep -A5 "can@"
# 查看内核 config 中 CAN 是否开启
zcat /proc/config.gz | grep CONFIG_CAN
# 看当前使用的 DTS 文件名
cat /proc/device-tree/model
1.3 正点原子 Ubuntu 开发环境
路径: [正点原子 B 盘 - 开发环境及SDK](../%E5%8F%B6%E9%B9%8F%E7%A8%8B/%E3%80%90%E6%AD%A3%E7%82%B9%E5%8E%9F%E5%AD%90%E3%80%91RK3568%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99%EF%BC%88B%E7%9B%98%EF%BC%89-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%8F%8ASDK/)
├── 01、Ubuntu开发环境/
│ └── Ubuntu虚拟机镜像 (.vmdk) → 装好所有编译依赖,开箱即用
└── 02、ATK-DLRK3568开发板SDK/
├── linux/ → Linux SDK (kernel + uboot + buildroot)
├── android11/ → Android 11 SDK
├── android12/ → Android 12 SDK
└── openharmony/ → OpenHarmony SDK
虚拟机镜像已预装:
- GCC 交叉编译工具链
aarch64-none-linux-gnu- - Buildroot 2018.02
- device-tree-compiler (dtc)
- rkdeveloptool (烧写工具)
首次使用建议:
- 先跑通创龙的 "3-2-Linux系统启动卡制作及系统固化.pdf" 流程,确保能出镜像
- 再单独改 DTS(比如添加 CAN 节点),重编 dtb,验证是否能加载
- 最后再改内核驱动
1.4 systemd / init 启动流程
用户手册中覆盖了但不显眼的内容——理解 Linux 启动顺序对于嵌入式开发很重要:
上电 → BootROM → U-Boot (SPL → TPL → U-Boot Proper) → 加载 DTB
→ 加载 kernel Image → kernel 启动 → 挂载 rootfs
→ /sbin/init → systemd/rcS → 启动你的应用程序
你的 CAN 协议栈应该在哪一步启动?
- 如果作为系统服务:写
.service文件放到/etc/systemd/system/ - 如果临时调试:放在
/etc/rc.local或profile.d - 生产环境:通过 Buildroot 的
package/添加为开机自启动项
二、可直接使用的资料
内核镜像(预编译)
| 文件 | 路径 |
|---|---|
| 内核 Image | 4-软件资料\Linux\Kernel\image\ |
| U-Boot | 4-软件资料\Linux\U-Boot\image\ |
系统镜像
| 文件 | 路径 |
|---|---|
| Buildroot rootfs | 4-软件资料\Linux\Filesystem\buildroot-201802\ |
| Docker 镜像 | 4-软件资料\Linux\Filesystem\docker\ (4 个) |
| 麒麟 KylinOS | 4-软件资料\KylinOS\ (4 个镜像) |
| SylixOS | 4-软件资料\SylixOS\ (国产 RTOS) |
三、学习建议
| 阶段 | 内容 | 时间 |
|---|---|---|
| 第1周 | 看懂 DTS 中一个节点(如 led),能改 status = "okay" 并验证 |
3天 |
| 第2周 | 用自己的 Ubuntu 虚拟机完整编译出一版 Buildroot 系统 | 5天 |
| 第3周 | 修改内核 config,添加 CAN 支持,重编 kernel | 3天 |
| 第4周 | 修改 DTS 添加自定义外设的引脚配置,编译 dtb,替换验证 | 3天 |
核心原则:不要试图第一次就理解全部 DTS。先改
status、先加一个小 LED 节点,跑起来再去读规范。