freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第7課armlinux內(nèi)核-資料下載頁(yè)

2024-10-11 22:15本頁(yè)面

【導(dǎo)讀】ARM有7種運(yùn)行狀態(tài):. ARM系統(tǒng)結(jié)構(gòu)中各個(gè)寄存器的使用方式。存儲(chǔ)管理是一個(gè)很大的范疇。操作系統(tǒng)內(nèi)核的復(fù)雜性相當(dāng)程度上來(lái)自?xún)?nèi)。MMU可以做在芯片中,也可以作為協(xié)處理。馮·諾依曼結(jié)構(gòu):程序只是一種數(shù)據(jù),對(duì)程。嵌入式系統(tǒng)中往往采用程序和數(shù)據(jù)兩個(gè)存。采用單層的段映射的時(shí)候,內(nèi)存中有個(gè)“段映射。標(biāo)志,將這12位物理段地址和虛擬地址中的低20位拼接在一起,標(biāo),從表中找到相應(yīng)的表項(xiàng),每個(gè)表項(xiàng)指向一個(gè)二層映射表。的下標(biāo),進(jìn)一步從相應(yīng)表項(xiàng)中取得20位的物理頁(yè)面地址。ARM處理器中,MMU是作為協(xié)處理器CP15. MMU相關(guān)的最主要的寄存器有三個(gè):。面映射表項(xiàng)中的2位的“訪(fǎng)問(wèn)權(quán)限”AP為00,如果AP為10,則和S位R位無(wú)關(guān),特權(quán)狀態(tài)。可讀可寫(xiě),用戶(hù)狀態(tài)只讀。ARM-Linux內(nèi)核也將這4GB虛擬地址空間分。ARM將I/O也放在內(nèi)存地址空間中,所以系。ARM處理器上的實(shí)現(xiàn)和x86的既相似又有很。Linux在啟動(dòng)初始化的時(shí)候依次調(diào)用:。Linux虛擬內(nèi)存的實(shí)現(xiàn)需要6種機(jī)制的支持:

  

【正文】 __real_stubs_start + (vector_IRQ __stubs_start) b __real_stubs_start + (vector_FIQ __stubs_start) __stubs_start: vector_IRQ: … vector_data: … vector_prefetch: … vector_undefinestr: … vector_FIQ: … vector_addrexcptn: … .LCvswi: .word vector_swi .LCsirq: .word __temp_irq .LCsund: .word __temp_und .LCsabt: .word __temp_abt __stubs_end: 41 – trap_init()函數(shù)執(zhí)行完了以后,再執(zhí)行 init_IRQ()。通過(guò)函數(shù) init_IRQ()建立上面提及的 3個(gè)數(shù)據(jù)結(jié)構(gòu)及其相互聯(lián)系的框架。 42 ? 在進(jìn)入中斷響應(yīng)之前, CPU自動(dòng)完成下列操作: – 將進(jìn)入中斷響應(yīng)前的內(nèi)容裝入 r14_irq,即中斷模式的 lr,使其指向中斷點(diǎn)。 – 將 cpsr原來(lái)的內(nèi)容裝入 spsr_irq,即中斷模式的spsr;同時(shí)改變 cpsr的內(nèi)容使 CPU運(yùn)行于中斷模式,并關(guān)閉中斷。 – 將堆棧指針 sp切換成中斷模式的 sp_irq。 – 將 pc指向 0x18。 43 ? 中斷 流程圖 44 5 ARMLinux系統(tǒng)調(diào)用 ? 兩種機(jī)制:通過(guò) LIBC調(diào)用,或直接 調(diào)用 ? X86有 INT 0x80 ? arm處理器有自陷指令 SWI ? cpu遇到自陷指令后,跳轉(zhuǎn)到內(nèi)核態(tài) ? 操作系統(tǒng)首先保存當(dāng)前運(yùn)行的信息,然后根據(jù)系統(tǒng)調(diào)用號(hào)查找相應(yīng)的函數(shù)去執(zhí)行 ? 執(zhí)行完了以后恢復(fù)原先保存的運(yùn)行信息返回 45 創(chuàng)建 和使用一個(gè)新的系統(tǒng)調(diào)用 (1) ? 在 arch/arm/kernel/目錄下創(chuàng)建一個(gè)新的文件 ? 在 arch/arm/kernel/ 中添加新的系統(tǒng)調(diào)用,新的系統(tǒng)調(diào)用號(hào) 0x900000+226 void hello(void) { printk(“hello world\n”)。 } .long SYMBOL_NAME(sys_gettid) .long SYMBOL_NAME(sys_readahead) .long SYMBOL_NAME(hello) __syscall_end: .rept NR_syscalls (__syscall_end __syscall_start) / 4 .long SYMBOL_NAME(sys_ni_syscall) .endr 46 創(chuàng)建 和使用一個(gè)新的系統(tǒng)調(diào)用 (2) ? 修改 arch/arm/kernel/目錄下的 Makefile文件,在 objy后面添加 objy := $(ENTRY_OBJ) \ \ $(O_OBJS_$(MACHINE)) 47 創(chuàng)建 和使用一個(gè)新的系統(tǒng)調(diào)用 (3) ? 寫(xiě)一個(gè)測(cè)試程序來(lái)使用新的系統(tǒng)調(diào)用: : define sys_hello() {__asm__ __volatile__ (swi 0x900000+226\n\t)}while(0) : include include “” int main(void) { printf(start hello\n)。 sys_hello()。 printf(end hello\n)。 } 48 創(chuàng)建 和使用一個(gè)新的系統(tǒng)調(diào)用 (4) ? 然后執(zhí)行 ? 啟動(dòng)開(kāi)發(fā)板,將應(yīng)用程序 test通過(guò) zmodem協(xié)議下載到開(kāi)發(fā)板的文件系統(tǒng)目錄下,在板子上運(yùn)行 test程序所得結(jié)果如下: 注意,上面的例子是直接用匯編使用系統(tǒng)調(diào)用的,而不是使用 libc,因?yàn)?test應(yīng)用程序使用的是新添加的系統(tǒng)調(diào)用,而 libc中并沒(méi)有,所以只能直接用匯編。 armlinuxgcc o test ./test start hello hello world end hello Thanks
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1