标签:style blog ar color os 使用 sp 文件 div
这个程序是《Linux device drivers》中的代码片段:
#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);
下面是makefile, 建议去看一下makefile的基本语法,$(MAKE) -C $(KERNELDIR) SUBDIRS = $(PWD) modules这句就是说首先改变目录到-C选项指定的目录(即内核源代码目录),其中保存了内核的顶层makefile文件。SUBDIRS=选项让该makefile在构造modules目标返回之前到模块源代码目录。然后,modules目标指向obj-m变量设定的模块。
ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR :=/lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules endif clean: rm -f *.o *.ko *.mod.c .hello*
好了,然后安逸的make一下:
make -C /lib/modules/3.13.0-35-generic/build SUBDIRS=/home/zachery/kernel_programming modules make[1]: Entering directory `/usr/src/linux-headers-3.13.0-35-generic‘ CC [M] /home/zachery/kernel_programming/hello.o Building modules, stage 2. MODPOST 1 modules CC /home/zachery/kernel_programming/hello.mod.o LD [M] /home/zachery/kernel_programming/hello.ko make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-35-generic‘
接下来可以看效果了,
装载模块: insmod ./hello.ko
卸载模块: rmmod hello
terminal是看不到输出的,消息进入了其中一个系统日志文件中, 我当前的Ubuntu14.04是 /var/log/syslog (实际文件名子随 Linux 发布而变化). 可以使用 tail -f /var/log/syslog查看。
ps: printk中优先级只是一个字串, 前缀于 printk 格式串之前. 注意在 KERN_ALERT 后面是不需要逗号的!!
标签:style blog ar color os 使用 sp 文件 div
原文地址:http://www.cnblogs.com/freedreamnight/p/4133221.html