標籤:檔案 linux io file ui ubuntu
環境:ubuntu 8.04
核心版本:2.6.32.59-debug
1、編寫檔案hello.c
#include <linux/init.h>
#include <linux/kernel.h> //printk
/*寫核心驅動的時候 必須載入這個標頭檔,作用是動態將模組載入到核心中去,常用的宏定義如 MODULE_LICESENCE(),MODULE_AUTHOR(),等在此檔案中*/
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL"); //為必須選擇的語句,它是模組的許可許可權,如果不聲明,會出現警告資訊。
static int hello_init(void)
{
printk("Hello, world -- this is the kernel speaking\n"); //printk:與printfde 區別是運行於核心態,且有訊息層級機制
return 0;
}
static void hello_exit(void)
{
printk("Short is the life of a kernel module\n");
}
module_init(hello_init); //進入點不再是main( )函數,而應該是module_init( 函數名 )函數
module_exit(hello_exit); //模組的卸載點指定為hello_exit函數指標
2、編寫Makefile
obj-m:=hello.o
KERNELBUILD := /lib/modules/2.6.32.59-debug //本Makefile 依賴的linux核心源碼路徑 ,如是交叉編譯時間就取開發板上啟動並執行源碼路徑
all:
make -C $(KERNELBUILD) M=$(shell pwd) modules //到linux源碼所在的目錄執行主Makefile 併當前路徑傳給主Makefile,告訴主Makefile執行完後返回到目前的目錄,執行Makefile
echo insmod ./hello.ko to turn it on
clean:
rm -rf *.o *.ko *.mod.c *order *.symvers .tmp_versions
3、在hello.c目錄下make,於是目前的目錄出現了 hello.ko
4、insmod hello.ko
5、dmesg -C查看核心資訊(由第四步產生的)
6、lsmod | grep "hello" 命令可以看到hello核心模組,如果第四步正確的話
7、rmmod hello //刪除核心模組hello.ko
8、dmesg -C查看核心資訊(由第七步產生)。