# 02-设备树与Linux系统构建 > 资料源: [`TL3568-EVM\3-用户手册\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/) + [`TL3568-EVM\4-软件资料\Linux\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/) + [正点原子 B 盘](../%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/) --- ## 一、可学习的内容 ### 1.1 设备树(Device Tree / DTS) 设备树是 ARM Linux 的硬件描述语言。你在 DTS 里描述"CAN 控制器挂在哪条总线、用哪些 GPIO",内核启动时解析 DTS 并自动加载对应驱动。 **资料位置**: | 在哪里学 | 路径 | |----------|------| | 正点原子 DTS 源码 | [正点原子 B 盘 `02、ATK-DLRK3568开发板SDK\linux\`](../%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/02%E3%80%81ATK-DLRK3568%E5%BC%80%E5%8F%91%E6%9D%BFSDK/linux/) SDK 中的 `arch/arm64/boot/dts/rockchip/rk3568-atk*.dts` | | 创龙 DTS 源码 | [`TL3568-EVM\4-软件资料\Linux\Kernel\src\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Kernel/src/) 解压后找 `rk3568-tl3568*.dts` | | 写入 DTS 后验证 | `cat /sys/kernel/debug/pinctrl/*/pinmux-pins \| grep can` 看引脚复用是否正确 | **DTS 节点示例**(RK3568 CAN): ```dts &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`](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/3-1-Linux%E7%B3%BB%E7%BB%9F%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.pdf) | | SDK 包 | [`TL3568-EVM\4-软件资料\Linux\LinuxSDK\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/LinuxSDK/) (3 个 .tar.gz) | | 内核源码 | [`TL3568-EVM\4-软件资料\Linux\Kernel\src\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Kernel/src/) | | U-Boot 源码 | [`TL3568-EVM\4-软件资料\Linux\U-Boot\src\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/U-Boot/src/) | | 文件系统 | [`TL3568-EVM\4-软件资料\Linux\Filesystem\buildroot-201802\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Filesystem/buildroot-201802/) | | 系统镜像烧写 | [`TL3568-EVM\3-用户手册\3-2-Linux系统启动卡制作及系统固化.pdf`](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/3-2-Linux%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E5%8D%A1%E5%88%B6%E4%BD%9C%E5%8F%8A%E7%B3%BB%E7%BB%9F%E5%9B%BA%E5%8C%96.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 烧写 ``` **关键命令**: ```bash # 查看当前 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"](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/3-2-Linux%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E5%8D%A1%E5%88%B6%E4%BD%9C%E5%8F%8A%E7%B3%BB%E7%BB%9F%E5%9B%BA%E5%8C%96.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.local` 或 `profile.d` - 生产环境:通过 Buildroot 的 `package/` 添加为开机自启动项 --- ## 二、可直接使用的资料 ### 内核镜像(预编译) | 文件 | 路径 | |------|------| | 内核 Image | [`4-软件资料\Linux\Kernel\image\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Kernel/image/) | | U-Boot | [`4-软件资料\Linux\U-Boot\image\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/U-Boot/image/) | ### 系统镜像 | 文件 | 路径 | |------|------| | Buildroot rootfs | [`4-软件资料\Linux\Filesystem\buildroot-201802\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Filesystem/buildroot-201802/) | | Docker 镜像 | [`4-软件资料\Linux\Filesystem\docker\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Linux/Filesystem/docker/) (4 个) | | 麒麟 KylinOS | [`4-软件资料\KylinOS\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/KylinOS/) (4 个镜像) | | SylixOS | [`4-软件资料\SylixOS\`](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/SylixOS/) (国产 RTOS) | --- ## 三、学习建议 | 阶段 | 内容 | 时间 | |:---:|------|:---:| | 第1周 | 看懂 DTS 中一个节点(如 led),能改 `status = "okay"` 并验证 | 3天 | | 第2周 | 用自己的 Ubuntu 虚拟机完整编译出一版 Buildroot 系统 | 5天 | | 第3周 | 修改内核 config,添加 CAN 支持,重编 kernel | 3天 | | 第4周 | 修改 DTS 添加自定义外设的引脚配置,编译 dtb,替换验证 | 3天 | > **核心原则**:不要试图第一次就理解全部 DTS。先改 `status`、先加一个小 LED 节点,跑起来再去读规范。