Linux文件系統與設備文件系統 Linux設備驅動程序 教學課件_第1頁
Linux文件系統與設備文件系統 Linux設備驅動程序 教學課件_第2頁
Linux文件系統與設備文件系統 Linux設備驅動程序 教學課件_第3頁
Linux文件系統與設備文件系統 Linux設備驅動程序 教學課件_第4頁
Linux文件系統與設備文件系統 Linux設備驅動程序 教學課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、設備驅動程序第三章 Linux文件系統與設備文件系統 目錄Linux文件操作 Linux文件系統 devfs設備文件系統 udev設備文件系統 目錄Linux文件操作 Linux文件系統 devfs設備文件系統 udev設備文件系統 文件操作的相關系統調用創立參數mode指定新建文件的存取權限,它同umask一起決定文件的最終權限翻開Open函數有兩個形式,其中pathname是我們要翻開的文件名,flags可以是下表的一個值或者是幾個值的組合如果文件翻開成功,open函數會返回一個文件描述符,以后對該文件的所有操作就可以通過對這個文件描述符進行操作來實現文件操作的相關系統調用O_RDONL、

2、YO_WRONY、O_RDWR這三個標志只能使用任意的一個如果使用了O_CREATE標志,那么使用的函數是后者。這個時候我們還要指定mode標志,用來表示文件的訪問權限。Mode可以是下表的值的組合文件操作的相關系統調用除了可以通過上述宏進行或邏輯產生標志以外,我們也可以自己用數字來表示,Linux總共用5個數字來表示文件的各種權限:第一位表示設置用戶ID,第二位表示設置組ID,第三位表示用戶自己的權限位,第四位表示組的權限,第五位表示其他人的權限。每個數字可以取1執行權限、2寫權限、4讀權限、0無或者是這些值的和。文件操作的相關系統調用讀寫函數Write實現將把length個字節從buf指向

3、的緩沖區寫文件描述符fd所指向的文件中,返回值為實際寫入的字節數。函數read實現從文件描述符fd所指定的文件中讀取length個字節到buf指向的緩沖區中,返回值為實際讀取的字節數。以O_CREAT為標志的open函數實際上實現了文件創立的功能,因此,下面的函數等同creat函數。文件操作的相關系統調用定位該函數將文件讀寫指針相對whence移動offset個字節。操作成功時,返回文件指針相對于文件頭的位置。關閉Fd是要關閉的文件描述符C庫函數的文件操作C庫函數的文件操作是獨立于具體的操作系統平臺的,不管是在DOS、Windows、Linux還是在VxWorks中都是這些函數。創立和翻開讀寫

4、關閉目錄Linux文件操作 Linux文件系統 devfs設備文件系統 udev設備文件系統 Linux文件系統目錄結構目錄內容/頂層根目錄。其它目錄都在這個根目錄下 /bin基本命令可執行文件的存放位置 /sbin系統管理類命令可執行文件的存放位置 /devdev 是設備(device)的英文縮寫。這是個十分重要的目錄。它包含了所有Linux系統中使用的外部設備文件。要注意的是這里的設備文件不是指設備的驅動程序,而是指訪問外部設備的接口文件。 /usr用戶應用程序和文檔目錄 /etc這個目錄下存放系統的配置文件。 /liblib是庫(library)英文縮寫。這個目錄用于存放系統動態鏈接庫。

5、所有動態鏈接程序都要用到這個目錄下的庫文件。 /proc這是Linux的一個特殊文件系統,主要用于存放內核及進程信息 /tmp臨時文件目錄,許多程序都需要用到此目錄進行讀寫操作 /var系統日志和一些服務程序臨時文件的存放目錄Linux文件系統與設備驅動 Linux文件系統與設備驅動應用程序和VFS之間的接口是系統調用,而VFS與磁盤文件系統以及普通設備之間的接口是file_operations結構體成員函數。由于字符設備的上層沒有磁盤文件系統,所以字符設備的file_operations成員函數就直接由設備驅動提供了, file_operations正是字符設備驅動的核心。而對于塊存儲設備而

6、言,ext2、fat、jffs2等文件系統中會實現針對VFS的file_operations成員函數,設備驅動層將看不到file_operations的存在。磁盤文件系統和設備驅動會將對磁盤文件的訪問最終轉換成對磁盤上柱面和扇區的訪問。Linux文件系統與設備驅動File結構體文件結構代表一個翻開的文件,系統中每個翻開的文件在內核空間都有一個關聯的struct file。它由內核在翻開文件時創立,并傳遞給在文件上進行操作的任何函數。在文件的所有實例都關閉后,內核釋放這個數據結構。Inode結構體VFS inode包含文件訪問權限、屬主、組、大小、生成時間、訪問時間、最后修改時間等信息。從一個i

7、node中獲得主設備號和次設備號:Linux文件系統與設備驅動同一類設備使用相同的主設備號。查看/dev目錄可以獲知系統中包含的設備文件。 mknod /dev/global_chardev c 254 0 查看/proc/devices可以獲知系統中注冊的設備,第1列為主設備號,第2列為設備名。目錄Linux文件操作 Linux文件系統 devfs設備文件系統 udev設備文件系統 傳統方式int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);參數說明:major是為設備

