本文為嵌入式課程期末復習,僅供參考,所用課本:嵌入式Linux操作系統(李建祥著)。
第一章
1.1 簡述嵌入式微處理器數據存儲格式的大,小端模式。
大端模式是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中。
小端模式則是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中。
1.2 Cortex-A8 處理器主要由哪 5 部分組成?
(1)處理器核心:負責執行指令和數據處理,支持多種指令集,能夠高效地執行各種計算任務。
(2)內存管理單元(MMU):處理器中負責內存管理的部分,提供了虛擬內存到物理內存的映射功能。通過 MMU,Cortex-A8 可以實現內存保護、地址轉換以及多任務之間的內存隔離。
(3)高速緩存:Cortex-A8 通常配備了一級(L1)和二級(L2)高速緩存,用于存儲處理器經常訪問的數據和指令。可以提高處理器的性能,減少訪問主存的延遲。
(4)浮點單元(FPU):專門用于執行浮點運算的硬件部分,使得處理器在處理復雜數學運算和圖形處理等方面具有出色的性能。
(5)外設接口:用于連接各種外部設備。
1.3 寫出 R 寄存器組中 r13、r14、r15 的名稱和作用。
(1) r13(堆棧指針寄存器SP),用于指向當前堆棧的頂部。
(2) r14(鏈接寄存器LR),用于存儲子程序返回主程序的鏈接地址。當處理器執行調用指令(如BL)時,r14 用于存儲了程序計數器 PC的備份,供子程序的返回主程序。
(3) r15(程序計數器PC),指向當前的程序地址。PC 的值決定了 CPU接下來要執行的指令的地址。在ARM 體系結構中,由于采用了多級流水線技術,PC總是指向當前指令的下兩條指令的地址。
1.4 簡述 Cortex-A8 處理器的 8 種工作模式。
(1) 用戶模式:正常程序執行的模式,大多數應用程序代碼都在此模式下運行。該模式為非特權模式,限制內存的直接訪問和通過物理地址對硬件設備進行讀寫操作。
(2) 系統模式:使用與用戶模式相同的寄存器組,但擁有特權級操作系統任務
的執行能力,允許訪問硬件資源和執行特權操作。
(3) 管理模式:操作系統使用的保護模式,通常系統復位或軟件中斷時進入此模式。
(4) 中斷模式:當低優先級中斷發生時進入此模式,常用于處理普通的外部中斷。
(5) 快速中斷模式:當高優先級中斷發生時進入此模式,用于高速數據傳輸和通道處理。
(6) 數據訪問中止模式:當存取異常(如無效的內存訪問)發生時進入此模式。
(7) 未定義指令中止模式:當執行未定義指令時進入此模式,用于支持硬件協處理器的軟件仿真。
(8) 監控模式:可在安全模式與非安全模式之間進行轉換。
除用戶模式外,其余模式都屬于特權模式,該模式下可以訪問所有的系統資源。
1.5 如何確定系統出于哪種操作模式?
使用mrs命令將cpsr寄存器中的值讀取出來,比較其模式位M[4:0]的值判斷當前所處模式。
1.6 簡述 Cortex-A8 處理器的 CPSR 寄存器各功能位名稱和功能定義
(1) 條件標志位:
N負數或小于標志位:N=1表示運行結果為負數。
Z零標志位:Z=1表示運算結果為零。
C進位/借位標志位:加法運算中,若結果產生了進位,C=1,減法運算中,若發生借位,C=0。
V溢出標志位:V=1,表示兩個有符號數相加結果溢出。
Q 標識位:若執行乘法和分數算術運算指令時,發生溢出,則Q被置為1。
(2) 狀態控制位:
IT:條件語句執行控制位。
J:T=1時,依據J位決定處理器的工作狀態。
E:決定數據的端模式(大端/小端)。
(3) 控制位:
I:IRQ 中斷禁止位。I=1 時,禁止 IRQ 中斷,反之允許。
F:FIQ 中斷禁止位。F=1 時,禁止 FIQ 中斷,反之允許。
T:Thumb 狀態位。決定處理器的工作狀態。
M[4:0]:工作模式位。用于決定當前處理器的工作模式。
第二章
2.1 舉例說明 ARM 匯編指令所支持的尋址方式。
(1) 立即數尋址:立即數作為操作數在指令中給出SUB R0, R1, #1
(2) 寄存器尋址:操作數存放在寄存器中,指令執行時直接取出寄存器值來操作。MOV R1, R2
(3) 寄存器間接尋址:操作數保存在寄存器指定地址的存儲單元中。LDR R1, [R2]
(4) 寄存器移位尋址:寄存器尋址得到的操作數再進行移位得到最終的操作數。MOV R0, R2, LSL #3
(5) 基址尋址:基址寄存器中的值與指令中的偏移地址量相加,形成操作數的有效地址。LDR R2, [R3, #0x5]
(6) 相對尋址:將程序計數器作為基址寄存器,指令中的標號作為地址偏移量,兩者相加得到操作數存放地址。B process
(7) 多寄存器尋址:一條指令可以完成多個寄存器值的傳送。LDMIA R1, {R2-R4, R5}
補充:IA每次傳送后地址加4,DA減4(I increment A after D decrement)
????IB每次傳送前地址加4,DB減4(B before)
? ? FA滿遞增堆棧,FB滿遞減堆棧(F full)
? ? EA空遞增堆棧,EB空遞減堆棧(E empty)
(8) 塊拷貝尋址:可實現數據塊的復制。LDMIA R0 {R1-R5}
(9) 堆棧尋址:用于數據棧與寄存器組之間的批量數據傳輸。LDMFD R13!,{R0,R1,R2,R3,R4}
R13為堆棧指針,此指令將R0-R4依次壓入堆棧中
2.2 ARM GNU匯編
2.2.1 相對跳轉指令 b 和 bl
bl 指令除了跳轉之外,還將返回地址(bl 指令下面一條指令的地址)保存在lr寄存器中。?b 和 bl 指令只能實現±32MB 空間的跳轉,并且是位置無關指令。
2.2.2 數據傳送指令 mov 和偽指令 ldr
mov 指令可以把一個立即數或寄存器的值(這里不能是內存地址)賦給另一個寄存器, mov 指令限制了立即數的長度為 8 位。
mov r1, r2 /* r2 中的內容賦給 r1 */mov r1,#0xFF /* r1=0xFF */
ldr 指令即是加載指令(內存訪問指令),也是偽指令,作為加載指令時,可以把一個寄存器內的數據加載到另一個寄存器,或內存地址里的數據加載到寄存器中。作為偽指令時,可以在立即數前面加一個等號“=”,以表示把一個地址寫到寄存器中去。
對于 ldr 偽指令的第二個參數沒有范圍的限制,如果立即數的長度不超過 8 位時,編譯器會自動轉換為 mov 指令。
ldr r1, =100 /* r1=100,系統會自動用 mov 指令代替?*/ldr r1, =0x12345678 /* r1=0x12345678 */ldr r1, 0x12345678 /* 將 0x12345678 地址處的值賦給 r1 寄存器*/
2.2.3 內存訪問指令 ldr、str、ldm、stm
str 是內存訪問指令,它的功能與 ldr 相反,它是把數據存到內存中去。
ldr r1, [r2 + 4] /* 將地址為 r2+4 的內存單元數據讀取到 r1 寄存器?*/str r1, [r2 + 4] /* 將 r1 寄存器的內容保存到地址為 r2+4 的內存單元中?*/
ldm 和 stm 屬于批量內存加載和存儲指令,可以實現在一組寄存器和一塊連續的內存單元之間傳輸數據。語法格式如下:?
ldm{cond}< mode> {!} {^} stm{cond}< mode> {!} {^}
2.2.4 加減指令 add、sub
1)add 寄存器,數據?add r1, 8 /* r1=r1+8 */
2)add 寄存器,寄存器?add r1, r2 /* r1=r1+r2 */
3)add 寄存器,內存單元?add r1, [0x12345678] /* r1 等于 r1 寄存器的值加內存 0x12345678 中的值?*/
4)add 內存單元,寄存器?add [0x12345678], r1 /* 內存 0x12345678 中的值加 r1 再寫回到 0x12345678 中*/
sub類似
2.2.5 位操作指令 bic、orr
bic 為位清除指令,bic {cond}{S} 目的寄存器,操作數 1,操作數 2
用途:清除操作數 1 的某些位(操作數 2 指定),并把結果寫到目的寄存器中。
例如:?bic r0, r0, 0x1f //將 r0 的 bit[4:0]
位清零?orr 指令用法與 bic 類似,它是把操作數 1 指定的位(操作數 2)置1。
2.2.6 程序狀態寄存器訪問指令 msr、mrs
msr 和 mrs 用來對程序狀態寄存器 cpsr 和 spsr 進行讀寫操作。
msr cpsr, r1 /* 將 r1 中的內容寫回到 cpsr */
mrs r1, cpsr /* 讀取 cpsr 到 r1 */
補充記憶:s-status狀態寄存器 r-通用寄存器,所以msr是將通用寄存器的值寫入狀態寄存器,mrs是將狀態寄存器的值讀取到通用寄存器中。
第三章
3.1 簡述 S5PV210 芯片功能。
(1) 核心架構:采用了 ARM Cortex-A8 內核,基于 ARM V7 指令集,主頻可達 1GHZ,具有 64/32 位內部總線結構,以及 32/32KB 的數據/指令一級緩存和 512KB 的二級緩存。
(2)?圖形處理能力:內建高性能3D 圖形引擎和 2D 圖形引擎,支持 2D/3D圖形加速。
(3)?視頻編解碼能力:內建 MFC,支持多種格式視頻的編解碼,以及模擬/數字 TV 輸出。
(4) 圖像處理:JPEG 硬件編解碼,最大支持 8000x8000 分辨率的圖像處理。
(5) 存儲和接口:存儲控制器支持多種類型的 RAM。Flash 支持 Nandflash、Norflash、OneNand 等。接口豐富。
(6) 高清輸出:內建的 HDMI v1.3 接口,可以將高清視頻輸出到外部顯示器上。
(7) 功耗和性能優化:提供了多種電源管理和功耗優化技術,確保高性能低功耗。
3.2 簡述 S5PV210 上電復位后的啟動過程。
(1)處理器上電后,首先進入復位狀態并開始初始化。
(2)執行iROM中的固化代碼,即 BL0。
(3)執行 BL0,加載bootloader到片內SRAM中, 即BL1,并跳轉到BL1中執行。
(4)執行BL1,加載bootloader剩余部分到SRAM中,即BL2并跳轉到BL2中執行。
(5)執行BL2初始化DRAM控制器,并加載操作系統到SRAM中。
(6)處理器跳轉到操作系統的起始地址,開始運行操作系統。
3.3?BL0啟動序列
(1)禁止看門狗
(2)初始化指令緩存
(3)初始化棧、堆
(4)初始化塊設備復制函數
(5)初始化PLL(鎖相環)及設置系統時鐘
(6)根據OM引腳設置,從相應設置中復制BL1前16KB字節到片內SRAM的0xD0020000地址,并檢查BL1的checknum信息,若檢查失敗,將自動嘗試第二次啟動
(7)檢查是否安全模式啟動,是則驗證BL1的完整性
(8)跳轉到BL1起始地址處
第四章
4.1 常用u_boot命令
Help:查看當前u_boot的所有可用命令
Bdinfo:顯示開發板配置信息
Cmp:比較兩塊存儲單元的值
Tftp:通過tftp協議從網絡下載文件到指定內存地址
Ping:測試網絡連通性
Printenv:打印當前環境變量及其值
Setenv:設置環境變量
Saveenv:保存環境變量
Version:查看當前u_boot版本信息
Reboot:重啟
???????4.2?寫出 U-Boot 兩種工作模式的作用。
(1) 啟動加載模式是應用系統的正常工作模式,該模式自動將嵌入式操作系統從FLASH 中加載到 SDRAM 中運行,無需用戶介入。
(2) 下載模式允許 Bootloader 通過某些通信手段將內核映像或根文件系統映像等從 PC 機中下載到目標板的 FLASH 中。通常用于開發階段,目標機中的u_boot會向終端提供一個簡單的命令行接口。
第五章
嵌入式系統開發環境主要由哪兩部分構成?
(1) 宿主機指PC或筆記本電腦,用于搭建交叉編譯環境,編譯用于目標機的系統內核和應用程序。
(2) 目標機指量身定制的一個嵌入式專用平臺,用于系統內核和應用程序的測試與運行。
六、其余補充內容
6.1?Flash閃存
Flash閃存是一種非易失性存儲器,即供電電源關閉后仍能保存片內信息不丟失。常用的閃存主要有Nor和Nand兩類。
(1)接口方面,Nor Flash帶有通用的SRAM接口,支持隨機訪問。而Nand Flash的接口是相對復雜的I/O接口串行的存取數據,需要先發出命令,然后發出相應的地址,最后讀/寫數據。
(2)容量與成本方面,Nor Flash的容量相比Nand Flash小很多,價格高很多。
(3)可靠性方面,Nor Flash上不存在壞塊,而Nand Flash在使用前要進行壞塊掃描,且flash的位翻轉現象的出現頻率較高,在文件存儲時容易導致信息出錯。
(4)使用壽命方面,Nand Flash一個塊最大擦寫次數可達百萬次,而Nor Flash只有十萬次左右。
(5)讀寫速度方面Nand Flash擦除簡單,而Nor Flash擦除前需要先將目標塊內的值先寫為1,且Nor Flash的塊較大,擦除時間較長。
???????U盤常用的存儲器是Nand Flash
U盤常用的存儲器是非易失性存儲器Nand Flash,然后回答它相比與Nor Flash的優點。
6.2 ???????如何理解嵌入式系統?結合應用談談自己的理解
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適用于應用系統,對功能、可靠性、成本、體積、功耗等有著嚴格要求的專用計算機系統。
6.3 ???????嵌入式系統的特點
(1)軟硬件可裁剪
(2)體積小、低功耗、低成本,高可靠性、高穩定性
(3)實時性和交互性強
(4)對開發環境和人員有一定要求???????
6.4 ???????S5PV210提供幾個32位的定時器,哪幾個具備PWM功能?
S5PV210提供5個32位定時器,其中定時器0、1、2、3具備PWM功能,定時器4沒有輸出引腳,定時器還具有死區寄存器。
6.5 ???????以定時器0為例,說說PWM定時器工作過程
(1)設置預分頻器和時鐘分頻器值
(2)設置TCNTBn定時器初值和TCMPBn比較值,配置TCON寄存器開啟定時器,在使能手動更新后,TCNTNBn和TCMPBn的值自動裝入定時器內部的TCNTn和TCMPn寄存器
(3)TCNTn開始減一計數,直到和TCMPn的值相等時,在使能自動反轉功能后,TOUTn的輸出引腳信號反轉
(4)TCNTn繼續進行減一操作,直到減到0。如果使能中斷功能,則觸發相應的中斷,跳轉到相應的中斷服務子程序中執行
(5)如果使能自動加載,則TCNTn的值減到0后,會進行自動重裝并開始下一次定時操作。若為手動加載,則定時器停止定時。直到裝入初值和比較值,會在執行完當前周期后,在下一次時鐘周期開始定時操作
???????6.6?嵌入式設備文件分為哪三類?
(1)字符設備,能夠像字節流一樣訪問的設備,比如文件、串口
(2)塊設備,數據以塊的形式存放,比如Nand Flash
(3)網絡接口,同時具有字符設備和塊設備的部分特點
七、實驗部分
7.1 ???????Linux交叉編譯環境的制作過程
(1)下載交叉編譯工具鏈arm-linux-gcc,并進行解壓
(2)啟用32位架構,安裝32位依賴庫
(3)配置環境變量,并確保其生效
(4)輸入arm-linux-gcc -v命令,若正確輸出版本號,則安裝配置成功
7.2 ???????U_Boot移植過程
根據開發板需求從?U-Boot 的官網下載對應的源碼,并準備一個容量足夠且無重要數據的sd卡,將其格式化為 FAT32 文件系統。
在boards.cfg中添加單板硬件信息,創建板級目錄和配置文件,配置相關的硬件相關驅動
執行make <board>_config命令,自動生成配置文件和架構符號鏈接
通過make命令編譯生成spl/u-boot-spl.bin和u-boot.bin,按芯片要求燒錄sd卡中(實驗中為扇區1和扇區32)
將sd卡插入到開發板上,選擇從sd卡啟動觀察現象是否正常
7.3 ???????U_Boot啟動過程
(1)BL0(iROM 階段):iROM初始化硬件并從SD卡扇區1加載SPL到內部RAM執行;
(2)BL1(SPL 階段):SPL初始化時鐘和DDRAM后,從SD卡扇區32加載完整U-Boot到DDRAM起始地址(0x20000000)執行;
(3)BL2(U-Boot 階段):U-Boot完成硬件初始化后,執行重定位計算目標地址,將自身代碼從加載地址復制到目標地址,根據重定位表修正符號地址,最后跳轉到重定位后的?U-Boot 繼續執行,準備加載內核。
7.4 ???????驅動設計實驗具體過程
在Ubuntu環境下搭建交叉編譯環境,禁用系統自帶的蜂鳴器驅動以避免沖突(make menuconfig)并編譯內核源碼。
編寫驅動程序buzzer.c、驅動測試代碼test.c和對應的Makefile文件。
執行make命令編譯生成內核模塊buzzer.ko和test可執行文件,并將buzzer.ko與test可執行文件通過tftp命令、sd卡、u盤或其它方式導入開發板。
在開發板上加載好buzzer.ko文件(insmod buzzer.ko),創建字符設備(mknod /dev/buzzer),為test程序添加可執行權限(chmod +x ?test)并運行test(./test),觀察蜂鳴器現象(響起)。
7.5 ???????加載設備驅動程序有幾種方法,分別如何實現?
兩種加載方式:
(1)靜態編譯加載,把驅動程序直接編譯進內核,開機自動生效,缺點是調試麻煩
(2)動態模塊加載:將驅動程序編譯為.ko模塊文件,通過insmod命令手動添加模塊(insert),不需要時使用rmmod命令刪除(remove),便于調試,可根據需求進行內核裁剪
如有問題或建議,歡迎在評論區中留言~