• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux內核模塊開發(筆記)

    發表于:2013-10-14來源:IT博客大學習作者:扶凱點擊數: 標簽:linux
    個人筆記。。在不放過來都快找不到了。有空還得好好整理一下了。 調試方法 printk() 是用來調試內核最常用的一種技術,他打印的信息會輸出在 dmesg 中,所以調試前最好使用 dmesg -c 來清掉以前 dmesg 的信息。 使用的例子如下:

      個人筆記。。在不放過來都快找不到了。有空還得好好整理一下了。

      調試方法

      printk() 是用來調試內核最常用的一種技術,他打印的信息會輸出在 dmesg 中,所以調試前最好使用 dmesg -c 來清掉以前 dmesg 的信息。 使用的例子如下:

      printk(KERN_DEBUG "Here i am:%s:%d\n", FUNCTION, LINE);

      可以打印的級別可以看看 linux/kernel.h 中的定義。 strace 這個命令超級強大,可以顯示程序所有的系統調用,還可以顯示調用時使用的參數。 但這個時候不需要麻煩的配置就可以直接使用,但不能象 gdb 調試 c 程序一樣,所以內核為我們提供了一個 kdb ,可以支持動態修改變量,斷點設置,單步執行

      kernel oops messages

      這是內核開發時常會出現的一個錯誤信息。主要原因是由于 NULL 指針引用,和其它不正常的指針操作引起的。這時 oops 會顯示故障時的處理器信息, 模塊 CPU 寄存器內容,頁描述符表的位置之類的信息。

      內核模塊簡單介紹

      模塊是工作在內核空間的 模塊實際是目標文件(由函數和數據結構組成),不象普通程序有個鏈接的過程,不能獨立運行,只能在運行時鏈接到系統做為內核的一部分運行,從面擴展內核功能 內核模塊會占用內核空間的內存,所以會影響內存使用,它還會修改內核中的一些內容,所以容易造成系統掛掉。在內核中需要維護符號表。并且內核之間有依賴性。

      最簡單的內核模塊

      注:如果是 redhat 安裝的話,需要安裝 kernel-devel 才能寫內核模塊,如果是自己編譯內核,記的不要刪除源碼,不然沒法開發模塊。

    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/init.h>
     
    /* __init 的標記是內核模塊的入口,這個函數加載完后就會釋放內存空間  */
    static int __init hello_init(void)
    {
            printk(KERN_INFO "Hello world"); /* 打印的信息會出現在 dmesg 中 釋放*/
            return 0;  /*  返回 0 是正常 */
    }
     
    /* __exit 的標記是退出內核模塊,當這個模塊卸載時會執行 */
    static void __exit hello_exit(void)
    {
            printk(KERN_INFO "Goodbye world");
    }
     
    /* 下面這二個是宏,初始化和消除函數時使用和上面的裝載卸載模塊沒關系。 */
    module_init(hello_init);
    module_exit(hello_exit);

    原文轉自:http://blogread.cn/it/article/4630

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>