某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:
Hello, world!
ldd3的源代码可以从这里下载:/ 然后找“Download Example Code”
hello.c在misc-modules这个目录里面。不过我看书的习惯是把所有的代码都手工输入一次。
Makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
make的时候,Makefile会被执行两次:
第一次进入else,设置KERNELDIR和PWD,然后执行$(MAKE) -C的那一行,这次的make会先到内核源代码的根目录执行,然后再回来,这次就会执行到obj-m := hello.o了。
hello.c的代码:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world/n");
}
module_init(hello_init);
module_exit(hello_exit);
这个代码实在太简单了,没什么好说的。make之后,用modinfo可以查看hello.ko的信息。注意其中的vermagic,他记录了编译的内核的版本,如果运行的版本与此不一致,insmod的时候会失败。
用su切换到root,insmod/rmmod,用dmesg和lsmod可以看到效果。
本文发布于:2024-01-29 18:24:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652384917398.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |