环境
Linux
内核升级
- 下载标准内核源码
- 链接选择合适的版本,我选择的是4.3.1。
- 创建一个文件夹 放入其中,解压。进入第二层目录。
- 执行make menuconfig,进入 Processor type and feature选项,回车进入Processor family选项,选择 Generic-x86-64保存退出。
- make
- make modules
- make modules_install
- make install
- reboot
- 重启后uname -r查看新内核版本。
开始编写Hello World驱动程序
hello.c
#include <linux/init.h> /* 定义了一些相关的宏 */
#include <linux/module.h> /* 定义了模块需要的*/
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n"); /* 打印hello World */
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, world\n"); /* 打印Goodbye,world */
}
module_init(hello_init); /* 指定模块加载函数 */
module_exit(hello_exit); /* 指定模块卸载函数 */
MODULE_LICENSE("Dual BSD/GPL");
Makefile
ifeq ($(KERNELRELEASE),)
# Assume the source tree is where the running kernel was built
# You should set KERNELDIR in the environment if it's elsewhere
KERNELDIR ?= /linux-2.6.29.4/linux-2.6.29.4
# The current directory is passed to sub-makes as argument
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
# called from kernel build system: just declare what our modules are
obj-m := hello.o
endif
修改下KERNELDIR 路径就可以了。
insmod加载模块
- insmod hello.ko
以上就是全部过程了=_=