天天看點

幾道簡單的Linux驅動相關面試題,你看你會幾題?

一、Linux基礎

1、任意3種網絡操作的Linux指令,并說明他們的含義

1. ifconfig 指令

ifconfig 用于檢視和配置 Linux 系統的網絡接口。
檢視所有網絡接口及其狀态:ifconfig -a 。
使用 up 和 down 指令啟動或停止某個接口:ifconfig eth0 up 和 ifconfig eth0 down 。      

2. iptables 指令

iptables ,是一個配置 Linux 核心防火牆的指令行工具。功能非常強大,對于我們開發來說,主要掌握如何開放端口即可。

3. netstat 指令

Linux netstat指令用于顯示網絡狀态。

利用netstat指令可讓你得知整個Linux系統的網絡情況。

4. ping 指令

Linux ping指令用于檢測主機。

執行ping指令會使用ICMP傳輸協定,發出要求回應的資訊,若遠端主機的網絡功能沒有問題,就會回應該資訊,因而得知該主機運作正常。

5. telnet 指令

Linux telnet指令用于遠端登入。

執行telnet指令開啟終端機階段作業,并登入遠端主機。

2、Linux支援的檔案類型

  • 普通檔案類型 -
  • 目錄檔案類型 d
  • 塊裝置檔案類型 b
  • 字元裝置類型 c
  • 套接字檔案類型 s
  • FIFO管道檔案類型 p
  • 連結檔案類型 l

二、Linux系統程式設計

1、 嵌入式作業系統程序間有哪些同步通信服務?

Linux程序間通信方式主要有

  1. 信号(signal)
  2. 信号量
  3. 管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
  4. 消息隊列
  5. 共享記憶體
  6. 套接字(本地的還有域套接字)

三、ARM

1. 請問ARM支援哪幾種異常類型?

異常源分類

要進入異常模式,一定要有異常源,ARM規定有7種異常源:

異常源 描述
Reset 上電時執行
Undef 當流水線中的某個非法指令到達執行狀态時執行
SWI 當一個軟中斷指令被執行完的時候執行
Prefetch 當一個指令被從記憶體中預取時,由于某種原因而失敗,如果它能到達執行狀态這個異常才會産生
Data 如果一個預取指令試圖存取一個非法的記憶體單元,這時異常産生
IRQ 通常的中斷
FIQ 快速中斷

2、請簡述什麼是中斷?中斷發生後,CPU做了哪些操作

中斷:是指CPU在執行程式的過程中,出現了某些突發事件時CPU必須暫停執行目前的程式,轉去處理突發事件,處理完畢後CPU又傳回源程式被中斷的位置并繼續執行。

中斷發生後,ARM核的操作步驟可以總結為4大步3小步。

4大步3小步

  1. 儲存執行狀态:将CPSR複制到發生的異常模式下SPSR中;
  2. 模式切換:
  • CPSR模式位強制設定為與異常類型相對應的值,
  • 處理器進入到ARM執行模式,
  • 禁止所有IRQ中斷,當進入FIQ快速中斷模式時禁止FIQ中斷;
  1. 儲存傳回位址:将下一條指令的位址(被打斷程式)儲存在LR(異常模式下LR_excep)中。
  2. 跳入異常向量表:強制設定PC的值為相應異常向量位址,跳轉到異常處理程式中。

3、什麼是GPIO?

general purpose input/output      

GPIO是相對于晶片本身而言的,如某個管腳是晶片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當然某個腳具有複用的功能,即可做GPIO也可做其他用途。

也就是說你可以把這些引腳拿來用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來控制它的亮滅,也可以用一根(一些)引腳連到一個傳感器上以獲得該傳感器的狀态,這給cpu提供了一個友善的控制周邊裝置的途經。如果沒有足夠多的gpio管腳,在控制一些外圍裝置時就會力有不逮,這時可采取的方案是使用CPLD來幫助管理。

4、IIC引腳名稱及功能?

  • SDA

    資料線,用于傳輸資料

  • SCL

    時鐘線,用于同步資料

5、IIC的S、P信号如何發出?

幾道簡單的Linux驅動相關面試題,你看你會幾題?

每次通信都必須由主裝置發起,當主裝置決定開始通訊時,需要發送開始(S)信号,需要執行以下動作;

  1. 空閑時SCL預設是高電平;
  2. 将SDA線從高壓電平切換到低壓電平;
  3. 然後将SCL從高電平切換到低電平。

    在主裝置發送開始條件信号之後,所有從機即使處于睡眠模式也将變為活動狀态,并等待接收位址位。

    當雙方決定結束通訊時,需要發送停止(P)信号,需要執行以下動作;

  4. 先将SDA、SCL設定為低電平;
  5. 然後将SCL從低電平切換到高電平;
  6. 将SDA從低電平切換到高電平。

    在停止條件信号之後,I2C總線即處于空閑狀态。

6、SPI引腳名稱及功能?

串行時鐘線(SCK)、

主機輸入/從機輸出資料線MISO、

主機輸出/從機輸入資料線MOSI

從機選擇線SS

(有的SPI接口晶片帶有中斷信号線INT或INT、有的SPI接口晶片沒有主機輸出/從機輸入資料線MOSI)

幾道簡單的Linux驅動相關面試題,你看你會幾題?

四、驅動

1、檢視驅動子產品中列印資訊應該使用什麼指令?如何檢視核心中已有的字元裝置的資訊?如何檢視正在使用的有哪些中斷号?

  1. 檢視驅動子產品中列印資訊的指令:
dmesg      
  1. 檢視加載子產品資訊可以用
lsmod      

已經配置設定的字元裝置塊裝置号資訊可以檢視下面檔案

cat /proc/devices      

核心會為每一個驅動子產品建立一個檔案夾,如下:

ls /sys/module/      
  1. 顯示目前使用的中斷号
cat /proc/interrupts      

2、如何手動建立字元裝置?并簡述主裝置号和次裝置号的用途。

建立字元裝置指令如下:

mknod chartest c 4 64,

mknod : 建立裝置節點
chartest :裝置節點名字
c : 字元裝置,
4 : 主裝置号
64: 次裝置号      

1)主裝置号:主裝置号辨別裝置對應的驅動程式。雖然現代的linux核心允許多個驅動程式共享主裝置号,但我們看待的大多數裝置仍然按照“一個主裝置對應一個驅動程式”的原則組織。

次裝置号:次裝置号由核心使用,用于正确确定裝置檔案所指的裝置。依賴于驅動程式的編寫方式,我們可以通過次裝置号獲得一個指向核心裝置的直接指針,也可将此裝置号當作裝置本地數組的索引。

比如:

硬體平台可能又4個序列槽,他們驅動非常類似,差別僅僅是個字對應的SFR基位址不同,
 那麼我們可以讓着幾個序列槽共用同一個序列槽裝置驅動
 通過次裝置号來差別具體是哪一個序列槽      

3、核心中使用共享資源時,為了使之滿足互斥條件,通常有哪些方法?

4、Linux核心包括那幾個子系統?

繼續閱讀