L i n u x 驅 動 常 見 面 試 題

http://wenku.baidu.com/link?url=rnjzT4gp6jmPwSRik09ImM1C8fpByPpO6TP-Ke2HdYnkuJZ1lJcX0hSv8vFdmPDKqBPlobUtLItJ56EF8jguxXKk8b2EeRVMXiHDgk0Tsg7

筆試題:

1、 Linux設備中字符設備與塊設備有什麼主要的區別?請分別列舉一些實際的設備說出它們是屬於哪一類設備。
 答:字符設備:字符設備是個能夠像字節流(類似文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少實現open,close,read和write系統調用。字符終端、串口、鼠標、鍵盤、攝像頭、聲卡和顯卡等就是典型的字符設備。
塊設備:和字符設備類似,塊設備也是通過/dev目錄下的文件系統節點來訪問。塊設備上能夠容納文件系統,如:u盤,SD卡,磁盤等。

    字符設備和塊設備的區別僅僅在於內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口,而這些不同對用戶來講是透明的。在內核中,和字符驅動程序相比,塊驅動程序具有完全不同的接口



2、查看驅動模塊中打印信息應該使用什麼命令?如何查看內核中已有的字符設備的信息?如何查看正在使用的有哪些中斷號?
答:1) 查看驅動模塊中打印信息的命令:dmesg
2) 查看字符設備信息可以用lsmod 和modprobe,lsmod可以查看模塊的依賴關係,modprobe在加載模塊時會加載其他依賴的模塊。
    3)顯示當前使用的中斷號cat /proc/interrupt



3、Linux中引入模塊機制有什麼好處?


答:首先,模塊是預先註冊自己以便服務於將來的某個請求,然後他的初始化函數就立即結束。換句話說,模塊初始化函數的任務就是爲以後調用函數預先作準備。
好處:
1) 應用程序在退出時,可以不管資源的釋放或者其他的清除工作,但是模塊的退出函數卻必須仔細此撤銷初始化函數所作的一切。
2) 該機制有助於縮短模塊的開發週期。即:註冊和卸載都很靈活方便。
4、copy_to_user()和copy_from_user()主要用於實現什麼功能?一般用於file_operations結構的哪些函數裏面?
答:由於內核空間和用戶空間是不能互相訪問的,如果需要訪問就必須藉助內核函數進行數據讀寫。copy_to_user():完成內核空間到用戶空間的複製,copy_from_user():是完成用戶空間到內核空間的複製。一般用於file_operations結構裏的read,write,ioctl等內存數據交換作用的函數。當然,如果ioctl沒有用到內存數據複製,那麼就不會用到這兩個函數。






5、請簡述主設備號和次設備號的用途。如果執行mknod chartest c 4 64,創建chartest
設備。請分析chartest使用的是那一類設備驅動程序。


答:
1)主設備號:主設備號標識設備對應的驅動程序。雖然現代的linux內核允許多個驅動程序共享主設備號,但我們看待的大多數設備仍然按照“一個主設備對應一個驅動程序”的原則組織。
   次設備號:次設備號由內核使用,用於正確確定設備文件所指的設備。依賴於驅動程序的編寫方式,我們可以通過次設備號獲得一個指向內核設備的直接指針,也可將此設備號當作設備本地數組的索引。
2)chartest 由驅動程序4管理,該文件所指的設備是64號設備。(感覺類似於串口終端或者字符設備終端)。





6、設備驅動程序中如何註冊一個字符設備?分別解釋一下它的幾個參數的含義。


答:註冊一個字符設備驅動有兩種方法:
1) void cdev_init(struct cdev *cdev, struct file_operations *fops)
該註冊函數可以將cdev結構嵌入到自己的設備特定的結構中。cdev是一個指向結構體cdev的指針,而fops是指向一個類似於file_operations結構(可以是file_operations結構,但不限於該結構)的指針.
2) int register_chrdev(unsigned int major, const char *namem , struct file)operations *fopen);
該註冊函數是早期的註冊函數,major是設備的主設備號,name是驅動程序的名稱,而fops是默認的file_operations結構(這是只限於file_operations結構)。對於register_chrdev的調用將爲給定的主設備號註冊0-255作爲次設備號,併爲每個設備建立一個對應的默認cdev結構。




