字符設備驅動程序框架

via:http://blog.chinaunix.net/uid-20672257-id-3142809.html

1、寫出open、write函數

2、告訴內核

  1)、定義一個struct file_operations結構并填充好

static struct file_operations first_drv_fops = {.owner  =   THIS_MODULE,    /* 這是一個宏,推向編譯模塊時自動創建的__this_module變量 */.open   =   first_drv_open,     .write  = first_drv_write,    }; 

?

2)、把struct file_operations結構體告訴內核
major = register_chrdev(0, "first_drv", &first_drv_fops); // 注冊, 告訴內核 
//相關參數:
//第一個,設備號,0自動分配主設備號,否則為主設備號0-255 
//第二個:設備名
//第三個:struct file_operations結構體

?


  4)、register_chrdev由誰調用(入口函數調用) static int first_drv_init(void)

5)、入口函數須使用內核宏來修飾 module_init(first_drv_init); module_init會定義一個結構體,這個結構體里面有一個函數指針指向first_drv_init這個函數,當我們加載或安裝一個驅動時,內核會自動找到這個結構體,然后調用里面的函數指針,這個函數指針指向first_drv_init這個函數,first_drv_init這個函數就是把struct file_operations結構體告訴內核
6)、有入口函數就有出口函數
module_exit(first_drv_exit);
最后加上協議
MODULE_LICENSE("GPL");
3、mdev根據系統信息自動創建設備節點:
每次寫驅動都要手動創建設備文件過于麻煩,使用設備管理文件系統則方便很多。在2.6的內核以前一直使用的是devfs,但是它存在許多缺陷。它創建了大量的設備文件,其實這些設備更本不存在。而且設備與設備文件的映射具有不確定性,比如U盤即可能對應sda,又可能對應sdb。沒有足夠的主/輔設備號。2.6之后的內核引入了sysfs文件系統,它掛載在/sys上,配合udev使用,可以很好的完成devfs的功能,并彌補了那些缺點。(這里說一下,當今內核已經使用netlink了)。
udev是用戶空間的一個應用程序,在嵌入式中用的是mdev,mdev在busybox中。mdev是udev的精簡版。
首先在busybox中添加支持mdev的選項:
Linux System Utilities ---> ??
[*] mdev ??
[*] ? Support /etc/mdev.conf ??
[*] ? ? Support subdirs/symlinks ??
[*] ? ? ? Support regular expressions substitutions when renaming device ??
[*] ? ? Support command execution at device addition/removal ?
然后修改/etc/init.d/rcS:
echo /sbin/mdev > /proc/sys/kernel/hotplug ?
/sbin/mdev -s ?
執行mdev -s :以‘-s’為參數調用位于 /sbin目錄寫的mdev(其實是個鏈接,作用是傳遞參數給/bin目錄下的busybox程序并調用它),mdev掃描 /sys/class 和 /sys/block 中所有的類設備目錄,如果在目錄中含有名為“dev”的文件,且文件中包含的是設備號,則mdev就利用這些信息為這個設備在/dev 下創建設備節點文件。一般只在啟動時才執行一次 “mdev -s”。
熱插拔事件:由于啟動時運行了命 令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么當有熱插拔事件產生時,內核就會調用位于 /sbin目錄的mdev。這時mdev通過環境變量中的 ACTION 和 DEVPATH,來確定此次熱插拔事件的動作以及影響了/sys中的那個目錄。接著會看看這個目錄中是否“dev”的屬性文件,如果有就利用這些信息為 這個設備在/dev 下創建設備節點文件
重新打包文件系統,這樣/sys目錄,/dev目錄就有東西了

轉載于:https://www.cnblogs.com/izhangzhne/p/4493923.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257321.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為鴻蒙與magic,如果榮耀Magic3搭載了屏下鏡頭和鴻蒙系統,你會做第一批嗎?...

華為榮耀在目前的手機市場中,榮耀手機的人氣還是蠻高的,從高端旗艦市場到中低端市場,我們都能夠看到榮耀手機的蹤影,這已經可以代表榮耀手機的優勢了。要知道華為榮耀這兩年的發展速度非常快,產品的布局速度也是如此&a…

第十九章 我國農村資金籌集

農村改革解說(專著)第十九章 第十九章 我國農村資金籌集 1、農村公共事業統籌經費怎樣確定? 總的原則是:制止對農民的不合理攤派,減輕農民的額外負擔,保證農村合理的公共事業經費。具體要求如下&#xff1a…

兩個Python web框架:Django Tornado比較

就是說它作為 web 框架比 Django 簡單,又支援異步 IO,且更不需要前端的 webserver ? 我已經混亂了, Tornado是 Nginx、Django、Node.js 的結合體?又或是 Nginx * 20% Django * 40% Node.js * 40% ?你需要搞清楚幾個…

廣義動量定理之速度V的應用分析

廣義動量定理之速度V的應用分析 從廣義動量定理FαtnmV的角度說,改變速度V,就可以改變成果nmV。速度派以改變速度V作為其主要目的。 速度V應用于兵貴神速 理論簡介:三國時期曹操的謀士郭嘉說:“兵貴神速”。 孫子在九地篇中說“兵…

云安全聯盟發布更新版安全應用指南

