測試驅動開發平台
為了後續學習的順利進行,我們利用最簡單的hello,world程式,在核心上掛載和解除安裝我們自己編寫的hello模組。說明:本文除錯環境vmware workstation 5.0+turbolinux 10,教材是《linux device drivers》第3版英文電子圖書。
一、編寫hello.c檔案
利用vi編輯器,我們鍵入下面的**,並儲存為hello.c檔案。
/*** hello.c
* ------test for kernel module
*/#i nclude
#i nclude
module_license("mygpl"); //(1)
static int hello_init(void) //(2)
static void hello_exit(void)
module_init(hello_init); //(4)
module_exit(hello_exit); //(5)
對上面這段**中有5個地方需要加以說明:
(1):本句**可以不要,但不要的話,執行時會出現"hello: module license 'unspecified' taints kernel.",詞典上對taints的解釋是"感染,汙點".
(2):我們可以看出,對模組內的函式一般需要加上static關鍵字進行修飾,這樣可防止模組外訪問該函式,這是應該養成的乙個好習慣。
(3):printk函式相當於c標準庫函式printf, kern_alert是指的輸出訊息的優先級別,且kern_alert優先級別最高。
(4)(5):模組初始化和模組退出時有專門的函式,我們只需要為這兩個函式指定初始化和退出時的具體呼叫的函式名即可。
二、編譯
編譯一般採用makefile,利用make命令自動編譯。編寫下面的makefile:
# makefile for hello module
# if kernelrelease is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq($(kernelrelease),)
obj-m := hello.o
# otherwise we were called directly from the command
# line; invoke the kernel build system.
else
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
default:
$(make) -c $(kerneldir) subdirs=$(pwd) modules
endif
第乙個linux 驅動
以前看過很多次linux相關的資料,一直沒親自動手寫,今天通過半天努力,終於完成了乙個自己的linux小驅動 hello.c include include module license dual bsd gpl static int hello init void static void hell...
第乙個驅動程式
原始出處 驅動程式的開發,向來是令人感到有所畏懼的,可能很多人像我一樣,看了很久卻還是一頭霧水,不得其門而入。我們今天就通過乙個簡單的程式來使讀者學會初步的驅動程式開發。在開發windows驅動程式之前,我們需要首先安裝ddk,win98及其以前的vxd我們就不要再考慮了 windows 2000 ...
第乙個驅動程式
從今天開始就要進入核心驅動程式部分了,在這一節裡就通過第乙個驅動程式來介紹一下核心驅動模組的編寫框架。static intfirst drv open struct inode inode,struct file file static ssize t first drv write struct ...