linux 最简单内核模块
#include <linux/init.h> #include <linux/module.h> static int hello_init(void) { printk("Hello,world Insmod\n"); } static void hello_exit(void) { printk("hello exit"); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("lyd"); MODULE_DESCRLPTION("Kernel: hello,world"); MODULE_LICENSE("GPL");
CURRENT = $(shell uname -r ) KERNEL_TARGET=hello_kernel MODULE_NAME :=$(KERNEL_TARGET) MODULE_SUF=.ko INCLUDE=-I/usr/src/kernels/$(CURRENT) PWD:=$(shell pwd) OUTPUT=$(PWD)/ KDIR=/lib/modules/$(CURRENT)/build all: make -C $(KDIR) INCLUDE=$(INCLUDE) M=$(PWD) modules strip --strip-debug $(KERNEL_TARGET)$(MODULE_SUF) clean: make -C $(KDIR) M=$(PWD) clean .PHONY: modules clean
make modules clean //清理
make 出不来.ko文件
之前百思不得其解,有朋友说是因为之前没有编译过,OK,哥编译一下,
问题在这里,obj-m: =test.o,少掉了,一个“=”,导致错误
编译完成之后能够看到模块文件:
$sudo insmod ./hello.ko #加载
$sudo rmmod hello #删除 或者 sudo rmmod ./hello.ko
中科方德下面编译通过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-03-24 SetFilePointer .dat文件写内容
2020-03-24 gson
2020-03-24 cc2541
2020-03-24 职业人:为什么企业区别这么大
2020-03-24 看看中科院的专利......学习啊
2019-03-24 windows驱动
2019-03-24 CComSafeArray