• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      “操作系統(tǒng)”實(shí)驗(yàn)教學(xué)之U盤驅(qū)動(dòng)程序開發(fā)

      2009-08-28 09:09:14文艷軍鄧勝蘭尹俊文
      計(jì)算機(jī)教育 2009年14期
      關(guān)鍵詞:操作系統(tǒng)U盤設(shè)備管理

      文艷軍 羅 宇 鄧勝蘭 尹俊文

      摘要:本文介紹了一個(gè)U盤驅(qū)動(dòng)程序開發(fā)實(shí)驗(yàn)的設(shè)計(jì)與實(shí)施情況,包括實(shí)驗(yàn)內(nèi)容、實(shí)驗(yàn)基本過程和思路、實(shí)驗(yàn)組織和效果等。本實(shí)驗(yàn)有助于學(xué)生更真實(shí)地了解設(shè)備管理的實(shí)際情況,加深對設(shè)備管理原理的理解。

      關(guān)鍵詞:設(shè)備驅(qū)動(dòng)程序;U盤;設(shè)備管理

      中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B

      1引言

      設(shè)備管理是操作系統(tǒng)的一個(gè)關(guān)鍵內(nèi)容,在實(shí)際操作系統(tǒng)的開發(fā)中,有相當(dāng)多的代碼是各類設(shè)備的驅(qū)動(dòng)程序。因此,在操作系統(tǒng)實(shí)踐環(huán)節(jié)中設(shè)計(jì)一個(gè)合適的設(shè)備驅(qū)動(dòng)程序開發(fā)實(shí)驗(yàn)具有非常重要的意義。

      本文介紹了一個(gè)Linux環(huán)境下的U盤驅(qū)動(dòng)程序開發(fā)實(shí)驗(yàn)的設(shè)計(jì)與實(shí)施情況。U盤是一個(gè)典型的塊設(shè)備,這類設(shè)備種類多、使用廣泛,其驅(qū)動(dòng)程序的開發(fā)也比字符設(shè)備復(fù)雜。為了降低復(fù)雜性,許多相關(guān)的實(shí)驗(yàn)安排都是針對一個(gè)虛擬設(shè)備,如內(nèi)存盤(RAM disk)。但這樣做也有它的弊端,即與真實(shí)物理設(shè)備的驅(qū)動(dòng)程序開發(fā)差異很大,學(xué)生不能更真實(shí)地了解設(shè)備管理的實(shí)際情況。因此,如果能夠設(shè)計(jì)一個(gè)真實(shí)塊設(shè)備(如U盤)的驅(qū)動(dòng)程序開發(fā)實(shí)驗(yàn),將能夠彌補(bǔ)上述缺憾。

      在Linux環(huán)境下,已經(jīng)有一個(gè)通用的U盤驅(qū)動(dòng)程序usb-storage.ko,其源程序放在目錄driversusbstorage下(相對于內(nèi)核源碼根目錄)。但這個(gè)驅(qū)動(dòng)的實(shí)現(xiàn)相當(dāng)復(fù)雜,它將一個(gè)USB設(shè)備模擬成了一個(gè)SCSI設(shè)備,進(jìn)而通過SCSI設(shè)備的接口來訪問,該驅(qū)動(dòng)程序很難被學(xué)生所理解。在我們設(shè)計(jì)的實(shí)驗(yàn)中,希望學(xué)生開發(fā)一個(gè)相對簡單些的U盤驅(qū)動(dòng)程序,不求高性能,只求結(jié)構(gòu)明朗、清晰易懂,主要是讓學(xué)生掌握一個(gè)實(shí)際塊設(shè)備的驅(qū)動(dòng)方式,從而加深對設(shè)備管理原理的理解。

      事實(shí)上,本實(shí)驗(yàn)開發(fā)的驅(qū)動(dòng)程序應(yīng)該能夠適用于所有基于Bulkonly傳輸協(xié)議的USB大容量存儲(chǔ)設(shè)備(USB Mass Storage),比如USB移動(dòng)硬盤和USB外置光驅(qū),U盤只是其中的一種。由于USB大容量存儲(chǔ)設(shè)備具有容量大、速度快、連接靈活、即插即用、總線供電等優(yōu)點(diǎn),它們得到了廣泛使用,掌握這類設(shè)備驅(qū)動(dòng)程序的開發(fā)技術(shù)無疑具有很強(qiáng)的實(shí)用性。

      本文第二節(jié)介紹此實(shí)驗(yàn)的內(nèi)容設(shè)計(jì)情況,包括實(shí)驗(yàn)過程和思路的描述,第三節(jié)介紹實(shí)驗(yàn)的組織情況和實(shí)驗(yàn)效果分

      析,最后是小結(jié)。

      2實(shí)驗(yàn)內(nèi)容設(shè)計(jì)

      本實(shí)驗(yàn)要求學(xué)生在Linux操作系統(tǒng)下編寫一個(gè)U盤驅(qū)動(dòng)程序,只要求能夠驅(qū)動(dòng)某個(gè)型號(hào)的U盤,要能夠支持U盤的常規(guī)操作,如命令hexdump、mke2fs和mount等。同時(shí),要求在系統(tǒng)內(nèi)核日志中顯示出U盤的容量。對于學(xué)有余力的學(xué)生,可增加多分區(qū)支持功能。

      2.1實(shí)驗(yàn)基礎(chǔ)和思路

      在文獻(xiàn)[2]中,講解了如何編寫一個(gè)Ramdisk塊設(shè)備驅(qū)動(dòng)程序,稱為sbull;也講解了如何編寫一個(gè)USB設(shè)備驅(qū)動(dòng)程序,并以Linux源代碼中的usb-skeleton.c為例。雖然前者驅(qū)動(dòng)的并不是一個(gè)實(shí)際的塊設(shè)備,且后者又只是針對USB字符設(shè)備,但是它們提供了一個(gè)不錯(cuò)的基礎(chǔ),通過合并就能基本得到一個(gè)支持USB塊設(shè)備的驅(qū)動(dòng)程序。之所以說基本得到,是因?yàn)楹喜⒑笾皇怯辛藟K設(shè)備、USB設(shè)備的驅(qū)動(dòng)支持框架,但還缺一樣:對U盤(USB塊設(shè)備)的實(shí)際訪問操作。

      USB塊設(shè)備的訪問方法與USB字符設(shè)備區(qū)別很大,有一套復(fù)雜的協(xié)議。把這樣一套協(xié)議研究清楚,將花費(fèi)大量時(shí)間,也遠(yuǎn)離了驅(qū)動(dòng)程序開發(fā)的核心。這是一大難點(diǎn),為此我們專門編寫了一個(gè)U盤訪問函數(shù)(my_Bulk_ transport),以減輕工作量。2.3節(jié)將進(jìn)一步介紹該幫助函數(shù)。

      簡言之,本實(shí)驗(yàn)的思路是:合并sbull和usb-skeleton這兩個(gè)參考驅(qū)動(dòng)程序,以構(gòu)造出U盤驅(qū)動(dòng)程序的整體框架;調(diào)用幫助函數(shù)my_Bulk_transport以實(shí)際訪問U盤。從而開發(fā)出一個(gè)簡潔的U盤驅(qū)動(dòng)程序。下面分別對參考驅(qū)動(dòng)程序和幫助函數(shù)分別進(jìn)行簡要介紹。

      2.2參考驅(qū)動(dòng)程序

      文獻(xiàn)[2]第16章以一個(gè)Ramdisk設(shè)備為例講解了塊設(shè)備驅(qū)動(dòng)程序的一般編寫方法。包括用到的主要數(shù)據(jù)結(jié)構(gòu)(如下圖所示)和關(guān)鍵函數(shù)(如register_blkdev、add_disk和blk_init_queue等)。從中可以知道如何向操作系統(tǒng)登記一個(gè)塊設(shè)備、以及操作系統(tǒng)是如何調(diào)用所提供的相關(guān)函數(shù)來支持塊設(shè)備的打開、關(guān)閉、讀寫、控制等操作的。這些是塊設(shè)備驅(qū)動(dòng)程序編寫的基礎(chǔ)知識(shí)。尤其需要說明的是,該驅(qū)動(dòng)程序針對的并不是一個(gè)真實(shí)物理設(shè)備,而是一個(gè)Ramdisk設(shè)備。所謂Ramdisk,是指使用計(jì)算機(jī)內(nèi)存作為存儲(chǔ)介質(zhì)的盤。一旦加載該驅(qū)動(dòng),就會(huì)從內(nèi)存中劃分出一些空間,虛擬出幾個(gè)磁盤,并且可以對這個(gè)虛擬磁盤進(jìn)行格式化、文件復(fù)制和查看等操作。因此,這個(gè)驅(qū)動(dòng)程序只是提供了塊設(shè)備驅(qū)動(dòng)程序的一般框架。如果要驅(qū)動(dòng)實(shí)際的U盤,還需要給學(xué)生提供一些其他知識(shí)。

      文獻(xiàn)[2]的第13章講述了USB字符設(shè)備驅(qū)動(dòng)程序的一般編寫方法。所用的例子是Linux內(nèi)核源碼目錄中的文件driver/usb/usb-skeleton.c。它提供了一個(gè)最基礎(chǔ)的USB字符驅(qū)動(dòng)程序,稱為USB骨架。其中包括了對USB字符設(shè)備的注冊、打開、關(guān)閉、讀寫等操作的支持。特別地,usb_register、probe、disconnect和usb_unregister這幾個(gè)函數(shù)是USB設(shè)備才有的,支持熱插拔等操作。其中的其它一些函數(shù),如skel_read、skel_write、skel_open和skel_release,是針對字符設(shè)備的,并不適用于U盤驅(qū)動(dòng)程序。因此,需要與前一個(gè)參考驅(qū)動(dòng)程序合并考慮,才能構(gòu)造出USB塊設(shè)備的驅(qū)動(dòng)程序。

      2.3U盤驅(qū)動(dòng)的幫助函數(shù)

      在參考驅(qū)動(dòng)程序usb-skeleton.c中,當(dāng)需要對USB設(shè)備進(jìn)行讀寫的時(shí)候,調(diào)用了usb_bulk_msg和usb_submit_ urb等函數(shù)。要使用它們來操作U盤,需要對USB大規(guī)模存儲(chǔ)設(shè)備的相關(guān)協(xié)議非常清楚,會(huì)涉及到大量底層細(xì)節(jié),對于本科學(xué)生而言,需要花大量時(shí)間,會(huì)非常困難。

      為此,我們以Linux下的通用USB驅(qū)動(dòng)程序usb-storage為基礎(chǔ),整理出了一個(gè)粒度更大的U盤訪問函數(shù),稱為my_Bulk_transport。主要借鑒了如下幾個(gè)文件:

      ① drivers/usb/storage/transport.c

      ② drivers/usb/storage/transport.h

      ③ drivers/scsi/scsi.h

      該函數(shù)的原型如下所示:

      int my_Bulk_transport(

      struct usb_device *udev,

      struct usb_interface *interface,

      struct cmnd_struct *cs,

      unsigned char *bulk_buffer,

      int bulk_size,

      __u8 bulk_in_endpointAddr,

      __u8 bulk_out_endpointAddr);

      其功能是向USB設(shè)備(udev)的接口(interface)發(fā)送一個(gè)命令(cs),進(jìn)行相應(yīng)的數(shù)據(jù)傳遞(bulk_buffer),并獲取狀態(tài)反饋信息。內(nèi)部封裝了復(fù)雜的USB大規(guī)模存儲(chǔ)設(shè)備的傳輸協(xié)議,學(xué)生只需要掌握命令的格式和一些基本的USB設(shè)備知識(shí)即可,從而有效控制了實(shí)驗(yàn)的復(fù)雜性。

      3教學(xué)組織及效果

      本實(shí)驗(yàn)一人一組,課內(nèi)安排8個(gè)學(xué)時(shí)的上機(jī)時(shí)間,學(xué)生需要在課外查閱一些相關(guān)資料。要求提交實(shí)驗(yàn)上機(jī)報(bào)告和驅(qū)動(dòng)程序源程序,實(shí)驗(yàn)成績由現(xiàn)場上機(jī)檢查成績和上機(jī)報(bào)告成績兩部分構(gòu)成。

      在2007年和2008年秋季學(xué)期的“操作系統(tǒng)課程設(shè)計(jì)課”中,本實(shí)驗(yàn)作為一個(gè)實(shí)驗(yàn)單元進(jìn)行了教學(xué)實(shí)踐。從實(shí)驗(yàn)效果看,有約15%的學(xué)生能夠比較獨(dú)立地完成實(shí)驗(yàn),實(shí)現(xiàn)U盤的掛載、讀寫、容量信息讀取操作;有約60%的學(xué)生在老師進(jìn)一步給出參考驅(qū)動(dòng)程序的合并雛形后,能夠順利完成合并,并實(shí)現(xiàn)部分功能,如容量信息的讀取;剩下的大概25%只能進(jìn)行部分合并工作,不能完成U盤驅(qū)動(dòng)的有效功能。此外,對于fdisk操作和多分區(qū)功能的支持,很少有學(xué)生能夠?qū)崿F(xiàn)。

      總體來看,雖然有U盤幫助函數(shù)的輔助,本實(shí)驗(yàn)仍然具有較高的難度,其主要困難在于:(1)許多學(xué)生對Linux下的程序開發(fā)、調(diào)試不熟悉,對于內(nèi)核模塊更是如此;(2)參考資料支持不夠,這方面的參考資料比較分散,且大部分都是英文資料。完成情況好的學(xué)生,大都比較積極主動(dòng),自學(xué)能力較強(qiáng)。因此,本實(shí)驗(yàn)要取得比較好的效果,需要充分激發(fā)學(xué)生的主動(dòng)性,同時(shí)對參考資料的使用方法進(jìn)行較好的引導(dǎo)。

      4結(jié)束語

      本文介紹了一個(gè)USB塊設(shè)備驅(qū)動(dòng)程序開發(fā)實(shí)驗(yàn)的內(nèi)容設(shè)計(jì)、教學(xué)組織和實(shí)驗(yàn)效果,對實(shí)驗(yàn)的關(guān)鍵環(huán)節(jié)和應(yīng)注意的事項(xiàng)進(jìn)行了分析,可供開展同類操作系統(tǒng)實(shí)驗(yàn)的同行借鑒,從而加深學(xué)生對操作系統(tǒng)的設(shè)備管理技術(shù)的理解,進(jìn)一步提高“操作系統(tǒng)”課程的教學(xué)效果。

      參考文獻(xiàn):

      [1] 羅宇,陳燕輝,文艷軍,等. 操作系統(tǒng)實(shí)驗(yàn)教程[M]. 北京:電子工業(yè)出版社,2009.

      [2] Jonathan Corbert, Alessandro Rubini, Greg Kroah-Hartman,等. Linux設(shè)備驅(qū)動(dòng)程序[M]. 3版. 魏永明,耿岳,鐘書毅,譯. 北京:中國電力出版社,2006.

      猜你喜歡
      操作系統(tǒng)U盤設(shè)備管理
      采用U盤文件冗余方案實(shí)現(xiàn)TSP系統(tǒng)的可靠裝載
      智能手機(jī)操作系統(tǒng)的分析與比較
      卷宗(2016年10期)2017-01-21 14:04:15
      國產(chǎn)桌面操作系統(tǒng)中虛擬化技術(shù)應(yīng)用研究
      計(jì)算機(jī)維護(hù)中操作系統(tǒng)還原技術(shù)的分析
      對計(jì)算機(jī)進(jìn)行操作系統(tǒng)重裝的維護(hù)
      當(dāng)前鐵路工務(wù)線路設(shè)備管理對安全生產(chǎn)的作用分析
      科技資訊(2016年19期)2016-11-15 10:09:29
      鐵路設(shè)備管理系統(tǒng)的設(shè)計(jì)與應(yīng)用
      從報(bào)廢處置角度探討設(shè)備管理工作
      鐵路貨車設(shè)備管理信息化建設(shè)的研究
      U盤“鬧肚子”
      托克托县| 威海市| 海宁市| 罗源县| 兰西县| 红安县| 班玛县| 迭部县| 大城县| 夏邑县| 睢宁县| 鹤岗市| 瑞丽市| 新干县| 南宁市| 湘潭县| 阿巴嘎旗| 涟水县| 来安县| 晋州市| 清丰县| 泰州市| 深州市| 麦盖提县| 康保县| 伊金霍洛旗| 新乡县| 司法| 东光县| 苗栗市| 望谟县| 绥中县| 林周县| 香港| 左权县| 二连浩特市| 大港区| 巴里| 丰都县| 元江| 随州市|