linux_learn/docs/02-设备树与Linux系统构建.md

7.7 KiB
Raw Blame History

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_pinsrk3568-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 (烧写工具)

首次使用建议

  1. 先跑通创龙的 "3-2-Linux系统启动卡制作及系统固化.pdf" 流程,确保能出镜像
  2. 再单独改 DTS比如添加 CAN 节点),重编 dtb验证是否能加载
  3. 最后再改内核驱动

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.localprofile.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 节点,跑起来再去读规范。