linux驅動面試常見題目

http://blog.csdn.net/rensanshi/article/details/9566283

1. linux內核裏面,內存申請有哪幾個函數,各自的區別?

Kmalloc()   __get_free_page()  mempool_create()  

 

2. IRQFIQ有什麼區別,在CPU裏面是是怎麼做的?

 

 

3. 

int *a;

char *b;

和 b本身是什麼類型?

ab裏面本身存放的只是一個地址,難道是這兩個地址有不同麼?

 

 

4. 中斷的上半部分和下半部分的問題:

講下分成上半部分和下半部分的原因,爲何要分?講下如何實現?

上半部分執行與硬件相關的處理要求快, 而有些驅動在中斷處理程序中又需要完成大量工作,這構成矛盾,所以Linux有所謂的bottom half機制,中斷處理程序中所有不要求立即完成的,在開中斷的環境下,由底半程序隨後完成.

Linux的底半處理實際上是建立在內核的軟中斷機制上的.

Linux 的底半 機制主要有Tasklet 和 work queue 以及 softirq ( 2.4內核則有BH , Task queue , softirq , tasklet 沒有work queue),其實底半可以理解成一種工作的延遲。所以實際使用時跟timer機制基本上一個意思。

 

5. 內核函數mmap的實現原理,機制?

mmap函數實現把一個文件映射到一個內存區域,從而我們可以像讀寫內存一樣讀寫文件,他比單純調用read/write也要快上許多。在某些時候我們可以把內存的內容拷貝到一個文件中實現內存備份,當然,也可以把文件的內容映射到內存來恢復某些服務。另外,mmap實現共享內存也是其主要應用之一,mmap系統調用使得進程之間通過映射同一個普通文件實現共享內存。

 

6. 驅動裏面爲什麼要有併發、互斥的控制?如何實現?講個例子?

 

7. spinlock自旋鎖是如何實現的?

自旋鎖在同一時刻只能被最多一個內核任務持有,所以一個時刻只有一個線程允許存在於臨界區中。這點可以應用在多處理機器、或運行在單處理器上的搶佔式內核中需要的鎖定服務。

  二、信號量簡介

  這裏也介紹下信號量的概念,因爲它的用法和自旋鎖有相似的地方。

  LinuxLinux

  Linux是一套免費使用和自由傳播的操作系統,它主要用於基於Intel系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程序員設計和實現的,其目的是建立不受任何商品化軟件的版權制約的、全世界都能自由使用的Unix兼容產品。

中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然後讓其睡眠。這時處理器獲得自由去執行其它代碼。當持有信號量的進程將信號量釋放後,在等待隊列中的一個任務將被喚醒,從而便可以獲得這個信號量。

 

8. 任務調度的機制?

 

【二、本人碰到】

1. 嵌入式linuxwince操作系統的特點和特性?

 

2. 嵌入式linuxtty設備驅動的體系結構?

 

3. 嵌入式設備,爲加快啓動速度,可以做哪些方面的優化?

 

4. USB設備的枚舉過程?

(1) Get Device Descriptor。主機的第一個命令要求得到設備描述符,此SETUP 包爲個字節數據(8006000100004000),發向地址0,端口0“40”表示返回數據長度最大爲40H 個字節。實際上,只返回一個包,即數組DEV_DESC[ ]中的前個字節,用於說明設備的描述符的真實長度和設備的類型。

(2) Set Address。接着是設置設備地址處理事件,主機發送一個含有指定地址的數據包(0005020000000000),在主機只有一個USB 設備的時候,這個地址一般會是2,最大地址127USB 協議中可以連接127 個設備。設置地址事件處理結束後,設備進入地址狀態,主機以後會在新的指定地址處訪問設備。

(3) Get Device Descriptor。主機再次發送請求得到設備描述符的數據包(8006000100001200),與上次不同的是,要求的數據的長度是實際的數據長度,同時是發送到Set Address命令所設置的地址。

(4) 讀取全部Configuration Descriptor。接着主機要求得到設備全部的配置描述符、接口描述符和節點描述符(8006000200004000),由於主機不知道設備描述符的真實長度,因此它要求得到64個字節。

(5) Set Interface,主機發送數據包(010B000000000000),設置接口值爲0

(6) Set Conifguration,確定USB設備工作在哪一個配置下。對於U盤設備來說,一般只有1個配置值,其值爲01。主機發送數據包(0009010000000000)。

(7) 如果以上步驟都正確,主機將找到新設備,並且配置成功,該設備可以正常使用,可以進行後續的U盤枚舉過程了。

(8) busHound觀察計算機對於U盤的枚舉過程,發現上述步驟後還有一個GetMaxLun的操作,但是實際上對於U盤來說忽略該步驟也沒有問題。

 

5. PSRAMSDRAMDDRDDR2的時序特性?

 

6. I2C觸摸屏芯片與CPU的數據傳輸流程?畫出相關圖例?(這題目記得不是太清楚了,大概是考查I2C設備驅動的數據傳輸過程)


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