linux_learn/docs/01-Linux内核与驱动开发.md

16 KiB
Raw Permalink Blame History

01-Linux内核与驱动开发

资料源: TL3568-EVM\6-开发参考资料\Rockchip官方参考文档


一、可学习的内容

RK3568 是 Rockchip 的 SoC官方提供了完整的驱动参考文档。以下按外设模块列出资料位置和可学习的方向。

1.1 常规外设驱动GPIO / SPI / UART / I2C / PWM / CAN

模块 文档位置 可学内容
CAN Common/CAN/ (2 份 PDF) RK3568 CAN 控制器寄存器配置、ip link 对应的底层 ioctl 实现、FD 模式启用
SPI Common/SPI/ (2 份 PDF) Rockchip SPI 主控制器架构、DMA 传输模式、设备树 spi-max-frequency 配置
UART Common/UART/ (3 份 PDF) 串口 DMA 收发、流控 (RTS/CTS)、波特率自动检测
I2C Common/I2C/ (2 份 PDF) I2C 主机模式、时钟拉伸、设备树 i2c-scl-rising-time-ns
PWM Common/PWM/ (2 份 PDF) PWM 输出、捕获输入、设备树 pwms 属性
Pin-Ctrl Common/Pin-Ctrl/ (2 份 PDF) GPIO 引脚复用配置 (pinctrl)、驱动强度、施密特触发

学习路线

  1. 先读 CAN 文档(你项目中直接用到)
  2. 再读 SPI/UART/I2C嵌入式外设三大件每个驱动模式几乎一样platform_driver → probe → 注册字符设备/cdev → file_operations → read/write/ioctl
  3. Pin-Ctrl 是理解"为什么 ip link set can0 up 会失败"的关键——CAN 引脚可能被其他功能占用

1.2 高速外设PCIe / USB / GMAC

模块 文档位置 可学内容
PCIe Common/PCIe/ (4 份 PDF) PCIe RC/EP 模式、MSI 中断、DMA 数据传输
USB Common/USB/ (15 份 PDF) USB 3.0/2.0 Host/Device 模式、Type-C 切换、OTG
GMAC Common/GMAC/ (5 份 PDF) 千兆以太网 MAC 控制器、RGMII 时序约束、1588 PTP

1.3 多媒体与加速VPU / NPU / GPU / Camera / Display

模块 文档位置 可学内容
DISPLAY Common/DISPLAY/ (18 份 PDF) HDMI/LVDS/MIPI DSI 输出、多屏同显/异显、图层合成
CAMERA Common/CAMERA/ (3 份 PDF) MIPI CSI/DVP 摄像头接口、ISP 图像处理流水线
NPU Common/NPU/ (3 份 PDF) RK3568 NPU 架构、RKNN 模型部署、YOLOv5 推理

1.4 存储与文件系统MMC / NVM / FS / DDR

模块 文档位置 可学内容
MMC Common/MMC/ (2 份 PDF) eMMC/SD 卡驱动、HS200/HS400 高速模式
NVM Common/NVM/ (9 份 PDF) NAND/NOR Flash、SFTL (闪存转换层)
FS Common/FS/ (1 份 PDF) Linux 文件系统在 Rockchip 上的适配
DDR Common/DDR/ (11 份 PDF) DDR 初始化/训练、频率调节、带宽监控

1.5 系统与安全CLK / PMIC / DEBUG / TRUST

模块 文档位置 可学内容
CLK Common/CLK/ (3 份 PDF) 时钟树、PLL 配置、clk_summary 解读
DVFS Common/DVFS/ (4 份 PDF) 动态电压频率调节、CPU 调频策略
PMIC Common/PMIC/ (10 份 PDF) RK806/RK809 电源管理 IC、上电时序
POWER Common/POWER/ (2 份 PDF) 系统休眠/唤醒、低功耗模式
DEBUG Common/DEBUG/ (4 份 PDF) JTAG/SWD 调试、crash 工具分析、看门狗
TRUST Common/TRUST/ (6 份 PDF) ATF (ARM Trusted Firmware)、OPTEE 安全 OS、安全启动
UBOOT Common/UBOOT/ (7 份 PDF) U-Boot 在 RK3568 上的引导流程、FIT Image

二、Linux 应用层文档

路径: [6-开发参考资料\Rockchip官方参考文档\Linux\](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/)