8、驅動程序向系統申請的主設備號,如果為0那么系統為此設備動態地分配一個主設備號。name是設備名(將出現在/proc/devices)。 返回值: 此函數返回0表示成功。返回-EINVAL表示申請的主設備號非法,一般來說是主設備號大于系統所允許的最大設備號。返回 -EBUSY表示所申請的主設備號正在被其它設備驅動程序使用。如果是動態分配主設備號成功,此函數將返回所分配的主設備號。如果 register_chrdev操作成功,設備名就會出現在/proc/devices文件里。在成功地向系統注冊了設備驅動程序后(調用register_chrdev() 成功后),就可以用mknod命令來把設備映射為一

9、個特別文件,其它程序使用這個設備的時候,只要對此特別文件進行操作就行了。unregister_chrdev(unsigned int major, const char *name);Devfs設備文件系統Devfs是由Linux2.4內核引入的,具有如下優點:可以通過程序在設備初始化時在/dev目錄下創立設備文件,卸載設備時將它刪除設備驅動程序可以指定設備名、所有者和權限位,用戶空間程序仍然可以修改所有者和權限位不再需要為設備驅動程序分配主設備號以及處理次設備號,在程序中可以直接給register_chrdev()傳遞0主設備號以動態獲得可用的主設備號,并在devfs_register()中

10、指定次設備號Devfs設備文件系統驅動程序調用下面的函數來進行設備文件的創立和刪除工作:使用Devfs_mk_dir函數在/dev目錄下創立設備目錄可代替mknod命令 目錄Linux文件操作 Linux文件系統 devfs設備文件系統 udev設備文件系統 Udev與Devfs的區別在Linux2.6內核中,udev取代了devfs,原因如下:Devfs所做的工作被確信可以在用戶態完成一些bug相當長的時間內未被修復Devfs的維護者和作者停止了對代碼的維護工作Udev完全在用戶態工作,利用設備參加或移除時內核所發送的熱插拔事件來工作。由于udev根據系統中硬件設備的狀態動態更新設備文件,進

11、行設備文件的創立和刪除等,因此,在使用udev后,/dev目錄下就會只包含系統中真正存在的設備。Devfs與udev的另一個顯著區別在于:采用devfs,當一個并不存在的/dev節點被翻開的時候,devfs能自動加載對應的驅動,而udev那么不能。Sysfs文件系統與Linux設備模型Sysfs文件系統Linux2.6引入了sysfs文件系統,它是一個虛擬的文件系統,它可以產生一個包括所有系統硬件的層級視圖,與提供進程和狀態信息的proc文件系統十分類似。Sysfs把連接在系統上的設備和總線組織成為一個分級的文件,它們可以由用戶空間存取,向用戶空間導出內核數據結構及它們的樹型。Sysfs的一個

12、目的就是展示設備驅動模型中各組件的層次關系。 Sysfs文件系統與Linux設備模型Kobject內核對象kobject是Linux2.6引入的設備管理機制,在內核中由kobject結構體表示,這個數據結構使所有設備在底層都具有統一的接口。每個在內核中注冊的kobject對象都對應于sysfs文件系統中的一個目錄。Void kobject_init(struct kobject *kobj)Int kobject_set_name(struct kobject *kobj,const char*format,)Struct kobject *kobject_get(struct kobject

13、 *kobj)Void kobject_put(struct kobject *kobj)Int kobject_register(struct kobject *kobj)Void kobject_del(sturct kobject *kobj)Void kobject_unregister(struct kobject *kobj)Sysfs文件系統與Linux設備模型Kset內核對象Kobject通常通過kset組織成層次化的結構,kset是具有相同類型的kobject的集合,在內核中用kset數據結構表示。包含在kset中的所有kobject被組織成一個雙向循環鏈表。Sysfs文件系

14、統與Linux設備模型Subsystem內核對象子系統Subsystem是一系列kset的集合,它描述系統中某一類設備子系統。Linux設備模型組件系統中的任一是設備在設備模型中都有一個deivce對象描述。屬性在bus、device、driver和class層次上都分別定義了其屬性結構體,包括bus_attribute、driver_attribute、class_attribute、class_device_attributeUdev的組成Udev的設計目標:在用戶空間中執行動態建立/刪除設備文件允許每個都不用關心主/次設備號提供LSB標準名稱如果需要,可提供固定的名稱Udev的組成Ude

15、v的工作過程當內存檢測到在系統中出現了新設備后,內核會在sysfs文件系統中為該新設備生成新的記錄并導出一些設備特定的信息及所發生的事情Udev獲取內核導出的信息,它調用namedev決定應該給該設備指定的名稱。Udev的組成在namedev中使用5個步驟來決定指定設備的命名標簽/序號設備總線號總線上的拓撲替換名稱內核提供的名稱Udev規那么文件Udev規那么文件以行為單位,以“#開頭的行代表注釋行。其余的每一行代表一個規那么。每個規那么分成一個或多個匹配和賦值局部。匹配局部用匹配專用的關鍵字來表示,相應的賦值局部用賦值專用的關鍵字來表示。匹配關鍵字包括:ACTION、KERNEL、BUS、SYSFS、SUBSYSTEM等。賦值關鍵字包括:NAME、SYMLINK、OWNER、GROUP、IMPORT等。創立和配置udevUdev包括udev、udevcontrol、udevd、udevsend、udevmonitor、u

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論