完整word版linux面試題及答案推薦文檔_第1頁
完整word版linux面試題及答案推薦文檔_第2頁
完整word版linux面試題及答案推薦文檔_第3頁
完整word版linux面試題及答案推薦文檔_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1. 如何編寫一個(gè) LINUX 驅(qū)動?2. Linux 設(shè)備中字符設(shè)備與塊設(shè)備有什么主要的區(qū)別?請分別列舉一些實(shí)際的設(shè)備說出 它們是屬于哪一類設(shè)備。字符設(shè)備: 字符設(shè)備是個(gè)能夠像字節(jié)流(類似文件)一樣被訪問的設(shè)備,由字符設(shè)備驅(qū) 動程序來實(shí)現(xiàn)這種特性。 字符設(shè)備驅(qū)動程序通常至少實(shí)現(xiàn) open,close,read 和 write 系統(tǒng)調(diào) 用。字符終端、串口、鼠標(biāo)、鍵盤、攝像頭、聲卡和顯卡等就是典型的字符設(shè)備。塊設(shè)備:和字符設(shè)備類似,塊設(shè)備也是通過 /dev 目錄下的文件系統(tǒng)節(jié)點(diǎn)來訪問。塊設(shè) 備上能夠容納文件系統(tǒng),如:u盤,SD卡,磁盤等。也就是內(nèi)核及驅(qū)動程序之間的字符設(shè)備和塊設(shè)備的區(qū)別僅僅在于內(nèi)

2、核內(nèi)部管理數(shù)據(jù)的方式, 軟件接口,而這些不同對用戶來講是透明的。3. 查看驅(qū)動模塊中打印信息應(yīng)該使用什么命令?如何查看內(nèi)核中已有的字符設(shè)備的信 息?如何查看正在使用的有哪些中斷號?1) 查看驅(qū)動模塊中打印信息的命令: dmesg2) 查看字符設(shè)備信息可以用 lsmod 和 modprobe , lsmod 可以查看模塊的依賴關(guān)系, modprobe 在加載模塊時(shí)會加載其他依賴的模塊。3) 顯示當(dāng)前使用的中斷號cat /proc/interrupt4. 請簡述主設(shè)備號和次設(shè)備號的用途。如果執(zhí)行 mknod chartest c 4 64 ,創(chuàng)建 chartest使用的是那一類設(shè)備驅(qū)動程序。1)

3、主設(shè)備號:主設(shè)備號標(biāo)識設(shè)備對應(yīng)的驅(qū)動程序。雖然現(xiàn)代的linux 內(nèi)核允許多個(gè)驅(qū)動程 序共享主設(shè)備號, 但我們看待的大多數(shù)設(shè)備仍然按照 “一個(gè)主設(shè)備對應(yīng)一個(gè)驅(qū)動程序” 則組織。次設(shè)備號: 次設(shè)備號由內(nèi)核使用, 用于正確確定設(shè)備文件所指的設(shè)備。 寫方式, 我們可以通過次設(shè)備號獲得一個(gè)指向內(nèi)核設(shè)備的直接指針, 備本地?cái)?shù)組的索引。2) chartest 由驅(qū)動程序 4 管理,該文件所指的設(shè)備是 64 號設(shè)備。 或者字符設(shè)備終端)。的原依賴于驅(qū)動程序的編 也可將此設(shè)備號當(dāng)作設(shè)感覺類似于串口終端5. 設(shè)備驅(qū)動程序中如何注冊一個(gè)字符設(shè)備?分別解釋一下它的幾個(gè)參數(shù)的含義。注冊一個(gè)字符設(shè)備驅(qū)動有兩種方法:1 )

4、 void cdev_init(struct cdev *cdev, struct file_operations *fops)該注冊函數(shù)可以將 cdev 結(jié)構(gòu)嵌入到自己的設(shè)備特定的結(jié)構(gòu)中。 cdev 是一個(gè)指向結(jié)構(gòu)體 cdev 的指針,而 fops 是指向一個(gè)類似于 file_operations 結(jié)構(gòu)(可以是 file_operations 結(jié)構(gòu),但不限于該結(jié)構(gòu))的指針 .2) int register_chrdev(unsigned int major, const char *namem , struct file)operations *fopen);該注冊函數(shù)是早期的注冊函數(shù),ma