├── [ApplicationNote/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/ApplicationNote/) (19 份 PDF)  ← 最实用!
│   → Rockchip平台Linux应用开发笔记
│   → 涵盖: 启动流程、GPIO/sysfs、LED、按键、RTC、WDT、I2C设备、SPI设备等
├── [Camera/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Camera/) (6 份 PDF) → V4L2 摄像头框架
├── [Graphics/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Graphics/) (4 份 PDF) → DRM/KMS 显示框架
├── [Multimedia/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Multimedia/) (14 份 PDF) → GStreamer/FFmpeg 多媒体
├── [Profile/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Profile/) (5 份 PDF) → 性能分析 (perf、ftrace)
├── [Recovery/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Recovery/) (6 份 PDF) → OTA 升级、恢复出厂
├── [Security/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Security/) (4 份 PDF) → dm-verity、SELinux
└── [Wifibt/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/Wifibt/) (6 份 PDF) → WiFi/BT 驱动

ApplicationNote 是最值得读的——它就是"我该用什么 API 操作 GPIO/I2C/UART"的答案。


三、用户手册中的驱动相关文档

以下在 [TL3568-EVM\3-用户手册](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/) 下:

文件名 内容
2-2-Linux应用开发手册.pdf 必读! GPIO/LED/按键/UART/SPI/I2C/CAN 应用层编程指南
2-3-Linux-RT系统测试手册.pdf Preempt-RT 内核编译 + Cyclictest 延迟测试
2-9-1-基于Linux + RT-Thread、Baremetal的AMP开发案例.pdf AMP 多核异构详解
2-10-Docker容器部署方法说明.pdf 在 RK3568 上跑 Docker
2-12-ISP图像处理开发案例.pdf ISP 图像调试
2-13-NPU开发案例.pdf NPU 模型部署
2-18-GDB程序调试方法说明.pdf GDB/GDB Server 远程调试

四、驱动开发学习建议

如果你要写一个 Linux 新驱动

标准流程(以写一个 I2C 温度传感器驱动为例):

1. 读 [Common/I2C/](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Common/I2C/) 文档   → 了解 RK3568 I2C 控制器的硬件特性
2. 读 [ApplicationNote](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-%E5%BC%80%E5%8F%91%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/Rockchip%E5%AE%98%E6%96%B9%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3/Linux/ApplicationNote/)    → 了解 Linux 用户态怎么用 /dev/i2c-* 或 sysfs
3. 写 DTS 节点           → 在设备树中描述传感器挂在哪条 I2C 总线、地址多少
4. 写 platform_driver    → probe() 中 i2c_new_client_device() 注册设备
5. 注册到 hwmon/sysfs    → 温度值暴露到 /sys/class/hwmon/
6. 编译 -> insmod -> dmesg 验证

关键工具链

  • dmesg | grep <name> — 看 probe 是否成功
  • cat /sys/kernel/debug/pinctrl/*/pinmux-pins | grep <function> — 检查引脚复用
  • cat /sys/kernel/debug/clk/clk_summary — 检查时钟是否正确
  • devmem <addr> — 直接读寄存器(最后手段)

五、可直接使用的 Demo 代码

路径: [4-软件资料\Demo\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/)

base-demos/
├── [can_echo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/can_echo/)         ← CAN 收发回环示例
├── [led_flash/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/led_flash/)        ← GPIO 控制
├── [key_demo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/key_demo/)         ← 按键中断
├── [spi_rw/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/spi_rw/)           ← SPI 读写
├── [uart_rw/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/uart_rw/)          ← UART 收发
├── [devmem_rw/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/devmem_rw/)        ← 物理内存读写
├── [lcd_demo/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/lcd_demo/)         ← LCD 显示
├── [tcp_udp/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/tcp_udp/)          ← 网络编程
├── [igh_ethercat_dc_motor/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/igh_ethercat_dc_motor/)  ← IgH EtherCAT 主站 + 电机控制
└── [EcMasterDemoDcMotor/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/base-demos/EcMasterDemoDcMotor/)    ← Acontis EtherCAT 主站

linux-rt-demos/
├── [Cyclictest/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/linux-rt-demos/Cyclictest/)       ← 实时延迟测试
├── [rt_gpio_ctrl/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/linux-rt-demos/rt_gpio_ctrl/)     ← 实时 GPIO 控制 (SCHED_FIFO)
├── [rt_input/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/linux-rt-demos/rt_input/)         ← 实时输入处理
└── [rt_spi_rw/](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-%E8%BD%AF%E4%BB%B6%E8%B5%84%E6%96%99/Demo/linux-rt-demos/rt_spi_rw/)        ← 实时 SPI 读写