1 先编写一个简单的hello.c文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include < linux/module.h > #include < linux/init.h > static __init int hello_init(void) // __init 这是编译器的修饰符,也就是通知GCC(linux平台下),在这个函数执行之后, 其他的程序就可以去占用这个函数所占用的内存,这样就可以节省内存空间,如果没有 这个修饰符,这段内存直到你在rmmod的时候其他的程序采可以去占用这段内存。 { printk( "hello world\n" ); return 0; } static __exit void hello_exit(void) { printk( "godbye hello\n" ); return ; } MODULE_LICENSE( "GPL" ); //内核模块要遵循的协议 MODULE_AUTHOR( "rhel007" ); module_init( hello_init ); //内核模块在插入后要执行的函数 module_exit( hello_exit ); //内核模块在退出前要执行的函数 |
2 编写makefile
1 2 3 4 5 6 7 8 | obj-m := hello.o Kernel_path=/usr/src/kernels/$(shell uname -r)-i686 all: make -C $(Kernel_path) M=$(PWD) modules clean: make -C $(Kernel_path) M=$(PWD) clean |
3 执行命令
1 2 3 4 | make //编译内核模块 insmod hello.ko //插入内核模块 lsmod | grep hello //查看hello模块是否插入 dmesg //检查内核信息 |
4 删除模块
1 2 | rmmod hello dmesg |