当前位置: 首页 > news >正文

开发板驱动环境配置(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!!========

http://www.jsqmd.com/news/1125769/

相关文章:

  • 当我们在谈论“开源低科技”时,我们在谈论什么?
  • 数据库学习笔记2——MySQL 的锁机制
  • 编译原理第三版第五章课后题1-2题
  • 本地代码编辑器集成DeepSeek模型:从原理到实践的完整指南
  • 【计算机毕业设计】基于Java的智能停车场预约收费系统
  • Plone开发环境搭建:pip install的正确用法与边界
  • 自定义AES变形加密
  • 2026年标书制作公司专业度大比拼,哪家能脱颖而出?
  • 炉石传说脚本Hearthstone-Script:5分钟实现智能自动化对战的终极指南
  • 硅胶密封件实测:2026年7月亲测排行
  • 局域网文件共享实战:从“账户被禁用”到成功互传文件
  • Dify工作流与MCP服务:构建可嵌入IDE的AI智能副驾
  • DMDUL:达梦数据库离线抽取数据工具
  • 告别西门子依赖!C# 实现信捷 XD 系列 PLC 通信与数据采集
  • 普通人别死磕芯片级维修!设备装调,才是普通人更稳的技术出路
  • WP7有约(二):课后作业
  • Window系统Claude Code安装教程
  • 自动售货机的商品供应链管理,怎么做更高效~YH
  • 我用 Codex 复刻了一个 Windows 11 计算器,过程比想象中真实多了
  • Java后端面试与职业发展:从核心技能到AI应用集成
  • 中国 AI 冲击正在撼动硅谷——GLM-5.2 让硅谷大佬纷纷转向中国模型
  • idea 配置docker运行项目
  • 设计模式系列-适配器模式一、上篇回顾
  • 商品条码查询API实战:调用免费接口快速获取产品信息
  • 专业的区域教育一体化管理平台哪家技术强
  • thinkphp连接远程redis提示 Fatal error: Uncaught RedisException: WRONGPASS invalid username-password
  • 小红书数据采集终极指南:Python xhs库完整实战教程
  • # Cube Sandbox v0.3.0 实战全记录:从零部署到玩转快照/克隆/回滚
  • 海水环境防腐优选,锌合金牺牲阳极优势盘点
  • 为什么合规三证仪器稳定性参差不齐?原来是这些因素在作祟!