亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號

Linux 2.6內(nèi)核的編譯步驟及模塊動態(tài)加載
2007-07-28   網(wǎng)絡(luò)

可見,已經(jīng)生成模塊文件hello.ko.

  然后,就可以加載該模塊:

  debian:/home/david # insmod hello.ko

  查看模塊是否加載進(jìn)內(nèi)核:

  debian:/home/david # lsmod

  Module Size Used by

  hello 1344 0

  nfs 219468 0

  nfsd 202224 17

  …… ……

  其中Module名為hello的即為我們所加載的模塊.

  卸載模塊:

  debian:/home/david # rmmod hello

  同樣可以通過lsmod來查看該模塊是否被卸載.

  這里有兩個問題,其一就是printk()輸出的問題.LDD3上也說,在加載和卸載模塊的時候都會有信息輸出在屏幕上,如果在Windows下通過終端仿真器(我們常用的虛擬機(jī)算是一種),則在屏幕上看不到任何輸出.我同時在虛擬機(jī)和和物理機(jī)都運(yùn)行了該模塊,均未看到有"Hello, world"(加載模塊時printk的輸出)或"Goodby, cruel world"(卸載模塊時printk的輸出). 這個不知道是我操作系統(tǒng)發(fā)行版的原因還是系統(tǒng)配置的問題,請了解這個問題的朋友指點(diǎn)一下.

  其二,書上講到如果屏幕上看不到信息,可能輸出在某個日志文件里面了,并說可能在/var/log/messages文件中.并且看到網(wǎng)上很多網(wǎng)友也說是輸出到這個文件里面.我不知道有沒有發(fā)現(xiàn)輸出在其他日志文件里的,不過我的這個信息輸出在/var/log/syslog里面.在加載和卸載完該模塊后, 執(zhí)行命令:

  debian:/home/david # cat /var/log/syslog | grep world

  可以看到有兩行內(nèi)容.當(dāng)然,也可以不用grep world, 應(yīng)該會出現(xiàn)在最后兩行.

  Jul 20 14:15:29 localhost kernel: Hello, world

  Jul 20 14:15:34 localhost kernel: Goodbye, cruel world

  這就是printk應(yīng)該輸出的信息.

  這里有另外一個方法,可以實(shí)現(xiàn)printk的信息輸出在屏幕上,即更改printk輸出的優(yōu)先級.例子中的優(yōu)先級為:KERN_ALERT,優(yōu)先級為<1>,如果將優(yōu)先級改為KERN_EMERG即<0>,則可以看到屏幕的輸出信息.

  修改的方法只是修改一下hello.c中兩句printk()的內(nèi)容,修改后的hello.c如下:

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_EMERG "Hello, world\n");  /*改動部分*/
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_EMERG"Goodbye, cruel world\n"); /*改動部分*/
}

module_init(hello_init);
module_exit(hello_exit);
  同樣的方法編譯生成模塊,再次用insmod和rmmod,則在屏幕上看到的輸出信息為:

debian:/home/david# insmod hello.ko
debian:/home/david#
Message from syslogd@localhost at Fri Jul 20 14:27:32 2007 ...
localhost kernel: Hello, world

debian:/home/david# rmmod hello
debian:/home/david#
Message from syslogd@localhost at Fri Jul 20 14:27:42 2007 ...
localhost kernel: Goodbye, cruel world

debian:/home/david
  但是,是否能夠?qū)rintk()的優(yōu)先級改為KERN_EMERG值得商榷.因為在Linux Kernel Development中,對該優(yōu)先級的描述為: An emergency condition; the system is probably dead.

  以上就是整個2.6內(nèi)核編譯步驟以及模塊動態(tài)加載的方法.理解和解釋有誤的地方,也請各位瀏覽本文的朋友指點(diǎn),也希望能和對內(nèi)核和驅(qū)動感興趣的朋友交流。

熱詞搜索:

上一篇:Linux 2.6內(nèi)核的編譯步驟及模塊動態(tài)加載1
下一篇:Linux內(nèi)核升級&補(bǔ)丁安裝手冊1

分享到: 收藏