在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM linux系統(tǒng)調(diào)用的實(shí)現(xiàn)原理

            ARM linux系統(tǒng)調(diào)用的實(shí)現(xiàn)原理

            作者: 時(shí)間:2011-06-02 來(lái)源:網(wǎng)絡(luò) 收藏

            大家都知道的應(yīng)用程序要想訪(fǎng)問(wèn)內(nèi)核必須使用從而從usr模式轉(zhuǎn)到svc模式。下面咱們看看它的過(guò)程。

            本文引用地址:http://www.biyoush.com/article/150660.htm

              是os操作提供的服務(wù),用戶(hù)程序通過(guò)各種系統(tǒng),來(lái)引用內(nèi)核提供的各種服務(wù),系統(tǒng)調(diào)用的執(zhí)行讓用戶(hù)程序陷入內(nèi)核,該陷入動(dòng)作由swi軟中斷完成。

              at91rm9200處理器對(duì)應(yīng)的2.4.19內(nèi)核系統(tǒng)調(diào)用對(duì)應(yīng)的軟中斷定義如下:

              #if defined(__thumb__) //thumb模式

              #define __syscall(name)

              push {r7}nt

              mov r7, # __sys1(__NR_##name) nt

              swi 0nt

              pop {r7}

              #else //arm模式

              #define __syscall(name) swit __sys1(__NR_##name) nt

              #endif

              #define __sys2(x) #x

              #define __sys1(x) __sys2(x)

              #define __NR_SYSCALL_BASE 0x900000 //此為OS_NUMBER 20運(yùn)算值

              #define __NR_open (__NR_SYSCALL_BASE+ 5) //0x900005

              舉一個(gè)例子來(lái)說(shuō):open系統(tǒng)調(diào)用,庫(kù)函數(shù)最終會(huì)調(diào)用__syscall(open),宏展開(kāi)之后為swi #__NR_open,即,swi #0x900005觸發(fā)中斷,中斷號(hào)0x900005存放在[lr,#-4]地址中,處理器跳轉(zhuǎn)到arch/arm/kernel/entry-common.S中vector_swi讀取[lr,#-4]地址中的中斷號(hào),之后查詢(xún)arch/arm/kernel/entry-common.S中的sys_call_table系統(tǒng)調(diào)用表,該表內(nèi)容在arch/arm/kernel/calls.S中定義,__NR_open在表中對(duì)應(yīng)的順序號(hào)為

              __syscall_start:

              ...

              .long SYMBOL_NAME(sys_open) //第5個(gè)

              ...

              將sys_call_table[5]中內(nèi)容傳給pc,系統(tǒng)進(jìn)入sys_open函數(shù),處理實(shí)質(zhì)的open動(dòng)作

              注:用到的一些函數(shù)數(shù)據(jù)所在文件,如下所示

              arch/arm/kernel/calls.S聲明了系統(tǒng)調(diào)用函數(shù)

              include/asm-arm/unistd.h定義了系統(tǒng)調(diào)用的調(diào)用號(hào)規(guī)則

              vector_swi定義在arch/arm/kernel/entry-common.S

              vector_IRQ定義在arch/arm/kernel/entry-armv.S

              vector_FIQ定義在arch/arm/kernel/entry-armv.S

              arch/arm/kernel/entry-common.S中對(duì)sys_call_table進(jìn)行了定義:

              .type sys_call_table, #object

              ENTRY(sys_call_table)

              #include calls.S //將calls.S中的內(nèi)容順序鏈接到這里

            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