Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57013
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 123
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-30 17:10
个人简介

半路出家者.学习蜗牛,向着嵌入式软件开发的金字塔顶一步步迈进!

文章分类

全部博文(11)

文章存档

2017年(1)

2016年(3)

2015年(1)

2014年(6)

我的朋友

分类: 嵌入式

2014-12-26 11:36:04

1.应用程序调用某一个系统调用函数(如write)。
2.write函数是在C库里面实现的,所以先跑到C库里面,在C库里面干的事情:
(1)把write对应的系统号保存到R7寄存器里面。
(2)调  用一个特殊指令swi(老版本的ARM)或者svc,该指令的意思是触发软中断。
3.接着CPU处理软中断,于是程序跳转到内核里面了,转到内核的什么地方呢,答案是跳到内核的异常向量表(异常向量表是内核初始化      时就建立好的,地址是0xffff0000)的vector_swi入口处(软中断对应的入口)。
4.剩下的就是异常向量表的vector_swi处理机制了:
   内核从R7寄存器里面取出之前保存的系统调用号,以此号码为索引到系统调用表里面找对应的函数(sys_write),执行该函数。
5.返回(逆序原路返回)。
阅读(1540) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~