5、jor是設(shè)備的主設(shè)備號,name是驅(qū)動程序的名稱,而fops 是默認(rèn)的 file_operations 結(jié)構(gòu)(這是只限 于 file_operations 結(jié)構(gòu))。6. 請簡述中斷于 DMA的區(qū)別。Linux設(shè)備驅(qū)動程序中,使用哪個(gè)函數(shù)注冊和注銷中斷處理程序?1) MDA不需CPU參與而中斷是需要 CPU參與的。2) 中斷注冊函數(shù)和中斷注銷函數(shù) 注冊中斷:int request_irq(unsigned int irq, irqreturn_t (*handler) (int, void *, structpt_regs *), unsigned long flags, const char

6、*dev_name, void *dev_id); 注銷中斷;Void free_irq(unsigned int irq, void *dev_id); 釋放中斷和中斷信號線中斷和輪詢哪個(gè)效率高?怎樣決定是采用中斷方式還是采用輪詢方式去實(shí)現(xiàn)驅(qū)動?7.中斷是CPU處于被中狀態(tài)下來接受設(shè)備的信號,而輪詢是CPU主動去查詢該設(shè)備是 否有請求。 如果是請求設(shè)備是一個(gè)頻繁請求 cpu 的設(shè)備, 或者有大量數(shù)據(jù)請求的網(wǎng)絡(luò)設(shè) 備,那么輪詢的效率是比中斷高。 如果是一般設(shè)備, 并且該設(shè)備請求 cpu 的頻率比較底, 則用中斷效率要高一些。8.驅(qū)動中操作物理絕對地址為什么要先 ioremap?因?yàn)閮?nèi)核沒有辦法

7、直接訪問物理內(nèi)存地址,必須先通過ioremap 獲得對應(yīng)的虛擬地址。9.設(shè)備驅(qū)動模型三個(gè)重要成員是? platfoem 總線的匹配規(guī)則是?在具體應(yīng)用上要不要先注冊驅(qū)動再注冊設(shè)備?有先后順序沒?Linux 設(shè)備模型中三個(gè)很重要的概念就是總線, 設(shè)備 , 驅(qū)動 . 即 bus,device,driver 。platform 總線是內(nèi)核注冊好的用于管理設(shè)備及驅(qū)動的一種模式??偩€實(shí)現(xiàn)好了匹配規(guī)則,內(nèi)核對于往 platform 總線上注冊的設(shè)備及驅(qū)動對應(yīng)的類型做了抽象。10. insmod 一個(gè)驅(qū)動模塊,會執(zhí)行模塊中的哪個(gè)函數(shù)?rmmod 呢?這兩個(gè)函數(shù)在設(shè)計(jì)上要注意哪些?遇到過卸載驅(qū)動出現(xiàn)異常沒?是什

8、么問題引起的?in smod調(diào)用in it 函數(shù),rmmod調(diào)用exit函數(shù)。注意在 init 函數(shù)中申請的資源在 exit 函數(shù)中要釋放,包括存儲, ioremap ,定時(shí)器,工作隊(duì)列等等。 也就是一個(gè)模塊注冊進(jìn)內(nèi)核, 退出內(nèi)核時(shí)要清理所帶來的影響, 帶走一切不留下一點(diǎn)痕跡。卸載模塊時(shí)曾出現(xiàn)卸載失敗的情形, 原因是存在進(jìn)程正在使用模塊, 檢查代碼后發(fā)現(xiàn)產(chǎn)生了死鎖的問題。11. 原子操作你怎么理解?為了實(shí)現(xiàn)一個(gè)互斥, 自己定義一個(gè)變量作為標(biāo)記來作為一個(gè)資源只有一個(gè)使用者行不行?所謂原子操作,就是該操作絕不會在執(zhí)行完畢前被任何其他任務(wù)或事件打斷,也就說,它的最小的執(zhí)行單位,不可能有比它更小的執(zhí)行

9、單位。定義一個(gè)變量,比如 int flag =0;if(flag = 0)flag = 1;操作臨界區(qū);flag = 0;這樣應(yīng)該不能起到互斥的作用。因?yàn)榱硗庖粋€(gè)進(jìn)程根本沒有flag 這個(gè)變量,自然不用檢查就能進(jìn)入臨界區(qū)。充當(dāng)互斥的變量應(yīng)該是訪問進(jìn)程都可見的12. 自旋鎖和信號量在互斥使用時(shí)需要注意哪些?在中斷服務(wù)程序里面的互斥是使用自旋 鎖還是信號量?還是兩者都能用?為什么?使用自旋鎖的進(jìn)程不能睡眠, 使用信號量的進(jìn)程可以睡眠。 中斷服務(wù)例程中的互斥使用 的是自旋鎖,原因是在中斷處理例程中,硬中斷是關(guān)閉的,這樣會丟失可能到來的中斷。13. 寫一個(gè)中斷服務(wù)需要注意哪些?如果中斷產(chǎn)生之后要做比較

10、多的事情你是怎么做的?一、中斷服務(wù)程序要注意快進(jìn)快出, 在中斷服務(wù)程序里面盡量快速采集信息, 包括硬件 信息, 然后推出中斷, 要做其它事情可以使用工作隊(duì)列或者 tasklet 方式。 也就是中斷上半 部和下半部。第二:中斷服務(wù)程序中不能有阻塞操作。第三: 中斷服務(wù)程序注意返回值, 要用操作系統(tǒng)定義的宏做為返回值, 而不是自己定義 的 OK, FAIL 之類的。14. 字符型驅(qū)動設(shè)備你是怎么創(chuàng)建設(shè)備文件的,就是 /dev/ 下面的設(shè)備文件,供上層應(yīng)用程 序打開使用的文件?mknod命令結(jié)合設(shè)備的主設(shè)備號和次設(shè)備號,可創(chuàng)建一個(gè)設(shè)備文件。15. linux 中內(nèi)核空間及用戶空間的區(qū)別?用戶空間與內(nèi)

