Linux驅動面試的幾個問題

2021-06-26 08:00:42 字數 1553 閱讀 7617

1、字元型驅動裝置你是怎麼建立裝置檔案的,就是/dev/下面的裝置檔案,供上層應用程式開啟使用的檔案?

答:mknod命令結合裝置的主裝置號和次裝置號,可建立乙個裝置檔案。

評:這只是其中一種方式,也叫手動建立裝置檔案。還有udev/mdev自動建立裝置檔案的方式,udev/mdev是執行在使用者態的程式,可以動態管理裝置檔案,包括建立和刪除裝置檔案,執行在使用者態意味著系統要執行之後。那麼在系統啟動期間還有devfs建立了裝置檔案。一共有三種方式可以建立裝置檔案。

2、寫乙個中斷服務需要注意哪些?如果中斷產生之後要做比較多的事情你是怎麼做的?

答:中斷處理例程應該盡量短,把能放在後半段(tasklet,等待佇列等)的任務盡量放在後半段。

評:寫乙個中斷服務程式要注意快進快出,在中斷服務程式裡面盡量快速採集資訊,包括硬體資訊,然後推出中斷,要做其它事情可以使用工作佇列或者tasklet方式。也就是中斷上半部和下半部。

第二:中斷服務程式中不能有阻塞操作。為什麼?大家可以討論。      

第三:中斷服務程式注意返回值,要用作業系統定義的巨集做為返回值,而不是自己定義的ok,fail之類的。

3、自旋鎖和訊號量在互斥使用時需要注意哪些?在中斷服務程式裡面的互斥是使用自旋鎖還是訊號量?還是兩者都能用?為什麼?

答:使用自旋鎖的程序不能睡眠,使用訊號量的程序可以睡眠。中斷服務例程中的互斥使用的是自旋鎖,原因是在中斷處理例程中,硬中斷是關閉的,這樣會丟失可能到來的中斷。

評:回答的還可以。

4、原子操作你怎麼理解?為了實現乙個互斥,自己定義乙個變數作為標記來作為乙個資源只有乙個使用者行不行?

答:原子操作指的是無法被打斷的操作。我沒懂第二句是什麼意思,自己定義乙個變數怎麼可能標記資源的使用情況?其他程序又看不見這個變數

評:第二句話的意思是:

定義乙個變數,比如 int flag =0;

if(flag == 0)

這樣可否?

5、insmod 乙個驅動模組,會執行模組中的哪個函式?rmmod呢?這兩個函式在設計上要注意哪些?遇到過解除安裝驅動出現異常沒?是什麼問題引起的?

答:insmod呼叫init函式,rmmod呼叫exit函式。這兩個函式在設計時要注意什麼?解除安裝模組時曾出現解除安裝失敗的情形,原因是存在程序正在使用模組,檢查**後發現產生了死鎖的問題。

評:要注意在init函式中申請的資源在exit函式中要釋放,包括儲存,ioremap,定時器,工作佇列等等。也就是乙個模組註冊進核心,退出核心時要清理所帶來的影響,帶走一切不留下一點痕跡。

6、在驅動除錯過程中遇到過oops沒?你是怎麼處理的?

沒有。。

評:其他人可以接著說。

7、ioctl和unlock_ioctl有什麼區別?

沒用過unlock_ioctl。。

評:其他人可以接著說。

8、驅動中操作物理絕對位址為什麼要先ioremap?

答:因為核心沒有辦法直接訪問物理記憶體位址,必須先通過ioremap獲得對應的虛擬位址。

評:其他人可以接著說。

9、裝置驅動模型三個重要成員是?platfoem匯流排的匹配規則是?在具體應用上要不要先註冊驅動再註冊裝置?有先後順序沒?

這個真不知道。。

Linux中的幾個問題

明天期末考試,就把往年試卷上的敘述題總結一下 1.如果乙個設定使用者id程式未執行任何改變程序的實際使用者id和有效使用者id的系統呼叫,那麼執行該程式的程序,它的實際使用者id和有效使用者id各是什麼?答 實際使用者id在登入時取自口令檔案中的登入項,如果沒有執行任何改變實際使用者id和有效使用者...

幾個問題的

1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value 解 無符號整型為32位,所以利用迴圈32次,逐個判斷二進位制每一位是不是1 int count one bits unsig...

面試外企常被問到的幾個問題

面試外企常被問到的幾個問題請介紹一下你自己。這是外企常問的問題。一般人回答這個問題過於平常,只說姓名 年齡 愛好 工作經驗,這些在簡歷上都有,其實,外企最希望知道的是求職者能否勝任工作,包括 最強的技能 最深入研究的知識領域 個性中最積極的部分 做過的最成功的事,主要的成就等,這些都可以和學習無關,...