• <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內核模塊開發(筆記)(2)

    發表于:2013-10-14來源:IT博客大學習作者:扶凱點擊數: 標簽:linux
    放個編譯上面模塊的 Makefile obj-m := hello.o all: make -C /lib/modules/$(shell uname -r )/build M=$(shell pwd) modules clean: make -C /lib/modules/$(shell uname -r )/build M=$(shell pwd) clea

      放個編譯上面模塊的 Makefile

    obj-m := hello.o
    all:
            make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
    clean:
            make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

      給 Makefile 放到上面 hello.c 的相同的目錄中(如果上面寫的模塊代碼叫 hello.c 的話)。然后使用 make 就能編譯了。

      insmod lsmod rmmod

      調用 insmod 時會給需要的模塊加載進內核,會給 ko 的文件以目標代碼加載。裝載時會調用 module_init 指定的函數。退出也調用相應的 module_exit.

      lsmod 可以顯示你寫的模塊,其實是讀 /proc/modules 。接下來我寫寫怎么樣自己通過內核來建 proc 文件。

      模塊加載參數

      如果在模塊加載時,想指定參數,也提供了相應的頭文件

    #include <linux/moduleparam.h>
    static int test;
    module_param(test, int, 0644);

      這樣以后,直接在內核模塊內使用 test 的變量就行了。

      模塊的信息

      在程序中可以為模塊加一些描述,發行版權聲明,和作者。

    MODULE_LICENSE("GPL");
    MODULE_DESCRIPTION("Test");
    MODULE_AUTHOR("xxx");

      模塊的符號導出

      在 Perl 中,模塊是可以導出變量和方法到其它的模塊中的。在 Linux 內核中也有這樣的方法。

    EXPORT_SYMBOL(name);
    EXPORT_SYMBOL_GPL(name);

      這二個可以導出指定的全局變量,也可以是方法。這個要加載 的頭文件,不要忘記了。

      其它的模塊要使用這個,直接使用 extern void name(void); 就可以使用了。這些導出的函數只能內核和內核模塊使用。不能用戶調用,可以由 /proc/kallsyms 來查看導出的變量和方法

      實例

      寫個內核模塊,通過 proc 可以見到一些信息,通過 proc 的讀和寫的功能。來實現設置和讀取信息。

      proc 介紹

      proc 是一個非常方便的用來動態的向 Linux 內核加入和禁用代碼的一個方法。

      proc/sys 中是用來配置內核的參數,可以通過 sysctl -w key=value

      象普通文件可以支持 open,read,write,close

    原文轉自: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>