1. 查看内核版本:
@H_502_1@
@H_502_1@
@H_502_1@root@ubuntu:/usr/src# uname -a
@H_502_1@Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
@H_502_1@
@H_502_1@
@H_502_1@
@H_502_1@
@H_502_1@2. 下载源码:
@H_502_1@从https://www.kernel.org/pub/linux/kernel/
@H_502_1@
@H_502_1@
@H_502_1@root@ubuntu:~/hello_module# cd /usr/src/
@H_502_1@root@ubuntu:/usr/src# ls
@H_502_1@linux-4.4.1 linux-4.4.1.tar.gz linux-headers-4.4.0-21 linux-headers-4.4.0-21-generic
@H_502_1@
@H_502_1@
@H_502_1@解压后进入目录,分别执行
@H_502_1@make oldconfig
@H_502_1@make prepare
@H_502_1@make scripts
@H_502_1@
@H_502_1@
@H_502_1@其中报错:
@H_502_1@scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: No such file or directory
@H_502_1@
@H_502_1@
@H_502_1@sudo apt-get install libssl-dev
@H_502_1@说明:我这里是没有网络的,替换了阿里源。
@H_502_1@
@H_502_1@
@H_502_1@3. 建立文件夹、文件:
@H_502_1@hello.c
@H_502_1@Makefile
@H_502_1@
@H_502_1@
@H_502_1@4. 编译文件:
@H_502_1@make
@H_502_1@
@H_502_1@
@H_502_1@5. 加载模块、卸载模块:
@H_502_1@root@ubuntu:~/hello_module# insmod hello.ko
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module# dmesg | tail -1
@H_502_1@[ 2143.690605] Hello word
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module# rmmod hello
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module#
@H_502_1@root@ubuntu:~/hello_module# dmesg | tail -1
@H_502_1@[ 2154.473897] Goodbye world
原文链接:https://www.f2er.com/ubuntu/349632.html#include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> static int hello_init(void) { printk("Hello word\n"); return 0; } static void hello_exit(void) { printk("Goodbye world\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL");@H_502_1@
ifneq ($(KERNELRELEASE),) obj-m:=hello.o else PWD:=$(shell pwd) KDIR:=/lib/modules/$(shell uname -r)/build all: $(MAKE) -C $(KDIR) M=$(PWD) clean: rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers endif