Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541959
  • 博文数量: 83
  • 博客积分: 4136
  • 博客等级: 中校
  • 技术积分: 886
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 21:14
文章分类

全部博文(83)

文章存档

2013年(1)

2011年(25)

2010年(57)

分类: LINUX

2010-12-05 10:19:56

1、首先写一个简单的内核模块。并命名为hello.c


#include
#include

MODULE_LICENSE("GPL");
MODULE_AUTHOR("RAIN");
MODULE_DESCRIPTION("Hello world module");

static int __init hello_init(void)
{
    printk( "<0>hello world!\n");
    return 0;
}
static void __exit hello_exit(void)
{
    printk(KERN_EMERG "hello exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);


简要说明一下:
有两个很关键的函数:module_init(hello_init); module_exit(hello_exit); 他们必须要有的。

2、编写Makefile


ifneq ($(KERNELRELEASE),)

obj-m :=hello.o

else
KDIR:= /lib/modules/2.6.18-194.el5/build

default:
    make -C $(KDIR) M=$(PWD) modules
install:
    insmod hello.ko
uninstall:
    rmmod hello
 
clean:
    rm -f *.ko *.o *.mod.o *.mod.c .symvers

endif

 
简要说明:
  • obj-m :=hello.o  是说明要根据hello.c生成 hello.o内核模块,一般你的c文件是什么名字这就照着来
  • KDIR:= /lib/modules/2.6.18-194.el5/build  这里是内核的目录。你可以输入 uname -r 查看一下你的内核是什么,要对应起来的,要不然你无法在你的Linux上加载和卸载你要编译的模块。
  • make -C $(KDIR) M=$(PWD) modules   这句是在当前目录编译,不用管它。
  • insmod hello.ko   这句是可选的,意思是你输入 make install 的时候,会加载你的hello.ko内核模块,当然,你也可以在make后,手动做这件事。
  •  rmmod hello  这句参考上条解释。
3、实际运行。
在工程目录下输入

#make
#make install
(或者#insmod hello.ko)


# lsmod | grep hello
上面命令可以查看有没有加载内核hello模块


#make uninstall
(或者#rmmod hello)


4、注意问题:
    注意源代码里的这句话:

printk(KERN_EMERG "hello exit!\n")

你可以输入命令查看你的linux系统下printk的打印等级

[root@localhost 4-1-4]# cat /proc/sys/kernel/printk
6 4 1 7


我的电脑是RHEL5,显示的是 6 4 1 7。 简单来说就是printk的每条信息都是带有优先级的,数字越大,优先级越低。现在是数字小于6的都可以在x-term下打印。例如:

printk("<5>hello world ! \n");
printk("<0>hello world ! \n");


  • 这两个信息都可以在我的终端打印出来,也就是5 和 0 都小于6 。注意<5>一定要在双引号“ ”里面
  • 还有就是,在我的emacs下面运行终端,printk无法信息,优先级为<0>也不管用,不知道为什么,但是切换到linux自带的终端就行了。有知道的朋友麻烦告诉我一下。
  • 解决的办法是你可以查看log信息

cat /var/log/messages | grep 关键词(比如你加载的内核模块的名字)


应该就可以看到printk的信息了。
阅读(2289) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 09:54:51

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com