<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              Module簡介 module的編寫方法

              來源:CSDN 時間:2022-12-20 14:53:05

              模塊(module)是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作為內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序。使用模塊的優點:?1,將來修改內核時,不必全部重新編譯整個內核,可節省不少時間?;2,系統中如果需要使用新模塊,不必重新編譯內核,只要插入相應的模塊即可。這兩點對于內核開發尤為有用,那么下面我們就簡單學習以下module的編寫方法。以一個完整的“Hello word”模塊為例。

              首先實現的是具體的代碼部分:

              這個模塊中定義了兩個函數,其中hello_init在模塊裝載到內核時調用,而hello_exit在模塊被移除時調用。module_init與module_exit使用了內核特殊宏來表示上述兩個函數說扮演的角色。而MODULE_LICENSE用來告訴內核該模塊所采用的自由許可證。


              (資料圖片僅供參考)

              有了代碼后我們還需要將其編譯成模塊,這個時候就需要用到Makefile,Makefile的具體內容如下:

              Makefile中內容的含下次學習,將兩個文件放到同一個目錄下,執行make命令,執行完后就會生成一個ko文件,這個ko文件就是我們需的module。

              有了這個ko,我們就可以將其加載到Linux內核中了,不過需要注意的是,加載與卸載內核模塊都需要使用root權限。

              加載內核使用的是insmod命令:

              一般情況下,沒異常打印就表示加載成功了,但為了確認我們可以使用lsmod命令查看內核中已加載的module:

              通過這個命令我們果斷看到了我們所希望的helloModule這個模塊。此時我們就可以通過modinfo這個命令查看到這個module的信息了:

              那如果此時我們不再需要這個模塊了我們則可以通過rmmod這個命令將其從內核中卸載:

              但我們發現無論加載還是卸載模塊,我們都沒有看到printk中的打印,這主要是printk會根據日志打印級別來決定時候把消息打印到當前控制臺上,決定的因素是日志級別時候小于console_loglevel值,那我們是不是就無法看到這個打印了嗎,當然不是,我們可以通過dmesg查看到:

              這里由于我實上次,所以我們看到了上次打印。

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