chap 3-字元装置驱动程式.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chap 3-字元装置驱动程式

Chap 3-字元裝置驅動程式 Outline Introduction 3.1 scull的設計藍圖 3.2 主編號與次編號 3.3 檔案架構 3.4 file 結構 3.5 open 與 release 3.6 Scull 的記憶體用法規劃 3.7 相競狀況 3.8 read 與 write 3.9 try scull 3.10 devfs 檔案系統 3.11 回溯相容性 3.12 速查參考 3--Introduction 本章目標:寫出一個完整的字元裝置驅動程式(char device driver)--簡稱char driver 終極目標:寫出一個模組化的char driver 範例:scull--( Simple Character Utility for Loading Localities ) Makefile, main.c, access.c, empty.c, pipe.c, scull.h, scull.init, scull_load, scull_unload, alpha.checkthem scull的作用是“讓使用者可把一塊記憶區當成字元裝置來使用”?scull所驅動的目標裝置是一塊記憶區 不需依賴任何“特殊”硬體 只要有linux平台就可以編譯與執行 未提供任何實用功能,只展示核心與char driver之間軟體介面 3.1--scull的設計藍圖 定義驅動程式要提供哪些功能給user-sapce的程式 可循序存取(字元裝置) or 可隨機存取(區塊裝置) 模擬單一裝置(ex:一機多體 or 多個同類裝置) Scull所模擬出的每一種裝置,分別由不同類型的模組予以實現(相同的machine差別在於policy的不同) scull0~scull3?四個由記憶區所構成的裝置,兼具“共通” “持續” scullpipe0~scullpipe3?四個FIFO裝置( blocking與nonblocking ) Scullsingle?一次只容許一個被行程存取 Scullpriv?允許每各終端機都有權開啟依次,分屬不同行程 Sculluid?允許開始多次,限同一使用者。(回傳錯誤碼) Scullwuid?允許開始多次,限同一使用者。(推延,等待) 3.2--主編號與次編號 主編號(major number)(0~255) 代表裝置所配合的驅動程式 當核心收到open()系統呼叫時,就是依據“主編號”來選擇驅動程式 次編號(minor number)(0~255) 驅動程式以次編號來辨認同類裝置的個體 核心本身用不到,只有驅動程式自己才知道次編號的意義 當使用者要存取字元裝置時,必須透過檔案系統裡的“代表名稱”?特殊檔(special file) 、裝置檔(device file) 、 檔案系統樹的節點(node),集中在/dev/目錄下。 裝置類型: “c”代表char driver的特殊檔 “b”代表block driver的裝置檔 3.2--主編號與次編號 ? ls –al /dev/ |less 3.2--主編號與次編號 檔案系統製作裝置節點的命令是mknod,必須有特權身分(root)才能使用此工具。至少需要四個引數… 代表名稱 裝置類型 主編號 次編號 ? mknod /dev/ant c 252 0 像任何儲存在磁碟上的普通檔案一樣,mknod所產生的裝置節點會被保存下來,除非刻意刪除它們。用一般的rm命令即可辦到…不使用時未刪除及佔用空間 ? rm /dev/ant 3.2.1--隨機取得主編號 大部份常見的裝置幾乎都有固定的主編號,可在核心源碼樹的Documentation/devices.txt檔案內找到一份“裝置-主編號”對照表。挑選可用主編號不易 ? less /usr/src/linux-2.4.20/Documentation/devices.txt “實驗性或自家使用”的主編號: 60~63 、 120~127、240.254真正公開給大眾使用的驅動程式不該使用這些範圍內的主編號 “隨機索取主編號”呼叫register_chrdev() 定義在linux/fs.h ? less /usr/src/linux-2.4.20/include/linux/fs.h 3.2.1--隨機取得主編號 在呼叫register_chrdev()時: major引數給‘0’: =回傳值為‘0 255’核心分配的主編號 major引數給‘0 255’: =回傳值為‘0’表示核心同意你的要求 發生錯誤時: = 回傳值為‘負數’ 如果你的驅動程式會被用於廣大群眾,或者有可能被內入正式核心,則須設法申請專用的主編號。 3.2.1--隨機取得主編號 ?

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档