11、核通信方式有哪些?內(nèi)核空間中存放的是內(nèi)核代碼和數(shù)據(jù), 而進(jìn)程的用戶空間中存放的是用戶程的代碼和數(shù) 據(jù)。link7. 信號:從內(nèi)1. 使用 API .2. 使用 proc 文件系統(tǒng) 3. 使用 sysfs 文件系統(tǒng) +kobject 5.文件.6.使用mmap系統(tǒng)調(diào)用:可以將內(nèi)核空間的地址映射到用戶空間。核空間向進(jìn)程發(fā)送信號。高端內(nèi)用戶空間從16. linux 中內(nèi)存劃分及如何使用?虛擬地址及物理地址的概念及彼此之間的轉(zhuǎn)化, 存概念? 4G 的進(jìn)程地址空間被人為的分為兩個(gè)部分用戶空間與內(nèi)核空間。0到3G( OxCOOOOOOO),內(nèi)核空間占據(jù) 3G到4G用戶進(jìn)程通常情況下只能訪問用戶空間的 虛擬

12、地址, 不能訪問內(nèi)核空間虛擬地址。 只有用戶進(jìn)程進(jìn)行系統(tǒng)調(diào)用 (代表用戶進(jìn)程在內(nèi)核 態(tài)執(zhí)行)等時(shí)刻可以訪問到內(nèi)核空間。(physical虛擬地址 ,即邏輯地址,是指由程序產(chǎn)生的與段相關(guān)的偏移地址部分。物理地址 address): 放在尋址總線上的地址。地址空間大于1G的內(nèi)存區(qū)域稱之為高端內(nèi)存17. linux 中中斷的實(shí)現(xiàn)機(jī)制, tasklet 與 workqueue 的區(qū)別及底層實(shí)現(xiàn)區(qū)別?為什么要區(qū) 分上半部和下半部?內(nèi)核把中斷處理分為兩部分:上半部(top half)和下半部(bottomhalf),上半 部(就是中斷服務(wù)程序)內(nèi)核立即執(zhí)行,而下半部(就是一些內(nèi)核函數(shù))留著稍 后處理。下半

13、部運(yùn)行時(shí)是允許中斷請求的, 而上半部運(yùn)行時(shí)是關(guān)中斷的, 這是二 者之間的主要區(qū)別。18. linux 中斷的響應(yīng)執(zhí)行流程?中斷的申請及何時(shí)執(zhí)行(何時(shí)執(zhí)行中斷處理函數(shù) )?19. linux 中的同步機(jī)制? spinlock 與信號量的區(qū)別?Linux 中的同步機(jī)制 (一)-Futex Futex 是一種用戶態(tài)和內(nèi)核態(tài)混合機(jī)制,所 以需要兩個(gè)部分合作完成, linux 上提供了 sys_futex 系統(tǒng)調(diào)用,對進(jìn)程競爭情況下的同步處理提供支持。Linux中的線程同步機(jī)制(二)-ln Glibc在linux中進(jìn)行多線程開發(fā),同步是不可回避的一個(gè)問題。在POSIX標(biāo)準(zhǔn)中定義了三種線程同步機(jī)制:Mut

14、exes(互斥量), Condition Variables(條件變量)和 POSIX Semaphores信號量)。Linux中的線程同步機(jī)制(三)-Practice自旋鎖(spin lock)是一個(gè)典型的對臨界資源的互斥手段,Linux中的信號量是 一種睡眠鎖。自旋鎖不會引起調(diào)用者睡眠,如果自旋鎖已經(jīng)被別的執(zhí)行單元保持, 調(diào)用者就一直循環(huán)查看是否該自旋鎖的保持者已經(jīng)釋放了鎖,自旋就是在原地打轉(zhuǎn)。而信號量則引起調(diào)用者睡眠,它把進(jìn)程從運(yùn)行隊(duì)列上拖出去,除非獲 得鎖。20. linux系統(tǒng)實(shí)現(xiàn)原子操作有哪些方法?方法1:直接點(diǎn)擊 wmware的關(guān)機(jī)按鈕方法2:進(jìn)入操作界面點(diǎn)擊關(guān)機(jī)按鈕方法3:打開

15、終端,以root用戶身份執(zhí)行shutdown命令內(nèi)存申請有哪幾個(gè)函數(shù),各自的區(qū)另y?KmallocO_get_free_ page()mempoo l_create()22.關(guān)鍵字 volatile有什么含意 并給出三個(gè)不同的例子。優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值, 器里的備份。下面是 volatile變量的幾個(gè)例子:1).并行設(shè)備的硬件寄存器(如: 狀態(tài)寄存器)2). 一個(gè)中斷服務(wù)子程序中會訪問到的非自動變量3).多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量23. kmalloc 和 vmalloc 的區(qū)別而不是使用保存在寄存(Non-automatic variables)1、2、kmallockmalloc3、4、保證分配的內(nèi)存在物理上是連續(xù)的,vmalloc保證的是在虛擬地址空間上的連

溫馨提示

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

評論

0/150

提交評論