Linux下驅動框架與雜項字符設備框架介紹

      網友投稿 728 2025-03-31

      1. linux下驅動框架介紹

      1.1 驅動框架分類

      linux下驅動框架分為3大類型:

      字符設備 ---------

      塊設備 存儲設備 SD 硬盤

      網絡設備 網卡 無線 有線

      字符設備和塊設備都會生成設備節點在/dev目錄下。

      網絡設備不會生成設備節點. 可以使用ifconfig查看

      字符設備標準框架詳細區分:

      RTC設備驅動

      LCD屏設備驅動—幀緩沖設備框架

      聲卡設備驅動—音頻設備

      標準輸入設備驅動—輸入子系統框架

      …等等

      內核提供的字符設備注冊的方式: 原生的—最底層注冊方式

      早期設備注冊方式—linux 2.6

      標準設備注冊方式

      雜項設備注冊方式

      比如: 溫度傳感器、濕度傳感器、光照度、門鎖、LED燈、蜂鳴器 驅動都是使用字符設備框架編寫

      1.2 驅動框架代碼模板

      示例代碼:

      #include #include static int __init tiny4412_hello_drv_init(void) { printk("Hello 驅動注冊-安裝成功.\n"); return 0; } static void __exit tiny4412_hello_drv_exit(void) { printk("Hello 驅動注銷成功.\n"); } /*驅動入口*/ module_init(tiny4412_hello_drv_init); /*驅動出口*/ module_exit(tiny4412_hello_drv_exit); /*許可證*/ MODULE_LICENSE("GPL");

      1.3 Makefile示例代碼

      KER_DRI=/home/wbyq/work/linux-3.5/linux-3.5 all: make -C $(KER_DRI) M=`pwd` modules clean: make -C $(KER_DRI) M=`pwd` modules clean obj-m += drv_hello.o

      編譯完成之后,生成的驅動文件名稱還是xxxx.ko文件。以ko為后綴。

      1.4 安裝驅動過程

      [root@wbyq ]#insmod drv_hello.ko [ 435.765000] Hello 驅動注冊-安裝成功. [root@wbyq ]#rmmod drv_hello.ko rmmod: can't change directory to '/lib/modules': No such file or directory [root@wbyq ]#mkdir /lib/modules [root@wbyq ]#rmmod drv_hello.ko rmmod: can't change directory to '3.5.0-FriendlyARM': No such file or directory [root@wbyq ]# [root@wbyq ]# [root@wbyq ]#mkdir /lib/modules/3.5.0-FriendlyARM [root@wbyq ]#rmmod drv_hello.ko [ 1024.225000] Hello 驅動注銷成功. [root@wbyq ]#insmod drv_hello.ko [ 1080.500000] Hello 驅動注冊-安裝成功. [root@wbyq ]#lsmod drv_hello 614 0 - Live 0xbf004000 (O) [root@wbyq ]#modinfo drv_hello.ko modinfo: can't open '/lib/modules/3.5.0-FriendlyARM/modules.dep': No such file or directory [root@wbyq ]#touch /lib/modules/3.5.0-FriendlyARM/modules.dep [root@wbyq ]#modinfo drv_hello.ko filename: drv_hello.ko license: GPL depends: vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8 [root@wbyq ]#

      驅動的安裝方式:

      動態安裝. lsmod 查看動態方式安裝的驅動.

      靜態安裝. 靜態是固化到內核里的。

      2. 雜項設備框架

      2.1 框架結構介紹

      雜項字符設備的主設備號固定: 10 主設備號: 0 ~ 255

      次設備號范圍: 0 ~ 255

      Linux內核尋找驅動節點是依靠設備號尋找的。

      設備號: 主設備號(區分類型)、次設備號(區分同類型的具體設備)

      主設備號: 10 ,240

      下面是查看串口設備節點、MMC設備節點的詳細信息:

      下面是雜項設備的模型圖:

      Linux下把無法分類的一些設備都歸類為雜項設備,雜項設備本身就是字符設備,只是簡單封裝了一層,注冊調用更加簡單。雜項設備(misc device)是在嵌入式系統中用得比較多的一種設備驅動。

      在Linux內核的include\linux目錄下有Miscdevice.h文件,misc設備定義及其內核提供的相關函數在這里。

      內核用struct miscdevice的結構體來描述雜項設備:

      struct miscdevice { int minor; //次設備號,雜項設備的主設備?10 const char *name; //設備的名稱 const struct file_operations *fops; //文件操作 /* 下面的成員是供內核使用 ,驅動編寫不需要理會 */ struct list_head list; //misc_list的鏈表頭 struct device *parent; //父設備 struct device *this_device; //當前設備,是device_create的返回值 };

      雜項設備結構里有一個文件集合指針,當字符設備驅動安裝成功之后,在應用層是open函數打開這個設備文件,會訪問到驅動層里文件集合對應的函數。

      文件操作集合的模型圖:

      2.2 蜂鳴器驅動示例代碼

      這是蜂鳴器的驅動層示例代碼,使用雜項設備框架編寫:

      Linux下驅動框架與雜項字符設備框架介紹

      應用層的代碼:

      #include int main(int argc,char**argv) { int fd; fd=open("/dev/tiny4412_hello",2); //3 0 - 1 - 2 if(fd<0) { printf("驅動打開失敗!\n"); return -1; } int data1; int data2; while(1) { read(fd,&data1,4); sleep(1); write(fd,&data2,4); sleep(1); } close(fd); return 0; }

      2.3 運行效果

      Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格內容怎么導出為word(excel表格怎么導出來)
      下一篇:SAP Fiori Elements List Report Smart Table 列項目寬度計算的奧妙
      相關文章
      国产黄色一级毛片亚洲黄片大全| 亚洲日韩精品无码AV海量| 亚洲AⅤ男人的天堂在线观看| 国产精品亚洲一区二区麻豆| 亚洲国产高清美女在线观看 | 亚洲A∨无码无在线观看| 亚洲无人区一区二区三区| 亚洲日韩国产精品乱| 亚洲国产一区二区视频网站| 亚洲成av人在片观看| 亚洲av手机在线观看| 亚洲精品第一国产综合境外资源 | 亚洲AV无码专区在线观看成人 | 亚洲中文字幕乱码熟女在线| 在线观看亚洲AV日韩A∨| 亚洲色偷偷色噜噜狠狠99| 色天使亚洲综合在线观看| 亚洲日本乱码卡2卡3卡新区| 麻豆狠色伊人亚洲综合网站| 亚洲最大福利视频| 亚洲人成色在线观看| 亚洲av纯肉无码精品动漫| 国产午夜亚洲精品不卡免下载| www.亚洲精品| 久久久久噜噜噜亚洲熟女综合| 狠狠亚洲婷婷综合色香五月排名 | 激情亚洲一区国产精品| 中文字幕无码亚洲欧洲日韩| 久久人午夜亚洲精品无码区| 亚洲А∨精品天堂在线| 亚洲一区二区三区在线观看精品中文 | 亚洲欧洲国产成人精品| 亚洲人成7777| 亚洲精品一卡2卡3卡四卡乱码| 久久精品亚洲日本波多野结衣| 亚洲精品tv久久久久| 亚洲午夜福利717| 中文字幕亚洲综合精品一区| 亚洲国产激情在线一区| 久久亚洲中文字幕无码| 亚洲最大激情中文字幕|