开发板驱动环境配置(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 登录板子或者接显示器进入板端终端执行以下操作将刚才选出名字带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) cleanmake编译make如果没有报错运行ls命令你就会看到新生成的名为hello.ko的二进制文件。驱动注入 Linux# 清空过去的系统内核乱七八糟信息 sudo dmesg -c sudo insmod hello.ko sudo dmesg此时你将清楚地看到在你的屏幕内核回显里面赫然挂着绿字的Hello Kernel, RK3588 Driver Module Inserted!!