歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux設備驅動(1)模塊的相關概念

Linux設備驅動(1)模塊的相關概念

日期:2017/3/3 13:04:01   编辑:Linux技術

最簡單的內核模塊

[code]#include<linux/init.h>
#include<linux/module.h>
static int __init hello_init(void) //內核初始化函數 
{  
        printk("hello world!\n"); //打印函數,和prinft類似 
        return 0;  
}  

static void __exit hello_exit(void)//內核清除函數 
{  
        printk("good bye!\n");  
}  

module_init(hello_init); //指定初始化函數 
module_exit(hello_exit); //指定清除函數 

MODULE_LICENSE("GPL"); //指定代碼使用的許可證 
MODULE_AUTHOR("laowu"); //指定作者 
MODULE_VERSION("1.0"); //指定代碼修訂號

內核模塊的makefile

[code]obj-m := hello.o             
KDIR:=~/linux-2.6
make -C $(KDIR) M=`pwd` modules

obj-m := hello.o說明有一個內核模塊需要從hello.o構造,生成的模塊名稱是hello.ko.

如果hello.ko是由兩個源文件生成,例如file1.c file2.c,則應該如下編寫

obj-m := hello.ko

hello-objs := file1.o file2.0

make -C $(KDIR) M=

pwd
modules 首先改變目錄到-C指定的位置(即內核源代碼目錄),其中保存有內核的頂層makefile文件, M=選項,讓該makefile在構造modules目標之前返回到模塊源代碼目錄

內核的插入

insmod hello.ko

內核參數

module_param函數使用方法:

module_param(name, type, perm)

name:內核參數的名稱,自己定義;

type:內核參數的類型,常見的類型byte、short、int、long、ulong、bool 、charp(字符指針);

perm:內核參數的權限S_IRUGO(對模塊參數具有讀權限)。其實權限和文件的 權限差不多

內核加載模塊時傳遞參數的方法:

使用命令:insmod xxx.ko a=1

模塊加載後,並且他的權限不為0,就可在/sys/module/xxx/parameter目錄下 找到對應的模塊參數。

導出符號表

使用EXPORT_SYMBOL將函數導出,供其他模塊使用;在”/proc/kallsyms”文件中對應這符號表,它記錄了函數的符號和函數在內存所在的地址。

Copyright © Linux教程網 All Rights Reserved