最近开始学习linux驱动编程,看的资料是经典的《linux设备驱动开发 第3版》。 开始驱动练习的前提条件是须要本身的内核树。 本人的系统为ubuntu 12.04 LTS,具体创建的步骤以下: (1) 查看自身系统的内核版本,指令为:uname -r,输出的信息: **3.8.0-29-generic** 说明内核版本为3.8.0。 (2) 在目录/usr/src目录下发现有一下文件: **linux-headers-3.8.0-29 linux-headers-3.8.0-29-generic** 从文件名能够看出,这两个目录下只有代码的头文件。 (3) 测试只有头文件是否能够动态加载本身的helloworld模块(生成方法能够参考《linux 设备驱动开发》)。 (4) hello.c文件内容: #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_EMERG "Hello world\n"); return 0; } static int hello_exit(void) { printk(KERN_EMERG "Goodbye, hello world!\n"); return 0; } module_init(hello_init); module_exit(hello_exit); Makefile文件内容: ifneq ($(KERNELRELEASE),) obj-m :=hello.o else KDIR := /lib/modules/3.8.0-29-generic/build all: make -C $(KDIR) M=$(PWD) modules clean: rm -f *.ko *.o *.mod *.mod.c *sysmvers endif (5) 运行:sudo insmod hello.ko sudo rmmod hello.ko 终端没有反应,可是在查看
/var/log/syslog中发现了输出信息:说明模块已经被内核成功加载。linux