久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團論壇 http://www.bjzhda.cn

曙海教育集團論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標題:ARM linux系統調用的實現原理

1樓
wangxinxin 發表于:2010-11-25 9:20:51
ARM linux系統調用的實現原理
大家都知道linux的應用程序要想訪問內核必須使用系統調用從而實現從usr模式轉到svc模式。下面咱們看看它的實現過程。
系統調用是os操作系統提供的服務,用戶程序通過各種系統調用,來引用內核提供的各種服務,系統調用的執行讓用戶程序陷入內核,該陷入動作由swi軟中斷完成。
at91rm9200處理器對應的linux2.4.19內核系統調用對應的軟中斷定義如下:
#if defined(__thumb__) //thumb模式
#define __syscall(name) \
"push {r7}\n\t" \
"mov r7, #" __sys1(__NR_##name) "\n\t" \
"swi 0\n\t" \
"pop {r7}"
#else //arm模式
#define __syscall(name) "swi\t" __sys1(__NR_##name) "\n\t"
#endif

#define __sys2(x) #x
#define __sys1(x) __sys2(x)
#define __NR_SYSCALL_BASE 0x900000 //此為OS_NUMBER << 20運算值
#define __NR_open (__NR_SYSCALL_BASE+ 5) //0x900005
舉一個例子來說:open系統調用,庫函數最終會調用__syscall(open),宏展開之后為swi #__NR_open,即,swi #0x900005觸發中斷,中斷號0x900005存放在[lr,#-4]地址中,處理器跳轉到arch/arm/kernel/entry-common.S中vector_swi讀取[lr,#-4]地址中的中斷號,之后查詢arch/arm/kernel/entry-common.S中的sys_call_table系統調用表,該表內容在arch/arm/kernel/calls.S中定義,__NR_open在表中對應的順序號為
__syscall_start:
...
.long SYMBOL_NAME(sys_open) //第5個
...
將sys_call_table[5]中內容傳給pc,系統進入sys_open函數,處理實質的open動作
注:用到的一些函數數據所在文件,如下所示
arch/arm/kernel/calls.S聲明了系統調用函數
include/asm-arm/unistd.h定義了系統調用的調用號規則
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中對sys_call_table進行了定義:
.type sys_call_table, #object
ENTRY(sys_call_table)
#include "calls.S" //將calls.S中的內容順序鏈接到這里
源程序:
ENTRY(vector_swi)
save_user_regs
zero_fp
get_scno //將[lr,#-4]中的中斷號轉儲到scno(r7)
arm710_bug_check scno, ip
#ifdef CONFIG_ALIGNMENT_TRAP
ldr ip, __cr_alignment
ldr ip, [ip]
mcr p15, 0, ip, c1, c0        @ update control register
#endif
enable_irq ip

str r4, [sp, #-S_OFF]!        @ push fifth arg

get_current_task tsk
ldr ip, [tsk, #TSK_PTRACE]        @ check for syscall tracing
bic scno, scno, #0xff000000        @ mask off SWI op-code
//#define OS_NUMBER 9[entry-header.S]
//所以對于上面示例中open系統調用號scno=0x900005
//eor scno,scno,#0x900000
//之后scno=0x05
eor scno, scno, #OS_NUMBER << 20        @ check OS number
//sys_call_table項為calls.S的內容
adr tbl, sys_call_table        @ load syscall table pointer
tst ip, #PT_TRACESYS        @ are we tracing syscalls?
bne __sys_trace

adrsvc al, lr, ret_fast_syscall        @ return address
cmp scno, #NR_syscalls        @ check upper syscall limit
//執行sys_open函數
ldrcc pc, [tbl, scno, lsl #2]        @ call sys_* routine
add r1, sp, #S_OFF
2: mov why, #0        @ no longer a real syscall
cmp scno, #ARMSWI_OFFSET
eor r0, scno, #OS_NUMBER << 20        @ put OS number back
bcs SYMBOL_NAME(arm_syscall)
b SYMBOL_NAME(sys_ni_syscall)        @ not private func
/*
* This is the really slow path. We're going to be doing
* context switches, and waiting for our parent to respond.
*/
__sys_trace:
add r1, sp, #S_OFF
mov r0, #0        @ trace entry [IP = 0]
bl SYMBOL_NAME(syscall_trace)
/*
//2007-07-01 gliethttp [entry-header.S]
//Like adr, but force SVC mode (if required)
.macro adrsvc, cond, reg, label
adr\cond \reg, \label
.endm
//對應反匯編:
//add lr, pc, #16 ; lr = __sys_trace_return
*/
adrsvc al, lr, __sys_trace_return        @ return address
add r1, sp, #S_R0 + S_OFF        @ pointer to regs
cmp scno, #NR_syscalls        @ check upper syscall limit
ldmccia r1, {r0 - r3}        @ have to reload r0 - r3
ldrcc pc, [tbl, scno, lsl #2]        @ call sys_* routine
b 2b

__sys_trace_return:
str r0, [sp, #S_R0 + S_OFF]!        @ save returned r0
mov r1, sp
mov r0, #1        @ trace exit [IP = 1]
bl SYMBOL_NAME(syscall_trace)
b ret_disable_irq

.align 5
#ifdef CONFIG_ALIGNMENT_TRAP
.type __cr_alignment, #object
__cr_alignment:
.word SYMBOL_NAME(cr_alignment)
#endif
.type sys_call_table, #object
ENTRY(sys_call_table)
#include "calls.S"

共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團
Powered By 曙海教育集團 Version 2.2
Processed in .03125 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产麻豆午夜三级精品| 精品麻豆av| 亚洲一区二区三区在线看| 国产精品国产三级国产普通话99| 久久久99久久| 国产精品久久久久久久久图文区 | 亚洲图片欧美激情| 中文字幕中文字幕在线一区| 亚洲少妇最新在线视频| 最新热久久免费视频| 亚洲天堂福利av| 一区二区三区自拍| 亚洲一区在线观看网站| 美脚の诱脚舐め脚责91| 黄色日韩网站视频| 国产91精品免费| 97精品国产露脸对白| 国产精品xxxx| 中文字幕一区二区三区在线不卡 | 精品一区在线看| 国产激情91久久精品导航| 成人短视频下载| 国产一区二区高清不卡| 亚州欧美一区三区三区在线| 麻豆久久久久久| 成年人国产精品| 久久99精品久久久久久久青青日本 | 欧美极品一区| 日本日本精品二区免费| 欧美丝袜丝交足nylons图片| 在线免费视频一区二区| 欧美一区二区三区人| 中文av一区特黄| 日韩精品每日更新| 国产精品亚洲一区二区三区在线 | 日韩美女一区| 欧美性高清videossexo| 国产网红主播福利一区二区| 亚洲综合自拍偷拍| 国产在线麻豆精品观看| 成人欧美视频在线| 亚洲国产精品一区二区第四页av| 欧美日韩美女一区二区| 久久久精品欧美丰满| 亚洲成在线观看| www.亚洲色图.com| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 欧美男女性生活在线直播观看| 久久精品人人爽人人爽| 日韩二区三区四区| 99re国产视频| 欧美亚洲一区二区在线| 国产精品污www在线观看| 日本不卡123| 99精品99久久久久久宅男| 欧美在线综合视频| 国产亚洲一本大道中文在线| 视频在线观看一区二区三区| 成人av网站免费观看| 在线成人性视频| 国产精品久久久久一区二区三区共| 日本三级韩国三级欧美三级| 国产伦精品一区二区三区在线| 欧美午夜精品一区二区蜜桃| 中文字幕亚洲区| 成人h精品动漫一区二区三区| 午夜精品区一区二区三 | 亚洲精品视频免费观看| 国产伦精品一区二区三区免费迷 | 国产精品欧美久久久久一区二区| 日本女优在线视频一区二区| 国产精品一区视频网站| 8v天堂国产在线一区二区| 亚洲精品成人精品456| 91入口在线观看| 日韩视频在线观看一区二区| 午夜精品免费在线| 久久精品日韩精品| 国产亚洲精品福利| 风间由美性色一区二区三区| 在线亚洲欧美专区二区| 亚洲在线中文字幕| 精品国产一区二区三区四区精华| 精品欧美一区二区在线观看| 九九九久久久精品| 小说区图片区图片区另类灬| 中文字幕不卡在线观看| 国产99久久久久| 欧美日韩一区二区三区四区五区| 亚州成人在线电影| 美女亚洲精品| 国产精品蜜臀av| 99在线观看视频网站| www久久精品| 成人高清免费观看| 精品久久久网站| 成人免费观看av| 精品日韩在线一区| 成人sese在线| 久久久久久久久久久久久夜| av激情综合网| 久久综合色鬼综合色| 高清不卡一区二区| 日韩欧美的一区| 国产suv一区二区三区88区| 欧美日韩国产bt| 国产一区二区三区美女| 在线电影院国产精品| 国内精品写真在线观看| 91精品免费观看| 成人丝袜视频网| 精品国产一区久久| 99精品视频在线观看| 国产偷国产偷精品高清尤物 | 欧美日韩国产综合视频在线| 最新日韩在线视频| 久久国产一区| 亚洲成人av电影在线| 亚洲黄色录像片| 日本精品一区二区| 日韩精品乱码av一区二区| 色狠狠综合天天综合综合| 人人爽香蕉精品| 91精品国产综合久久久久久| av在线一区二区三区| 中文字幕精品三区| 麻豆成人小视频| 日本中文字幕一区二区视频| 欧美日韩在线播放一区| 国产剧情一区在线| 久久免费的精品国产v∧| 91免费精品国自产拍在线不卡| 欧美经典三级视频一区二区三区| 岛国视频一区免费观看| 亚洲免费在线视频一区 二区| 日韩影视精品| 久色婷婷小香蕉久久| 日韩一区二区在线免费观看| 97久草视频| 亚洲妇女屁股眼交7| 在线观看不卡视频| av一二三不卡影片| 亚洲激情图片qvod| 欧美日韩一区三区四区| 91同城在线观看| 午夜免费欧美电影| 欧美日韩精品一区二区三区| 91香蕉视频黄| 婷婷久久综合九色综合绿巨人 | 精品久久久久久一区二区里番| 亚洲一区影音先锋| 欧美一卡2卡3卡4卡| 99国产视频| 五月婷婷欧美视频| 日韩免费高清av| 欧美高清视频一区二区三区在线观看| 日韩成人一级片| 国产亚洲欧美一区在线观看| 一本色道久久综合亚洲二区三区 | 久久精品视频免费观看| 日韩精品一线二线三线| 国产精品1区2区3区| 国产精品美女久久久久高潮| 尤物一区二区三区| 国产91精品一区二区绿帽| 麻豆中文一区二区| 欧美国产禁国产网站cc| 在线观看日本一区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩一区在线免费观看| 中文字幕精品一区日韩| 99久久精品国产导航| 视频一区二区国产| 国产欧美日韩视频一区二区| 色综合一区二区三区| 99久久国产免费看| 一区二区三区中文在线| 日韩欧美一二三四区| 视频一区二区三区免费观看| 99精品国产热久久91蜜凸| 奇米影视7777精品一区二区| 国产精品视频麻豆| 欧美肥妇free| 伊人婷婷久久| 欧美大香线蕉线伊人久久国产精品| 国产精品一区二区91| 午夜精品久久久久| 国产精品色一区二区三区| 91精品国产综合久久国产大片| 一本色道久久综合亚洲精品婷婷 | 一区二区三区高清| 久久久蜜臀国产一区二区| 欧美性欧美巨大黑白大战| 日本中文不卡| 韩日午夜在线资源一区二区| 成人99免费视频| 国产一区二区导航在线播放| 午夜视频一区在线观看| 亚洲精品亚洲人成人网| 国产精品女同互慰在线看|