HelloWorld
代码
mini_module.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL"); //遵循BSD和GPL开源许可
MODULE_AUTHOR("TAXUE"); //模块作者
static int hello_init(void){
printk(KERN_EMERG "HELLO World enter!\n"); //KERN_EMERG代表打印的等级
return 0;
}
static void hello_exit(void){
printk(KERN_EMERG "HELLO World exit!\n");
}
module_init(hello_init); //模块入口,加载驱动时执行参数内的函数
module_exit(hello_exit); //模块出口,卸载模块时执行参数内的函数
Makefile
#!bin/bash
#通知编译器使用哪个脚本语言
obj-m += mini_module.o
#将c文件编译成同名的.o文件
KDIR := /work/kernel/iTop4412_Kernel_3.0
#内核代码的路径
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
#执行make命令时,默认来找all选项
#make -C 调用执行的路径,也就是接下来的KDIR变量
#modules表示将驱动编译成模块
clean:
rm -rf *.o
#all和clean下一行的命令,一定要以【Tab】开头
操作
执行make编译驱动,得到mini_module.ko文件,即是驱动模块,将驱动模块拷贝至板卡上
insmod mini_module.ko
#加载驱动模块
rmmod mini_module.ko
#卸载模块
dmesg
#查看模块加载和卸载时的打印信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术