寫乙個驅動的框架的步驟:
file_operations,用上面的裝置操作函式來填充它
2.通過
register_chrdev將這個file_operations結構體告訴核心。
3.在驅動的入口函式中呼叫register_chrdev,比如first_drv_init
4.用module_init()來修飾入口函式。最終就會將file_operation結構體告訴核心。
舉個例子:
/dev/***是/dev下面的乙個裝置節點:
crw--w---- 1 root root 4, 0 2013-03-23 19:13 /dev/tty0
左邊的就是該節點的屬性:
c 表示裝置型別為字元裝置
4:主裝置號
下面就是字元裝置驅動的簡單示例:
#include #include #include #include #include #include #include #include static int first_drv_open(struct inode *inode, struct file *file) //裝置節點的相關操作函式
static int first_drv_read(struct file *filp, char __user *buff,
size_t count, loff_t *offp)
static struct file_operations first_drv_fops = ;
static int __init first_drv_init(void)//入口函式
static void __exit first_drv_exit(void)
module_init(first_drv_init);//入口修飾函式
module_exit(first_drv_exit);
module_license("gpl"); //證書
makefile:
obj-m := first_drv.o
kernel_dir ?= /home/shanl/embeded/kernel/linux
all:
make -c $(kernel_dir) m=`pwd` modules //編譯成模組
cp first_drv.ko /home/shanl/embeded/rootfs/box/ko
clean:
make -c $(kernel_dir) m=`pwd` modules clean
rm -rf modules.order
載入模組
cat /proc/devices 從下面可以看到裝置驅動已經載入到核心中
89 i2c
90 mtd
108 ppp
116 alsa
123 first_drv
128 ptm
136 pts
166 ttyacm
180 usb
188 ttyusb
189 usb_device
字元裝置驅動框架
字元裝置驅動框架 一 linux軟體系統的層次關係 乙個應用程式操作底層驅動程式的過程 1 應用程式使用庫提供的 open函式開啟某乙個裝置檔案。2.庫根據 open函式傳入的引數執行 swi 軟體中斷 指令,這會引起 cpu異常,進入核心。3 核心的異常處理函式根據這些引數找到相應的驅動程式,返回...
字元裝置驅動框架
標頭檔案 linux cdev.h linux fs.h 描述字元裝置共性資訊的結構體 struct cdev 操作方法集 struct file operations 裝置號,本質是32位無符號整型數 dev t dev 該裝置號由兩部分組成,1.主裝置號 2.次裝置號 major dev t d...
字元裝置驅動框架
include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭檔案 include 裝置號 d...