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

正文內(nèi)容

課、嵌入式實(shí)時(shí)操作系統(tǒng)簡介-資料下載頁

2025-01-17 22:22本頁面
  

【正文】 映射表 71 兩個(gè)問題-問題 2 問題 2:從應(yīng)用程序訪問系統(tǒng)調(diào)用方法有哪些? 答案: 由庫函數(shù)訪問系統(tǒng)調(diào)用 通過匯編訪問系統(tǒng)調(diào)用 72 實(shí)驗(yàn)?zāi)康? 熟悉系統(tǒng)調(diào)用原理 熟悉 ARMLinux系統(tǒng)調(diào)用擴(kuò)展方法 熟悉操作系統(tǒng)內(nèi)核編譯方法 熟悉通過匯編訪問系統(tǒng)調(diào)用方法 73 實(shí)驗(yàn)三內(nèi)容清單 創(chuàng)建和使用不帶參數(shù)的系統(tǒng)調(diào)用 ( 必做 ) 創(chuàng)建和使用帶 1個(gè)參數(shù)的系統(tǒng)調(diào)用( 必做 ) 創(chuàng)建和使用帶 5個(gè)參數(shù)的系統(tǒng)調(diào)用( 必做 ) 創(chuàng)建和使用帶 6個(gè)參數(shù)的系統(tǒng)調(diào)用( 選做 ) 74 必做一 創(chuàng)建不帶參數(shù)的系統(tǒng)調(diào)用( 1/4) 在 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 75 修改 arch/arm/kernel/目錄下的 Makefile文件,在 objy后面添加 編譯內(nèi)核 objy := $(ENTRY_OBJ) \ \ $(O_OBJS_$(MACHINE)) 必做一 創(chuàng)建不帶參數(shù)的系統(tǒng)調(diào)用( 2/4) 76 一個(gè)測試程序來使用新的系統(tǒng)調(diào)用: : define sys_hello() do{__asm__ __volatile__ (swi 0x900000+226\n\t)。}while(0) : include include “” int main(void) { printf(start hello\n)。 sys_hello()。 printf(end hello\n)。 } 必做一 創(chuàng)建不帶參數(shù)的系統(tǒng)調(diào)用( 3/4) 注意:上面的例子是直接用匯編使用系統(tǒng)調(diào)用的,而不是使用 libc庫函數(shù),因?yàn)閼?yīng)用程序使用的是新添加的系統(tǒng)調(diào)用,而 libc中并沒有,所以只能直接用匯編。 77 然后執(zhí)行 啟動(dòng)開發(fā)板,將應(yīng)用程序 test通過 zmodem協(xié)議下載到開發(fā)板的文件系統(tǒng)目錄下,在板子上運(yùn)行 test程序所得結(jié)果如下: armlinuxgcc o test ./test start hello hello world end hello 必做一 創(chuàng)建不帶參數(shù)的系統(tǒng)調(diào)用( 4/4) 78 進(jìn)而,實(shí)現(xiàn)一個(gè)帶參數(shù)的系統(tǒng)調(diào)用 必做 二 創(chuàng)建帶一個(gè)參數(shù)的系統(tǒng)調(diào)用 : include include “” int main(void) { char *str = “hello world\n”。 printf(start hello\n)。 sys_hello(str)。 printf(end hello\n)。 } 79 創(chuàng)建和使用不帶參數(shù)的系統(tǒng)調(diào)用實(shí)驗(yàn)代碼如下: : define sys_hello() do {__asm__ __volatile__ (swi 0x900000+226\n\t)。} while(0) : include include “” int main(void) { printf(start hello\n)。 sys_hello()。 printf(end hello\n)。 } 操作系統(tǒng)內(nèi)核編程風(fēng)格說明- define中的 do {}while(0)作用( 1/2) 80 在宏定義中的 do{}while(0)結(jié)構(gòu)將宏定義中的多條執(zhí)行語句進(jìn)行了保護(hù),可以確保語句的模塊化: define SWAP(a, b) do { a = a + b。 b = a b。 a = a b。} while(0) if(xy) SWAP(x,y)。 else x+=y。 若沒有 do{}while(0)保護(hù),宏定義的模塊化被破壞, b=a – b后的語句將無條件執(zhí)行。 若宏定義中有變量定義,將出現(xiàn)編譯錯(cuò)誤。 操作系統(tǒng)內(nèi)核編程風(fēng)格說明- define中的 do {}while(0)作用( 2/2) 81 操作系統(tǒng)內(nèi)核中的打印語句 ——printk 在 arch/arm/kernel/目錄下創(chuàng)建一個(gè)系統(tǒng)調(diào)用文件 系統(tǒng)調(diào)用屬于操作系統(tǒng)內(nèi)核功能,不能使用標(biāo)準(zhǔn) C語言庫 libc,而 printf定義在 ,屬于 libc庫,因而,內(nèi)核中的打印輸出不能使用 printf,而采用 printk替代。 void hello(void) { printk(“hello world\n”)。 } 注意:不是printf 82 GCC內(nèi)嵌式匯編語言簡介( 1/3) ?GCC的內(nèi)嵌式匯編語言提供了一種在 C語言源程序中直接嵌入?yún)R編指令的方法,既能夠直接控制所形成的指令序列,又有著與 C語言的良好接口,在操作系統(tǒng)內(nèi)核的開發(fā)中是一種常用技術(shù)。 ?內(nèi)嵌匯編代碼格式: __asm__ [__volatile__](“statements” :output_regs :input_regs :clobbered_regs ) ? statements :匯編語言代碼 ? output_regs:匯編語言的輸出說明,導(dǎo)出 C語言變量 ? input_regs :匯編語言的輸入說明,載入 C語言變量 ? clobbered_regs:匯編語言中被改變的寄存器說明 83 : define sys_myprint(v) \ { \ __asm__ __volatile__ ( \ “mov r0, %0 \n\t” \ swi 0x900000+227\n\t” \ ::”r” ((long) v) \ :” r0”, “l(fā)r”)。 \ } : include include “” int main(void) { char *str = “hello world!\n”。 sys_myprint(str)。 } 帶 1個(gè)參數(shù)系統(tǒng)調(diào)用的 GCC內(nèi)嵌匯編( 2/3) ldr r5, _str mov r0 ,r5 swi 0x900227 與輸入部分對(duì)應(yīng) 84 帶多個(gè)輸入?yún)?shù)的 GCC內(nèi)嵌匯編代碼舉例- x86匯編( 3/3) int count=10。 int value=5。 int buf[10]。 void main() { __asm__ ( “cld \n\t” “rep \n\t” “stosl” : :”c”(count),”a”(value),”D”(buf[0]) :”%ecx”,“%eax”,”%edi” )。 } movl _count, %ecx movl _value ,%eax movl _buf ,%edi cld rep stosl 與輸入部分對(duì)應(yīng)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1