开发板驱动环境配置(ROCK 5C为例)

一、获取对应的包文件

具体要的 3 个包:

linux-image-rock-5c_6.1.84-1_all.deb(内核与驱动包)/linux-image-xxx.deb

  • 作用:这是最重要的核心包。它包含了官方打包好的内核本体(zImage/Image),以及让硬件正常工作的大量官方驱动文件(即各种.ko文件,比如屏幕和蓝牙的驱动)。没有它,系统和底层硬件无法正常通信。

linux-headers-rock-5c_6.1.84-1_all.deb(内核头文件包)/linux-headers-xxx.deb

  • 作用:对驱动开发者极其关键。安装了这个包,你就不需要在开发板上存放几 GB 大的完整内核 C 源码。只需依赖这些头文件,你就可以直接在板子上编译自己写的外部内核模块(也就是 out-of-tree 编译,比如图片中提到的mipi.ko)。

linux-libc-dev-rock-5c_6.1.84-1_all.deb(系统开发包)/linux-libc-dev-xxx.deb

  • 作用:主要服务于上层应用开发。如果你的上层 C 语言应用程序需要调用到底层的类型结构,就会依赖这个开发包。图片建议一并安装以防后续开发中报错。

总结来说:Image 包负责让系统和基础硬件跑起来;Headers 包为你自己写底层驱动提供环境;Libc-dev 包则为你写上层 C 应用程序提供底层结构支持。

二、对齐板端环境

Linux 驱动有一种极其变态的安全机制叫vermagic(版本魔法)。也就是说:如果你的驱动是用 6.1.84 内核代码编译出来的,但在版本号为 5.10 甚至 6.1.43 的板端内核上,是死活加载不进去的(强行insmod会直接报 Invalid module format)。

这就是为什么你需要把上面这三个包拷贝到板子上进行安装更新的原因。

请连通网络进入 ROCK 5C 开发板(使用 SSH 登录板子或者接显示器进入板端终端),执行以下操作:

  1. 将刚才选出名字带rock-5c的那 3 个.deb文件存放到板子的某个目录(比如~/pkg/)。

在该目录下运行统一安装命令:

sudo dpkg -i *rock-5c*.deb

等它安装刷新完了(大概两三分钟),重启你的板子

sudo reboot

重新进入系统,运行下面这条命令查看系统现在实际运行的内核:

uname -r

然写着:6.1.84-xxxxx(版本数字对应上你的文件名即可),那么你的目标运行环境就算对齐、搭建完毕了!

三、该"本地编译"还是"交叉编译"?(这决定你的效率)

推荐使用【本地板端编译(Native Compile)】来渡过入门期!因为我们往 ROCK 5C 里安装了linux-headers.deb,此时你的板子本身就已经成为了一台可以直接开发、直接出驱动.ko并立即装载运行的 ARM 开发机了。不需要碰你的 PC 宿主环境配置了。

你可以把这个作为将来的优化项:先把简单的 hello.c 写成能在板子里跑起来后,之后周末如果有大片时间,再去自己的 Windows/Ubuntu 电脑上研究挂起交叉编译系统

四、测试

新建并打开驱动文件hello.c

#include <linux/init.h> #include <linux/module.h> static int __init my_first_driver_init(void) { printk("=============Hello Kernel, RK3588 Driver Module Inserted!!========\n"); return 0; // 返回 0 说明加载成功 } static void __exit my_first_driver_exit(void) { printk("=============Bye Bye! Module Removed===========\n"); } module_init(my_first_driver_init); module_exit(my_first_driver_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Dong"); // 开发者名字,随便 MODULE_DESCRIPTION("My first module on Rock5c");

Makefile(注意第二行千万不能打空格,必须是Tab键出来的留白):

obj-m := hello.o # 把上面装进系统里的 header 核心挂在进来 KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: $(MAKE) -C $(KDIR) M=$(PWD) clean

make编译:

make

如果没有报错,运行ls命令,你就会看到新生成的名为hello.ko的二进制文件。

驱动注入 Linux:

# 清空过去的系统内核乱七八糟信息 sudo dmesg -c sudo insmod hello.ko sudo dmesg

此时你将清楚地看到在你的屏幕内核回显里面赫然挂着绿字的=============Hello Kernel, RK3588 Driver Module Inserted!!========