新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > arm linux 系統調用實現

        arm linux 系統調用實現

        作者: 時間:2016-11-09 來源:網絡 收藏
        In this article we will dive into system call interface implementation in arm linux(with gnu eabi).我們將從bionic中的open函數開始追溯arm linux的系統調用實現(使用gnu eabi)。

        Linux的應用程序要想訪問內核必須使用系統調用從而實現從usr模式轉到svc模式。在arm中,這個過程是通過swi(或者和它等價的指令)來實現模式轉換的。

        本文引用地址:http://www.104case.com/article/201611/318015.htm

        從bionic libc中的open函數追溯系統調用實現

        相關文件:

        • bionic/libc/unistd/open.c

        • bionic/libc/arch-arm/syscalls/__open.S

        • linux/arch/arm/kernel/entry-common.S

        • linux/arch/arm/kernel/entry-armv.S

        • linux/arch/arm/kernel/entry-header.S

        相關調用過程:

        • int open(const char *pathname, int flags, ...);bionic/libc/unistd/open.c

        • __openbionic/libc/arch-arm/syscalls/__open.S

          __open:

          .save {r4, r7}

          stmfd sp!, {r4, r7}

          ldr r7, =__NR_open

          swi #0

          ldmfd sp!, {r4, r7}

          movs r0, r0

          bxpl lr

          b __set_syscall_errno

        • vector_swilinux/arch/arm/kernel/entry-common.S

          adr tbl, sys_call_table @ load syscall table pointer

          cmp scno, #NR_syscalls @ check upper syscall limit

          adr lr, BSYM(ret_fast_syscall) @ return address

          ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine

        • sys_call_table系統調用跳轉表,里面保存了各個系統調用實現的地址。

          .type sys_call_table, #object

          ENTRY(sys_call_table)

          #include "calls.S"

        資源和鏈接

        • eabi
        • ARM linux系統調用的實現原理
        • SWI : SoftWare Interrupt

        TODOS

        • 找出eabi中寄存器使用和參數傳遞的規則
        • 了解swi跳轉的更多詳細知識,比如如何跳轉到一個固定位置的
        • arm系統的中斷系統
        • 熟悉常用的arm指令和gnu 匯編器指令


        關鍵詞: armlinux系統調

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 苍溪县| 盐源县| 大连市| 九龙县| 临泉县| 永济市| 甘南县| 上饶县| 南投县| 环江| 三门峡市| 嘉禾县| 札达县| 武宣县| 合山市| 东阳市| 邵东县| 通化市| 温州市| 来安县| 宜兰市| 蓬溪县| 偏关县| 卢龙县| 佛坪县| 静安区| 普洱| 辰溪县| 五原县| 九寨沟县| 阜阳市| 毕节市| 德安县| 浦县| 武安市| 新巴尔虎左旗| 虹口区| 湖南省| 石泉县| 个旧市| 米泉市|