最近几天都在看这本书《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 条评论:
精神上表示支持...
看天文的说...
祝成功!!~~
本博地盘是好久没见到人影了
谢谢支持。
发表评论