7、請簡述中斷於DMA的區別。Linux設備驅動程序中,使用哪個函數註冊和註銷中斷處理程序?
答:1)DMA:是一種無須CPU的參與就可以讓外設與系統內存之間進行雙向數據傳輸的硬件機制,使用DMA可以使系統CPU從實際的I/O數據傳輸過程中擺脫出來,從而大大提高系統的吞吐率。
中斷:是指CPU在執行程序的過程中,出現了某些突發事件時CPU必須暫停執行當前的程序,轉去處理突發事件,處理完畢後CPU又返回源程序被中斷的位置並繼續執行。
所以中斷和MDA的區別就是MDA不需CPU參與而中斷是需要CPU參與的。
2)中斷註冊函數和中斷註銷函數
註冊中斷:
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name, void *dev_id);
參數意義依次是:中斷號,中斷處理函數,中斷管理有關的掩碼,中斷請求設備名,中斷信號線。
過程是:dev_name設備請求中斷->cpu分配中斷號->設置中斷管理的掩碼->分配中斷信號線->處理中斷函數->完成之後再根據設置情況返回原處理程序處繼續處理程序。
註銷中斷;

Void free_irq(unsigned int irq, void *dev_id);
釋放中斷和中斷信號線


8、中斷和輪詢哪個效率高?怎樣決定是採用中斷方式還是採用輪詢方式去實現驅動?
答:中斷是CPU處於被中狀態下來接受設備的信號,而輪詢是CPU主動去查詢該設備是否有請求。凡事都是兩面性,所以,看效率不能簡單的說那個效率高。如果是請求設備是一個頻繁請求cpu的設備,或者有大量數據請求的網絡設備,那麼輪詢的效率是比中斷高。如果是一般設備,並且該設備請求cpu的頻率比較底,則用中斷效率要高一些。


9、下圖是CS8900的內部芯片結構:




簡單描述在這個圖中802.3 MAC Engine, Encoder/Decoder, 10Base-T RX/RX filter & Receiver/ Transmitter 這三個部件的主要功能。
答:802.3 MAC Engine:以太網廣播地址控制器,他控制所有以太網發送和接受的數據,其中包括,衝突檢測、線路監聽、報頭,和冗餘校驗等
Encoder/Decoder:譯碼解碼器。封裝/拆卸報頭或者協議頭。
10Base-T RX/RX filter & Receiver/ Transmitter:數據發送/接收緩衝池。當數據寫入發送緩衝池時,在線路暢通的情況下會發送出去。
10、簡單描述在cs8900的驅動設計中, 發送數據frame和接收數據frame的過程。
答:1)發送流程如下:
(1) 網絡設備驅動程序從上層協議傳遞過來的sk_buff參數獲得數據包的有效數據和長度,將有效數據放入臨時緩衝區。
(2) 對於以太網,如果有效數據的長度小於以太網衝突檢測所要求的數據楨的最小長度,則給臨時緩衝區的末尾填充0
(3) 設置硬件寄存器,驅使網絡設備進行數據發送操作。
2)接收流程
   網絡設備接收數據主要是由中斷引發設備的中斷處理函數,中斷處理函數判斷中斷類型,如果爲接收中斷,則讀取接受到的數據,分配sk_buff數據結構和數據緩衝區,將接收到的數據複製到數據緩衝區,並調用netif_rx()函數將sk_buff傳遞給上層協議。

11、Cs8900.c的驅動中,發送數據frame的過程爲什麼需要關中斷?接收數據frame的過程爲什麼不需要關中斷?
答:在發送過程中是不能被打斷的,在發送的過程中,不關中斷,這時候如果有一箇中斷到來,那麼cpu有可能會去相應該中斷,如果該中斷需要改寫的數據是發送數據的緩衝區,那麼緩衝區將被改寫,這樣即使cpu相應完畢該中斷,再發送數據,接收方也不認識該數據不能接收。
  在接收數據的時候,需要打開中斷,是因爲要及時的相應接收到的數據。如果關閉該中斷,那麼接收方有可能因爲相應優先級高的中斷而接收不到該數據。
12、簡單描述skbuff這個數據結構在網絡結構中所起到的作用,爲什麼需要一個skbuff,它的分配和釋放主要都在什麼部位
答:sk_buff結構非常重要,它的含義爲“套接字緩衝區”,用於在linux網絡子系統中的蓋層之間傳遞數據。
當發送數據包時,linux內核的網絡處理模塊必須建立一個包含要傳輸的數據包的sk_buff,然後將sk_buff遞交給下層,各層在sk_buff中添加不同的協議頭直至交給網絡設備發送。同樣的,當網絡設備從網絡媒介上接受到數據包後,它必須將接受到的數據轉換爲sk_buff數據結構並傳遞給上層,蓋層不拋去相應的協議頭直至交給用戶。
分配sk_buff在接受一開始就應該分配,在發送完畢數據之後可以釋放sk_buff
上機題:
1、用中斷方式實現一個串口的字符設備驅動程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章