2008年3月28日星期五

linux device drivers study

最近几天都在看这本书《linux 设备驱动程序》,虽然我很早就“浏览”过这本书,但是那是真正的浏览,以至于看了跟没看是一个样,我看很多书都是这样,以至于我都可以认为图书馆7楼(电子,计算机类)的书我都有“浏览”过……

但是这一次不一样,我居然看懂了这本书都在讲什么,这个学习过程就是这么的折磨人。我想这些知识从整体来讲仿佛是一个平面,所以知识没有积累到一定的量,还就是看不懂,我大学期间目前为止所学到的每一个知识都是这么艰难的过程,尤其是大一的时候学习php。没人教,太困难了。

《linux 设备驱动程序》这本书我现在看到190页,到目前为止作者是以一个scull的驱动程序为主线,教我们怎么编写驱动,不过看到现在我今天才做第一个实验:编写hello,world的驱动程序(其实就是抄书啦):

[code:c]
#include "linux/init.h"
#include "linux/module.h"

MODULE_LICENSE("GPL");

static int __init eth_init(void)
{
printk(KERN_ALERT"hello, world\n");
return 0;
}
static void __exit eth_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(eth_init);
module_exit(eth_exit);
[/code]

另存为hello.c ,然后是要编写Makefile,看书上讲的,弄半天结果还是没出来,Google几下,然后知道几个要点是,内核源码树要先make menuconfig 然后 make 编译一会儿,其实我老早就有编译过,只不过是clean掉了,没想到编译驱动也需要这个。具体的Makefile如下:

[code]
PWD = $(shell pwd)
#please change next variable
# to the path of kernel source of yourself
KERNEL_SRC =/home/jia/kernel/linux-source-2.6.22/
obj-m := hello.o
module-objs := hello.o

all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules

clean:
rm *.ko
rm *.o
[/code]

编译成功之后会生成hello.ko文件,用超级用户权限加载到内核:sudo insmod ./hello.ko ,卸载用命令 sudo rumod hello ,如果要查看printk 的输出,可以使用 dmesg 命令,可以看到刚才的输出。

:P 我对这个东西非常的感兴趣,我会继续深入学习的,hoho

2 条评论:

Ingrid 说...

精神上表示支持...
看天文的说...
祝成功!!~~

ipluss 说...

本博地盘是好久没见到人影了

谢谢支持。

发表评论