日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

內核模塊編程 Hello Kernel

在看“<> 第18章 設備驅動程序時,發(fā)現第621頁的內核模塊實驗無法通過 。
怎么回事?
后來才發(fā)現,這本Linux程序設計入門經典所用的內核是2.4版本 。
而2.6版本內核模塊編程部分發(fā)生了比較大的變化 。
具體變化可以查看/usr/src/linux/Documentation/kbuild下的幾篇文章 。
里面詳細說明了2.6內核kbuild和makefile的格式 。
下面就介紹這個內核模塊實驗hello kernel如何正確運行,希望國內早點翻譯<> :)
我所使用的系統為Debian5,內核版本為2.6.26-2-686 。
首先安裝kernel headers,以提供相關文件編譯內核模塊
$ sudo apt-get install linux-headers-`uname -r`
hello.c內容如下
$ cat hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
;printk("Hello, kernel!/n");
;return 0;
}
static void hello_exit(void)
{
;printk("Good-bye, kernel!/n");
}
module_init(hello_init);
module_exit(hello_exit);
$
2.6內核核核用module_init()和module_exit()代替static __init int init_module(void)和static __exit void cleanup_module(void)函數 。
Makefile內容如下
$ cat Makefile
obj-m= hello.o
KDIR:=/lib/modules/$(shell uname -r)/build
【內核模塊編程 Hello Kernel】PWD=$(shell pwd)
all:
;make -C $(KDIR) M=$(PWD) modules > make.log 2>&1
clean:
;make -C $(KDIR) M=$(PWD) clean
$
其中obj-m為內核模塊,obj-k則為編譯到內核 。
寫好hello.c和Makefile,接著運行make命令,編譯自己寫的內核模塊
$ ls
hello.c; Makefile
$ make
make -C /lib/modules/2.6.26-2-686/build M=/home/c-aries/下載/module modules > make.log 2>&1
$ ls
hello.chello.mod.c; hello.omake.log;;;;Module.symvers
hello.ko; hello.mod.o; Makefile; modules.order
插入hello模塊
$ sudo insmod hello.ko
用dmesg命令查看內核緩沖區(qū),并用tail查看最后一條信息
$ dmesg | tail -1
[24477.822683] Hello, kernel!
列出模塊清單,查找hello模塊
$ lsmod | grep hello
hello1216; 0
移除hello模塊
$ sudo rmmod hello
用dmesg命令查看內核緩沖區(qū),并用tail查看最后一條信息
$ dmesg | tail -1
[24530.986833] Good-bye, kernel!
$
成功了!
Hello Kernel |o|
;

    推薦閱讀