Linux核心模組編譯、載入&卸載及查看運行結果

來源:互聯網
上載者:User

花了一晚上的時間才搞出這麼點名堂,有點丟人。不過丟人就丟人吧,總歸得把這僅有的成果記錄下來。

[環境]Vmware5.5 + Fedora8(Kernel:2.6.23.1-42.fc8-i586)
===================================================
[原始碼hellomod.c]
這裡我僅使用了最簡單的代碼HelloWorld
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
MODULE_LICENSE("GPL")

static int __init my_init(void)
{
    printk("<1>hello world!\n");
    return 0;
}

static void __exit my_cleanup(void)
{
    printk("<1>GoodBye!\n");
}

module_init(my_init);
module_exit(my_cleanup);

==============================================
[Makefile檔案內容]
obj-m += hellomod.o

all:
    make -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
    make -C /lib/modules/`uname -r`/build M=`pwd` clean

****說明:
-C選項指定核心標頭檔的路徑,所以如果這裡不正確的話,就得仔細檢查你的目錄是不是正確。build只是一個符號連結,一般它指定的正是你的源碼所在的目錄,如果有的話。如果它不能正確連結,那麼可能是你的源碼並未安裝或者安裝的版本與當前正在工作的核心不對應。這時你就需要安裝正確的與當前核心匹配的源碼(這步很重要,我就在這兒吃了虧,浪費很多時間)。

==============================================
[編譯]
好了,這時已經有兩個檔案了,hellomod.c和Makefile,隨便找個目錄放下,shell到這目錄,輸入make:
MODPOST 1 modules
看到這個的話說明編譯通過了,產生正確的核心模組檔案hellomod.ko
===============================================
[載入]
執行insmod hellomod.ko
[卸載]
rmmod hellomod
[查看核心輸出]
tail /var/log/messages
這時就可以看到核心模組在載入和卸載時輸出的資訊了。
================================================

P.S 本來是個挺簡單的事情,結果由於我的FC8核心與源碼不一致,導致編譯通過的模組一直載入不了,報格式錯誤,折騰了好久才發現。
為什麼很久呢,因為我uname -r出來,都說我是i686;另外我到/lib/modules/下,發現也是i686,但是我到裡面隨便找了個.ko檔案,執行modinfo發現都依賴i586,這才讓我找到真正原因。於是找出光碟片,重裝i586源碼,再編譯,一切正常。^_^

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.