本文共 1316 字,大约阅读时间需要 4 分钟。
第一个内核模块嵌入由于书上代码实在简洁,自己研究通过,供大家参考
先写makefile 文件起名一定要Makefile 首字母大写,否则make过程中不能调用自己
其次,makefile仔细研究,发现
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
#内核源代码的绝对路径要根据系统实际变化最后 最坑的是大家不熟悉makefile的 根本不知道
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
中 M前后到底有没有空格,M前有空格,后面没有
clean modules前有一个空格
$前有一个空格
:=连着没空格,后面接变量也没有
all:后跟tab常识..
通过的makefile如下,可直接复制:
obj-m:=hellomod.o #obj-m:=是赋值语句,使用目标文件hellomod.o生成模块hellomod.ok #产生hellomod模块的目标文件CURRENT_PATH:=$(shell pwd)#模块所在的当前路径LINUX_KERNEL:=$(shell uname -r)#内核源代码的当前版本 LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)#内核源代码的绝对路径all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules#编译模块 clean: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean通过的hellomod.c:
#include注释书上有 仔细读;#include #include int lkp_init(void){ printk("<1>Hello,from the kernel sapce\n"); return 0;}void lkp_cleanup(void){ printk("<1>goodbye,leaving kernel sapce\n");} module_init(lkp_init); module_exit(lkp_cleanup); MODULE_LICENSE("GPL");
最后 再sodu make搞定
我的linux生成一堆
hellomod.c hellomod.mod.c makefile~ modules.order
C++11.cpp hellomod.c~ hellomod.mod.o Makefile Module.symvers cp.c hellomod.ko hellomod.o然后照着书后操作 sudo insmod hellomod.ko即可
最后关于查看日志
我的linux也显示出很多日志文件 具体显示可以找
kern.log 或 syslog
转载地址:http://ttfgi.baihongyu.com/