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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97