日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

嵌入式linux字符设备驱动

發布時間:2023/12/10 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux字符设备驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 我們需要先調用register_chrdev_region()或 alloc_chrdev_region()來向系統申請設備號

??? int register_chrdev_region( dev_t first, unsigned int count, char *name );? //函數通過已知的設備號first來注冊字符設備區域。

??? int alloc_chrdev_region( dev_t *dev, unsigned int firstminor,? unsigned int count, char *name );? //若需要動態分配設備號,則使用該函數,此處dev作為指針,為僅用于輸出的參數,分配成功后保存已分配范圍的第一個編號。firstminor通常為0,表示第一個次設備號。

?2.釋放設備號

??? void unregister_chrdev_region( dev_t first, unsigned int count );
3.注冊完字符設備區域之后

??? 需要使用cdev_init函數初始化cdev結構和 file_operations結構

??? cdev->owner = THIS_MODULE;

??? void cdev_init( struct cdev *cdev, struct file_operations *fops);??//為cdev結構指針創建內存,并將cdev->ops=fops;(抵岸科技注:源代碼中并未見創建內存。cdev_init依次做了:cdev填充0,初始化表頭,kobject成員初始化,將cdev->ops=fops)

??? 接著講cdev加入到內核中??? int cdev_add( struct cdev *dev, dev_t num, unsigned int count);

??? 完成字符設備的注冊過程

??? 以上函數需要#include? <linux/cdev.h>

4. 自動創建字符設備節點

??? 下面的函數需要? #include <linux/device.h>.

??? struct class *myclass;? //聲明一個class結構用于創建字符設備節點

??? myclass = class_create(THIS_MODULE,"myclass");? //"myclass"為類名

??? device_create(myclass,NULL,devno,NULL,"leds%d",0);? //通過myclass結構創建字符設備,第二個參數是設備的parent,第三個參

??? 數是設備號,第四個參數是傳入內核的驅動數據void *類型指針,如果沒有可以設置成NULL,最后一個參數是const char* fmt, ...,就是

??? 格式化參數,即leds0

??? 完成上述過程后會在/dev中找到leds0設備

??? 貌似以前的老版本會用到devfs_mk_cdev來創建設備節點,但是最后發現linux-2.6.33并沒有這個函數,應該是被上述函數取代

??? 了吧

5. 當然,還包括驅動Makefile的編寫以及應用程序

??? 幾處比較有用的參考文章:

??? http://hi.baidu.com/hust_junejun/blog/item/d2dcfcedc09833d92e2e213f.html??? //比較全面

??? http://www.dzsc.com/data/html/2009-8-28/78412.html??????????????????????????????????????? //自動生成字符設備節點

????http://fanyihui1986.blog.163.com/blog/static/7844859200911325826783/??????? //小型總結??

6.TIPS

??? printk(KERN_WARNING"?this is the test?");

??? KERN_ALERT

??? KERN_WANING

??? KERN_INFO

??? KERN_ERR

??? 等等不同優先級 宏,具體可以查閱linux設備驅動程序三,字符設備驅動一章。

至于mknod console c 5 1 的意思也很相似:
console是設備的名字
c指字符設備
5是該設備在major.h中定義的標記
1是第一個子設備

mknod console c 5 1
console為設備文件名,自己隨便取
c是指字符型設備 (可選b,塊設備)
5是主設備號 /dev/devices里面記錄現有的設備
找個沒有用的就可以了
1是次設備號,當你要給兩個同樣的設備上一個驅動的時候就要分了,從0開始,1就是第二個了 ,對于字符設備,次設備號就表示同類型設備的不同設備。


總結

以上是生活随笔為你收集整理的嵌入式linux字符设备驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。