然后,就可以加載該模塊:
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
同樣可以通過(guò)lsmod來(lái)查看該模塊是否被卸載.
這里有兩個(gè)問(wèn)題,其一就是printk()輸出的問(wèn)題.LDD3上也說(shuō),在加載和卸載模塊的時(shí)候都會(huì)有信息輸出在屏幕上,如果在Windows下通過(guò)終端仿真器(我們常用的虛擬機(jī)算是一種),則在屏幕上看不到任何輸出.我同時(shí)在虛擬機(jī)和和物理機(jī)都運(yùn)行了該模塊,均未看到有"Hello, world"(加載模塊時(shí)printk的輸出)或"Goodby, cruel world"(卸載模塊時(shí)printk的輸出). 這個(gè)不知道是我操作系統(tǒng)發(fā)行版的原因還是系統(tǒng)配置的問(wèn)題,請(qǐng)了解這個(gè)問(wèn)題的朋友指點(diǎn)一下.
其二,書(shū)上講到如果屏幕上看不到信息,可能輸出在某個(gè)日志文件里面了,并說(shuō)可能在/var/log/messages文件中.并且看到網(wǎng)上很多網(wǎng)友也說(shuō)是輸出到這個(gè)文件里面.我不知道有沒(méi)有發(fā)現(xiàn)輸出在其他日志文件里的,不過(guò)我的這個(gè)信息輸出在/var/log/syslog里面.在加載和卸載完該模塊后, 執(zhí)行命令:
debian:/home/david # cat /var/log/syslog | grep world
可以看到有兩行內(nèi)容.當(dāng)然,也可以不用grep world, 應(yīng)該會(huì)出現(xiàn)在最后兩行.
Jul 20 14:15:29 localhost kernel: Hello, world
Jul 20 14:15:34 localhost kernel: Goodbye, cruel world
這就是printk應(yīng)該輸出的信息.
這里有另外一個(gè)方法,可以實(shí)現(xiàn)printk的信息輸出在屏幕上,即更改printk輸出的優(yōu)先級(jí).例子中的優(yōu)先級(jí)為:KERN_ALERT,優(yōu)先級(jí)為<1>,如果將優(yōu)先級(jí)改為KERN_EMERG即<0>,則可以看到屏幕的輸出信息.
修改的方法只是修改一下hello.c中兩句printk()的內(nèi)容,修改后的hello.c如下:
|
|
以上就是整個(gè)2.6內(nèi)核編譯步驟以及模塊動(dòng)態(tài)加載的方法.理解和解釋有誤的地方,也請(qǐng)各位瀏覽本文的朋友指點(diǎn),也希望能和對(duì)內(nèi)核和驅(qū)動(dòng)感興趣的朋友交流。


