Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387262
  • 博文数量: 115
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 1009
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-23 17:05
文章分类

全部博文(115)

文章存档

2011年(2)

2010年(86)

2009年(27)

我的朋友

分类: 嵌入式

2010-08-02 22:46:28

在毕业的一年里,买了很多linux的书,每本都有翻过,也翻了不少,但是没有那本能够深入。于是最近决定专心学习《Linux设备驱动程序》,将书中的实验一个一个都做一遍。看跟做的效果完全不一样的,看的书太多也不好,还没学到东西就把思维搅乱了。
下面是第二章中最简单的hello world模块,我在虚拟机下编译x86平台的。
hello_world.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
    printk(KERN_ALERT "Hello,crule world\n");
    return 0;
}
static int hello_exit(void)
{
    printk(KERN_ALERT "Goodbye,crule world\n");
    return 0;
}
module_init(hello_init);
module_exit(hello_exit);
 
Makefile
obj-m = hello_world.o
module-objs = hello_world.o
KERNELDIR = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)
all:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    rm -rf *.o *~ *.mod.c *.mod.o *.order *.symvers *.markers *.ko
程序中,printk用于打印一些信息,与printf类似,不同的是printk根据不同日志级别的优先级对消息进行分类,日志级别的宏有KERN_INFO、KERN_ALEAT等,各个宏的含义见第四章。
这里在加载模块之前使用命令“tail -f kern.log”打开日志文件。运行insmod hello_module.ko时,在终端中将显示“Aug  2 06:45:22 ubuntu kernel: [ 4228.668791] Hello,crule world”类似的打印信息。模块卸载时有类似的显示。
 
 
交流邮箱:
阅读(405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~