一、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程序間通信方式主要有
- 信号(signal)
- 信号量
- 管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 消息隊列
- 共享記憶體
- 套接字(本地的還有域套接字)
三、ARM
1. 請問ARM支援哪幾種異常類型?
異常源分類
要進入異常模式,一定要有異常源,ARM規定有7種異常源:
異常源 | 描述 |
Reset | 上電時執行 |
Undef | 當流水線中的某個非法指令到達執行狀态時執行 |
SWI | 當一個軟中斷指令被執行完的時候執行 |
Prefetch | 當一個指令被從記憶體中預取時,由于某種原因而失敗,如果它能到達執行狀态這個異常才會産生 |
Data | 如果一個預取指令試圖存取一個非法的記憶體單元,這時異常産生 |
IRQ | 通常的中斷 |
FIQ | 快速中斷 |
2、請簡述什麼是中斷?中斷發生後,CPU做了哪些操作
中斷:是指CPU在執行程式的過程中,出現了某些突發事件時CPU必須暫停執行目前的程式,轉去處理突發事件,處理完畢後CPU又傳回源程式被中斷的位置并繼續執行。
中斷發生後,ARM核的操作步驟可以總結為4大步3小步。
4大步3小步
- 儲存執行狀态:将CPSR複制到發生的異常模式下SPSR中;
- 模式切換:
- CPSR模式位強制設定為與異常類型相對應的值,
- 處理器進入到ARM執行模式,
- 禁止所有IRQ中斷,當進入FIQ快速中斷模式時禁止FIQ中斷;
- 儲存傳回位址:将下一條指令的位址(被打斷程式)儲存在LR(異常模式下LR_excep)中。
- 跳入異常向量表:強制設定PC的值為相應異常向量位址,跳轉到異常處理程式中。
3、什麼是GPIO?
general purpose input/output
GPIO是相對于晶片本身而言的,如某個管腳是晶片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當然某個腳具有複用的功能,即可做GPIO也可做其他用途。
也就是說你可以把這些引腳拿來用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來控制它的亮滅,也可以用一根(一些)引腳連到一個傳感器上以獲得該傳感器的狀态,這給cpu提供了一個友善的控制周邊裝置的途經。如果沒有足夠多的gpio管腳,在控制一些外圍裝置時就會力有不逮,這時可采取的方案是使用CPLD來幫助管理。
4、IIC引腳名稱及功能?
-
SDA
資料線,用于傳輸資料
-
SCL
時鐘線,用于同步資料
5、IIC的S、P信号如何發出?
每次通信都必須由主裝置發起,當主裝置決定開始通訊時,需要發送開始(S)信号,需要執行以下動作;
- 空閑時SCL預設是高電平;
- 将SDA線從高壓電平切換到低壓電平;
-
然後将SCL從高電平切換到低電平。
在主裝置發送開始條件信号之後,所有從機即使處于睡眠模式也将變為活動狀态,并等待接收位址位。
當雙方決定結束通訊時,需要發送停止(P)信号,需要執行以下動作;
- 先将SDA、SCL設定為低電平;
- 然後将SCL從低電平切換到高電平;
-
将SDA從低電平切換到高電平。
在停止條件信号之後,I2C總線即處于空閑狀态。
6、SPI引腳名稱及功能?
串行時鐘線(SCK)、
主機輸入/從機輸出資料線MISO、
主機輸出/從機輸入資料線MOSI
從機選擇線SS
(有的SPI接口晶片帶有中斷信号線INT或INT、有的SPI接口晶片沒有主機輸出/從機輸入資料線MOSI)
四、驅動
1、檢視驅動子產品中列印資訊應該使用什麼指令?如何檢視核心中已有的字元裝置的資訊?如何檢視正在使用的有哪些中斷号?
- 檢視驅動子產品中列印資訊的指令:
dmesg
- 檢視加載子產品資訊可以用
lsmod
已經配置設定的字元裝置塊裝置号資訊可以檢視下面檔案
cat /proc/devices
核心會為每一個驅動子產品建立一個檔案夾,如下:
ls /sys/module/
- 顯示目前使用的中斷号
cat /proc/interrupts
2、如何手動建立字元裝置?并簡述主裝置号和次裝置号的用途。
建立字元裝置指令如下:
mknod chartest c 4 64,
mknod : 建立裝置節點
chartest :裝置節點名字
c : 字元裝置,
4 : 主裝置号
64: 次裝置号
1)主裝置号:主裝置号辨別裝置對應的驅動程式。雖然現代的linux核心允許多個驅動程式共享主裝置号,但我們看待的大多數裝置仍然按照“一個主裝置對應一個驅動程式”的原則組織。
次裝置号:次裝置号由核心使用,用于正确确定裝置檔案所指的裝置。依賴于驅動程式的編寫方式,我們可以通過次裝置号獲得一個指向核心裝置的直接指針,也可将此裝置号當作裝置本地數組的索引。
比如:
硬體平台可能又4個序列槽,他們驅動非常類似,差別僅僅是個字對應的SFR基位址不同,
那麼我們可以讓着幾個序列槽共用同一個序列槽裝置驅動
通過次裝置号來差別具體是哪一個序列槽