在线亚洲黄色-在线亚洲观看-在线亚洲电影-在线亚洲成人-岛国大片在线观看免费版-岛国大片在线播放高清

Linux驅動自動創建設備節點

導讀開始學習驅動的時候,是將驅動程序編譯成模塊然后用mknod命令手動建立設備節點以提供給應用程序調用。這對于剛開始調試驅動程序的時候常用的一種方法。但是,當有種需要必須在系統啟動的時候就將驅動程序就緒,來供應用層程序調用。這時就不能再手動的建立設備節點了,而必須自動的創建設備節點(不需要人為的操作)。★注冊類;注冊類的目的是為了使mdev可以在/dev/目錄下建立設備節點。首先要定義一個類,利用struct ;class結構體。這個結構體定義在頭文件include。nux/device.h中。struct ;class ;{。const ;char* ;name。struct ;module* ;owner。

系統大全為您提供開始學習驅動的時候,是將驅動程序編譯成模塊然后用mknod命令手動建立設備節點以提供給應用程序調用。這對于剛開始調試驅動程序的時候常用的一種方法。但是,當有種需要必須在系統啟動的時候就將驅動程序就緒,來供應用層程序調用。這時就不能再手動的建立設備節點了,而必須自動的創建設備節點(不需要人為的操作)。★注冊類注冊類的目的是為了使mdev可以在/dev/目錄下建立設備節點。首先要定義一個類,利用struct?class結構體。這個結構體定義在頭文件includenux/device.h中struct?class?{const?char*?name;struct?module*?owner;struct?subsystemsubsys;struct?list_headchildren;struct?list_headdevices;struct?list_headinterfaces;struct?semaphoresem;/*?locks?both?the?children?and?interfaces?lists?*/struct?kobject*virtual_dir;struct?class_attribute*?class_attrs;struct?class_device_attribute*?class_dev_attrs;struct?device_attribute*?dev_attrs;int(*uevent)(struct?class_device?*dev,?char?**envp,???int?num_envp,?char?*buffer,?int?buffer_size);int(*dev_uevent)(struct?device?*dev,?char?**envp,?int?num_envp,char?*buffer,?int?buffer_size);void(*release)(struct?class_device?*dev);void(*class_release)(struct?class?*class);void(*dev_release)(struct?device?*dev);int(*suspend)(struct?device?*,?pm_message_t?state);int(*resume)(struct?device?*);}?然后使用?完成對類的注冊。其中第一個參數一般為:THIS_MODULE。第二個參數為:設備節點的名稱舉個例子:★創建設備節點創建設備節點的函數:struct?device?*device_create(struct?class?*class,?struct?device?*parent,dev_t?devt,?const?char?*fmt,?...){va_list?args;struct?device?*dev?=?NULL;int?retval?=?-ENODEV;if?(class?==?NULL?||?IS_ERR(class))goto?error;dev?=?kzalloc(sizeof(*dev),?GFP_KERNEL);if?(!dev)?{retval?=?-ENOMEM;goto?error;}dev->devt?=?devt;dev->class?=?class;dev->parent?=?parent;dev->release?=?device_create_release;va_start(args,?fmt);vsnprintf(dev->bus_id,?BUS_ID_SIZE,?fmt,?args);va_end(args);retval?=?device_register(dev);if?(retval)goto?error;return?dev;error:kfree(dev);return?ERR_PTR(retval);}該函數的四個參數從左到右以此為:創建設備節點所屬的類、該設備的父節點(若果沒有就指定為NULL)、設備號、設備名稱、次設備號。★銷毀類和設備節點注意不要忘記了還要銷毀類和銷毀設備節點。銷毀類:參數為用struct?class結構體定義的變量void?class_destroy(struct?class?*cls){if?((cls?==?NULL)?||?(IS_ERR(cls)))return;class_unregister(cls);}銷毀設備節點:void?device_destroy(struct?class?*class,?dev_t?devt){struct?device?*dev?=?NULL;struct?device?*dev_tmp;down(&class->sem);list_for_each_entry(dev_tmp,?&class->devices,?node)?{if?(dev_tmp->devt?==?devt)?{dev?=?dev_tmp;break;}}up(&class->sem);if?(dev)device_unregister(dev);}★例子(自己寫的延時驅動)#include?????#include?????#include?#include?????#include?#include?#include?#include?#include?#include?#include?#include?#include?#include?#include?#include?#include?#include?#include??#define?NAME"ralink_drive_delay"#define?RALINK_GPIO_DEVNAME?"my_delay"?#define?delay_us?0?????//most?least?is?10?US#define?delay_ms?1?????//Msint?delay_MAJOR?=?109;MODULE_LICENSE("Dual?BSD/GPL");static?long?Ralink_delay_ioctl(struct?inode?*?inode,?struct?file?*?file,?unsigned?int?cmd,unsigned?long?arg){????????switch(cmd)????{????????????case?delay_us:?????????????????udelay(10?*?arg);????????????????return?0;????????????case?delay_ms:????????????????udelay(1000);????????????????return?0;????????????default:????????????????return?-1;????}}static?struct?file_operations?My_delay_fops?=?{????.owner?=?THIS_MODULE,????.ioctl?=?Ralink_delay_ioctl,};static?struct?class?*delay_class;static?int?__init?my_delay_init(void){????int?ret?=?0;????ret?=?register_chrdev(delay_MAJOR,?RALINK_GPIO_DEVNAME,&My_delay_fops);????if(ret?
為你推薦
資訊專欄
熱門視頻
相關推薦
win81休眠斷網如何取消電腦休眠斷網 Win8怎么看電腦配置Win81查看CPU與顯卡配置辦法 win8系統只有c盤怎么分區方法步驟win8系統為什么 Linux文件系統掛載 Linux下獲得CPU的信息 Linux下sort命令的使用 linux虛擬機上使用git和github教程 QQ視頻有雜音怎么消除筆記本電腦禁用內置麥克 在GNULinux中如何得到一個進程當前的流量 Win8系統不借助第三方軟件如何徹底刪掉軟件 linux系統關機與重啟命令 linux下如何修改ip地址主機名等信息 為Linux手動制作U盤啟動及基本原理 linux無密碼ssh登錄 Windows7Fedora17雙系統硬盤安裝 Windows8怎么樣設置長短時間格式 Win81Update怎么樣多選開始磁貼 Linux中進行掛起待機的命令說明 Win81無法關機問題解決方法 Linux怎么樣擴展XFS系統文件 Win8寬帶連接提示錯誤651問題 Windows9將區分桌面平臺和移動平臺 Linux清除root密碼 linux之虛擬機三種聯網模式與遠程登錄管理 修改Linux中的用戶名 LINUXtar glibcptmalloc內存暴增問題解決 Win81如何卸載ie11Win81卸載IE11的辦法 Linux解決文件刪除了但磁盤可利用率沒變 Win8升級失敗提示不支持此升級路徑怎么辦2 Linux下設置防火墻白名單RHEL6和CentOS7 Unix之初學者命令 linux命令su與su的區別 DebianLinux網絡配置 小記IptabLes和IptabLex病毒清理過程2 Linux輸出重定向 Win81系統怎么樣查看系統版本查看Win81版本的簡 Win8系統硬盤故障的表現及怎么辦 win81開機黑屏一段時間怎么回事 Linux中rz和sz命令用法解釋
Top 主站蜘蛛池模板: 日本欧美一区二区三区不卡视频 | 亚洲国产成人久久99精品 | 欧美精品v日韩精品v国产精品 | 欧美爱爱图 | 亚洲国产成人精品女人久久久 | 国产一区 在线播放 | 日韩午夜在线观看 | 热久久中文字幕 | 一本大道香蕉视频在线观看 | 欧美成人精品一级高清片 | 免费啪啪网| 国产免费播放 | 国产一在线精品一区在线观看 | 久久久无码精品亚洲日韩按摩 | 黄色网站在线观看视频 | 交换国产精品视频一区 | 亚洲 欧美综合小说区图片区 | 免费一级a毛片在线播放直播 | 影音先锋亚洲综合小说在线 | 日韩欧美系列 | 成人a毛片免费视频观看 | 欧美日韩另类国产 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 国产精品系列在线观看 | 国产精品久久久久久亚洲伦理 | 国产成人精品曰本亚洲 | 国产精品一区二区综合 | 亚洲日本一区二区三区高清在线 | 国内精品一区二区三区最新 | 国产成人免费视频精品一区二区 | 伊人中文 | xx欧美| 欧美一区精品二区三区 | 精品久久久久久久一区二区手机版 | 日b毛片| 亚洲视频网站在线观看 | 久久成人国产精品一区二区 | 日本欧美一区二区 | 欧美精品第一区 | 香港一级a毛片在线播放 | 欧美一区二区视频 |