本文講的是云安全聯盟發布更新版安全應用指南【IT168 資訊】云安全聯盟(CSA)本周四發布了云計算服務的第二版安全應用指南。這一非營利性質的聯盟正式成立于四月份,其目的是推進云計算安全的最佳實踐。他們在2009 RSA會議(全球信息安全領域最具權威的年度峰會)上發布…

[BZOJ1026] [SCOI2009] windy數 (數位dp)

Description windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道,在A和B之間,包括A和B,總共有多少個windy數? Input 包含兩個整數,A B。 Output 一個整數 Sample Input…

JQuery ajax()實例

前端頁面&#xff1a; <!doctype html><html><head><meta charset"utf-8"><title>搜索</title></head> <body><div class"zgz">請輸入(A-Z):<input type"text" value"GET"&…

黑馬數據庫html階段考試,黑馬web階段web試題學生版.docx

Web 階段 Web 試題1. 動態網站的開發技術有 (A)JSPHTMLCSSJavaScript 下面哪個請求頭信息可以實現防盜鏈 (C)LocationRefreshRefererIf-Modified-Since在Web應用程序的文件與目錄結構中&#xff0c;是放置在(A )WEB-INF 目錄conf 目錄lib 目錄classes 目錄下面哪一個指明向客戶…

學生信息管理系統中遇到的問題解析

項目概述&#xff1a;做一個簡單的學生信息管理系統 要求&#xff1a;學生信息的增刪查改&#xff0c;成績的增刪。自動生成的編號。 工具&#xff1a;微軟企業庫與MiniUI 遇到的問題與解決方法&#xff1a;&#xff08;前面的博文也有類似的問題和解決方法&#xff0c;這里不再…

簡單地使用線程之一:使用異步編程模型

.NetFramework的異步編程模型從本質上來說是使用線程池來完成異步的任務&#xff0c;異步委托、HttpWebRequest等都使用了異步模型。 這里我們使用異步委托來說明異步編程模型。 首先&#xff0c;我們來明確一下&#xff0c;對于多線程來說&#xff0c;我們需要關注哪些問題。 …

ShowType=0,交換機命令showinterfacestype0/port_#switchport|trunk用于顯 - 信管網

交換機命令show interfaces type0/port_# switchport|trunk用于顯示中繼連接的配置情況&#xff0c;下面是顯示例子&#xff1a;2950#show interface fastEthernet0/1 switchportName: fa0/1Switchport: EnabledAdministrative mode: trunkOperational Mode: trunkAdministrati…

SQL SERVER學習筆記(二)數據庫管理

第二部分&#xff1a;數據庫管理 單詞記憶&#xff1a;transact&#xff1a;處理 create&#xff1a;創建 execute&#xff1a;執行、完成 一、 SQL Server的特性 1、 安裝簡便&#xff1a;為了便于安裝、使用和管理&#xff0c;SQL Server2000提供了一組管理和開發工具。 …

SQL——快速定位相關的外鍵表

轉載于:https://www.cnblogs.com/mingle/p/4506422.html

Linux安裝glibc(升級版本)

2019獨角獸企業重金招聘Python工程師標準>>> glibc下載地址&#xff1a;http://ftp.gnu.org/gnu/glibc/ 這里下載 glibc-2.15&#xff1a; http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz glibc-ports-2.15&#xff1a; http://ftp.gnu.org/gnu/glibc/glibc-ports…

定義列表的特點html,HTML的列表表格表單知識點

無序列表格式 有序列表格式第一項 …

Javascript 獲取url參數,hash值 ,cookie

/*** 獲取請求參數* param key* returns {*}*/ function getRequestParameter(key){var params getRequestParameters();return params[key]; }/*** 獲取請求參數列表* returns {{}}*/ function getRequestParameters(){var arr (location.search || "").replace(/…

C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和邊框寬度的二維碼

本文介紹在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和邊框寬度的二維碼。網上文章大多只是簡單介紹內置參數的設置&#xff0c;根據我的使用目的&#xff0c;增加了自定義目標二維碼圖片尺寸和白邊邊框。有需要的朋友們可以試一下&#xff0c;如有bug歡迎指正。 首先&…

html設置百度協議,網站HTML結構SEO要求說明(含移動站)

網頁結構一、網頁中主體結構標簽一一對應。網頁頭部區域網頁底部區域網頁邊框區域網頁導航區域網頁章節、頁眉、頁腳詳情頁文章區域詳情頁作者信息詳情頁中文章的發布日期列表頁中文章列表區域二、其他說明1、首頁head中標注Meta標簽協議&#xff0c;標識對應的網頁瀏覽&#x…

【Fanvas技術解密】HTML5 canvas實現臟區重繪

先說明一下&#xff0c;fanvas是筆者在企鵝公司開發的&#xff0c;即將開源的flash轉canvas工具。 臟區重繪(dirty rectangle)并不是一門新鮮的技術了&#xff0c;這在最早2D游戲誕生的時候就已經存在。 復雜的術語或概念就不多說&#xff0c;簡單說&#xff0c;臟區重繪就是每…

javascript 學習教程

1&#xff0c;JavaScript 是一種輕量級的編程語言&#xff0c;是可插入 HTML 頁面的編程代碼。 2,以<script>標簽開始&#xff0c;以</script>標簽結束。 3,引用放在外部文件的擴展名為.js的腳本文件 <script src"myScript.js"></script> 4&…