1 系统调用:(SYSTEM CALL)

操作系统(operating system)内核中有一组实现系统功能的过程,系统调用就是对上述过程的调用。程序员利用系统调用,向OS提出服务请求,由OS代为完成。

一般情况下进程是不能够存取系统内核的。它不能存取内核使用的内核段,也不能调用内核函数,CPU的硬件结构保证了这一点。只有系统调用是个例外。

系统调用是用户态进入内核态的唯一入口。

Linux被分为内核空间和用户空间;如果想在内核空间实现了某个函数提供给应用程序去使用,比如sys_read()函数;而应用程序的read()实现是来源于sys_read(),这样就形成一个系统调用。

  Linux中的系统调用接口:https://www.cnblogs.com/dongry/p/10650620.html

2 系统调用分析:

  打开entry_common.S;找到其中的ENTRY(vector_swi)

  在这个函数中得到调用标号

  根据标号找到一个调用表

  然后找到进入表

  打开calls.S文件,会得到一张系统调用列表(部分图示)

3 系统调用实例:

  实现功能:系统调用打印字符串

3.1 编写系统调用函数(/mini2440/kernel/printk.c)

  添加一个新的系统调用(/mini2440/arch/arm/kernel/calls.S)

  添加到头文件(/mini2440/arch/arm/include/asm/unistd.h)

3.2 make clean系统,重新编译make uImage ARCH=arm CROSS_COMPILE=arm-linux- 并重新安装到开发板上

  cp arch/arm/boot/uImage /tftpboot

3.3 编写应用程序syscall.c

void pk()
{
__asm__(
"ldr r7,=365\n"
"swi \n"
:
:
:"memory"
);
} int main()
{
pk();
return ;
}

  编译:arm-linux-gcc -static syscall.c -o syscall

  烧写到开发板运行:

Linux 系统调用(system call)的更多相关文章

  1. [Linux C]系统调用(system call)和库函数调用(Library functions)

    Linux 下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在 linux 程序设计里面就是底层 调 ...

  2. Linux系统调用和库函数调用的区别

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思 ...

  3. 别出心裁的Linux系统调用学习法

    别出心裁的Linux系统调用学习法 操作系统与系统调用 操作系统(Operating System,简称OS)是计算机中最重要的系统软件,是这样的一组系统程序的集成:这些系统程序在用户对计算机的使用中 ...

  4. 今天分享三种方法实现Linux系统调用,感兴趣的朋友可以参考一下

    系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...

  5. linux内核剖析(六)Linux系统调用详解(实现机制分析)

    本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...

  6. [译]How To Use the Linux Auditing System on CentOS 7

    本文是How To Use the Linux Auditing System on CentOS 7的中文版,翻译不到之处,还请指出和多多包涵.本文并不会完全遵从原文的一些格式,而是加入自己学习的理 ...

  7. 理解Linux系统调用

    目录 1.什么是系统调用 2.linux的系统调用 3.linux系统调用实现 1.什么是系统调用 系统调用,指的是操作系统提供给用户程序调用的一组特殊接口,用户程序可以根据这组接口获得操作系统内核的 ...

  8. ARM Linux系统调用的原理

    转载自:http://blog.csdn.net/hongjiujing/article/details/6831192 ARM Linux系统调用的原理 操作系统为在用户态运行的进程与硬件设备进行交 ...

  9. Linux系统调用(syscall)原理(转)

    引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app.framework.native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到 ...

随机推荐

  1. hive时间日期函数及典型场景应用

    1.hive取得当前日期时间: 1.1) 取得当前日期: select current_date(); 1.2) 取得当前日期时间: select current_timestamp(); 1.3) ...

  2. vue 实现子向父传值

    父组件 <template> <div id="app"> <child @onChange='onChildValue'></child ...

  3. javascript 表达式

    //    for(表达式1;表达式2;表达式3){//        循环体语句;//    }//    先执行表达式1,在执行2表达式,//        如果2表达式结果为false,退出循环 ...

  4. Express全系列教程之(三):get传参

    一.关于get请求 一般在网站开发中,get都用作数据获取和查询,类似于数据库中的查询操作,当服务器解析前台资源后即传输相应内容:而查询字符串是在URL上进行的,形如: http://localhos ...

  5. 工作中对git使用的总结

    git与svn的区别,简单的说,       svn在checkout后,如果不提交,那么版本库没有记录,如果修改的文件比较多,中间想回退几个文件,非常麻烦.git 是clone下来代码和记录,不提交 ...

  6. JavaScript中的this所引用的对象和如何改变这个引用

    this是函数内部的一个特殊对象,它引用的是函数执行环境对象.也就是运行是基于函数的执行环境绑定. 1.在网页全局作用域中调用函数时,this引用window var color='black'; f ...

  7. Elasticsearch学习笔记(五)索引元数据和集群元数据

    一.索引元数据 执行:GET /ecommerce/product/1 返回结果: {   "_index": "ecommerce",   "_ty ...

  8. awk命令使用经验

    1.为什么要使用awk 举一个简单的例子,作为一个java开发人员,在查看日志服务器(即时保存所有线上环境的日志)上的日志的时候,由于部署了服务的服务器不止一台,当想要查找某一个特定信息的时候,由于不 ...

  9. Oracle查询重复数据并删除,只保留一条记录

    前言 项目中,在“资源目录-在线编目”中,资源项子表存在多条重发数据,需要进行数据清理,删除重发的数据,最终只保留一条相同的数据. 操作的表名:R_RESOURCE_DETAILS 操作步骤 一.重复 ...

  10. angular开发手机网页小记

    禁用滑动事件,阻止触发浏览器翻页行为   <html lang="en" style="height:100%" ontouchmove="(f ...