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


曙海教育集團論壇Linux專區Linux系統開發 → ARM linux系統調用的實現原理


  共有7321人關注過本帖樹形打印

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

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
ARM linux系統調用的實現原理  發帖心情 Post By: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"


支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

ARM linux系統調用的實現原理








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
色吊一区二区三区| 免费观看国产成人| 石原莉奈在线亚洲三区| 三级在线观看一区二区| 五月婷婷综合在线| 国产综合色在线| www.亚洲人| 久久久精品国产一区二区三区| 欧美一级二级三级| 色噜噜狠狠色综合中国| 91精品国产综合久久久久久| 亚洲精品一区二区在线观看| 中文字幕字幕中文在线中不卡视频| 亚洲国产成人91porn| 国产一区二区在线电影| 成人蜜桃视频| 在线观看日韩片| 欧美xxxxxxxx| 亚洲男人都懂的| 国内久久精品视频| 含羞草久久爱69一区| 在线观看日韩电影| 国产香蕉久久精品综合网| 亚洲电影欧美电影有声小说| 国产不卡一区视频| 精品伦理一区二区三区| 欧美日韩精品欧美日韩精品一| 欧美国产一区视频在线观看| 秋霞午夜av一区二区三区| 99久久夜色精品国产网站| 日韩性感在线| 久久亚洲综合色一区二区三区 | 久久久久九九视频| 亚洲国产一区视频| av毛片久久久久**hd| 亚洲一区3d动漫同人无遮挡| 久久综合给合久久狠狠狠97色69| 亚洲高清视频中文字幕| 福利一区在线观看| 亚洲欧洲日韩综合二区| 337p粉嫩大胆噜噜噜噜噜91av | 777xxx欧美| 一区二区三区日韩在线观看| 懂色av一区二区夜夜嗨| 涩涩日韩在线| 国产欧美一区二区三区在线看蜜臀 | 国产美女在线观看一区| 精品国产乱码久久久久久丨区2区| 欧美男男青年gay1069videost| 亚洲欧美二区三区| av电影在线观看一区| 91久久人澡人人添人人爽欧美| 国产精品色噜噜| 粉嫩一区二区三区性色av| 亚洲高清精品中出| 中文字幕在线观看不卡视频| 国产盗摄视频一区二区三区| 宅男一区二区三区| 亚洲精品免费一二三区| 97伦理在线四区| 欧美一区二区精品| 看电视剧不卡顿的网站| 日本高清不卡三区| 国产精品久久久久婷婷| av在线播放一区二区三区| 欧美日韩一区在线观看| 日韩专区在线视频| 区一区二区三区中文字幕| 国产欧美一区二区精品仙草咪| 成人午夜视频网站| 欧美三级电影在线看| 天天做天天摸天天爽国产一区| 欧美激情第一页在线观看| 亚洲国产精品国自产拍av| 91在线视频播放地址| 欧美精品久久天天躁| 久久精工是国产品牌吗| 一区二区三区国| 亚洲电影一区二区| 亚洲精品久久区二区三区蜜桃臀| 亚洲女女做受ⅹxx高潮| 狠狠干一区二区| 亚洲国产精品传媒在线观看| 51蜜桃传媒精品一区二区| 日韩精品一区二区三区中文精品| 国产麻豆午夜三级精品| 欧美喷潮久久久xxxxx| 韩国女主播一区二区三区| 在线观看日韩电影| 激情都市一区二区| 91精品婷婷国产综合久久竹菊| 国产乱码精品一区二区三区av| 欧美色爱综合网| 国产在线视频一区二区| 91精品国产综合久久久久久| 国产成都精品91一区二区三| 日韩一区二区免费高清| 99久久免费精品高清特色大片| 日韩精品最新网址| 91在线免费看片| 综合欧美一区二区三区| 青娱乐一区二区| 日日欢夜夜爽一区| 欧美欧美欧美欧美首页| heyzo一本久久综合| 日本一区二区动态图| 欧美日本国产精品| 日本中文在线一区| 91精品国产入口| 91亚洲精品久久久蜜桃网站| 国产精品美女一区二区三区| 欧美日韩在线播放一区二区| 日韩综合在线视频| 日韩一区二区三区在线观看| 99精彩视频在线观看免费| 尤物av一区二区| 欧美三片在线视频观看| 粉嫩嫩av羞羞动漫久久久| 亚洲国产电影在线观看| 日本视频一区在线观看| 卡一卡二国产精品| 久久久国际精品| 日韩国产在线一区| 国产一区二区三区免费观看| 国产日韩精品一区二区浪潮av| 欧美中日韩一区二区三区| 日本不卡一二三区黄网| 欧美tickling挠脚心丨vk| 国产日韩精品一区观看| 婷婷中文字幕一区三区| 日韩精品一区二区三区中文精品 | bt7086福利一区国产| 中文字幕第一区| 亚洲视频在线二区| 成人福利视频在线| 亚洲综合免费观看高清在线观看| 欧美日韩免费高清一区色橹橹| 91精品国产99久久久久久红楼 | 奇米精品一区二区三区四区| 欧美一区二区播放| 国产高清精品一区| 久久成人免费网站| 国产精品网友自拍| 欧美三级三级三级| 精品国产一区二区三区日日嗨| 蜜桃精品视频在线观看| 久久久久久久久久久黄色| 色综合天天综合网国产成人综合天 | 欧美亚州在线观看| 国产91在线观看| 亚洲成人av电影| 久久久久久电影| 欧美在线免费观看视频| 国产精品露出视频| 国产一区二区三区不卡在线观看 | 神马影院午夜我不卡影院| 成人免费看片app下载| 夜夜嗨av一区二区三区四季av| 精品裸体舞一区二区三区| 亚洲欧洲久久| 国产三级精品在线不卡| 国产不卡高清在线观看视频| 亚洲综合色网站| 久久久久久久综合日本| 欧美亚洲禁片免费| 裸体丰满少妇做受久久99精品| 国产成人av电影在线| 亚洲成国产人片在线观看| 国产精品美女久久久久aⅴ国产馆| 欧美人妖巨大在线| 亚洲女人毛片| 精品中文字幕人| 99精品国产99久久久久久白柏| 美女精品一区二区| 亚洲第一激情av| 亚洲男同性视频| 国产精品卡一卡二| 精品国产91洋老外米糕| 欧美日韩精品一区二区三区 | 椎名由奈av一区二区三区| 精品欧美一区二区三区精品久久| 欧美性猛片aaaaaaa做受| 天天综合色天天综合色hd| 国模精品一区二区三区| 97久久精品人人做人人爽| 国产精选一区二区三区| 美女网站色91| 免费成人在线观看| 首页欧美精品中文字幕| 亚洲精品成人a在线观看| 欧美激情一区二区三区蜜桃视频| 精品伦理精品一区| 欧美刺激脚交jootjob| 91精品国产综合久久蜜臀 | 中文字幕一区在线观看视频| 亚洲国产精品99久久久久久久久 | 亚洲综合丁香婷婷六月香| 国产精品成人一区二区三区夜夜夜 | 91精品国产综合久久久久久丝袜| 成人午夜视频免费看|