http://www.educity.cn/Linux/1242138.html 最近做的项目跟Linux内核的关系比较大,我们的项目需要在用户态触发一些内核态的代码运行.众所周知,内核态的代码是不能直接被用户态代码调用的,用户态代码触发内核态代码的必须要经过系统调用. 为什么选择ioctl 那么该如何实现我们的需求呢?有几种方法: 改写内核,扩大系统调用表,添加新的系统调用 利用内核模块,覆盖没被使用或这使用频率很低的一个系统调用的处理函数 利用已有的系统调用,比如ioctl,来"实现&quo…
1 Linux3.10.21内核系统调用设置 以前看的内核版本时2.6.11的,里面的系统调用设置一目了然啊!在文件entry.S中直接定义了sys_call_table表,并在这个文件中用各个系统调用函数的地址初始化了这个表.今天看了下3.10.21的内核,想自己添加个系统调用到这个内核里面,没想到看了半天还是在云里雾里中,只知道sys_call_table表的定义在文件/usr/src/linux-3.10/arch/x86/kernel/syscall_32.c中,当具体怎么初始化这个表的…
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 由于操作系统实验的缘故,有一个实验需要在Linux内核中增加自定义的系统调用函数,经过摸爬滚打,查资料,爬坑之后,终于成功了(其实,总体来说还是比较顺利~) 增加自定义系统调用函数的过程/原理: 1.在syscalls.h头文件增加新增函数的声明: 2.在syscalls.h头文件增加新增函数的函数实现代码块: 3.在unistd_64…
课程主要内容有三点: 在MenuOS中通过添加代码增加自定义的系统调用命令 使用gdb跟踪调试内核 简单分析system_call代码了解系统调用在内核代码中的处理过程 实验——分析system_call中断处理过程 在MenuOS中添加上周所运用到的系统调用 克隆并自动编译 rm menu -rf 强制删除原menu文件 git clone https://github.com/mengning/menu.git      从github中克隆 cd menu 在test.c文件中,添加代码如…
一. 文件描述符 在Linux下使用文件描述符来表示设备文件和普通文件.文件描述符是一个整型的数据,所有对文件的操作都通过文件描述符实现.文件描述符的范围是0~OPEN_MAX,系统中有3个已经分配的文件描述符,即标准输入.标准输出.和标准错误,他们的文件描述符的值分别为0.1.2. 文件描述符是文件系统中连接用户空间和内核空间的枢纽.当打开一个或者创建一个文件时,内核空间创建相应的结构,并生成一个整型的变量传递给用户空间的对应进程,进程用这个文件描述符来对文件进行操作. 二. 打开.创建文件o…
1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKernel/linux-2.6.32.63 为了方便,使用chmod 777 -R linux-2.6.32.63/ 将所有的内核文件都改为全权限,这样就可以在非root状态修改文件进行编译了. 2 添加系统调用 首先进入linux-2.6.32.63目录下.以后的文件路径都是以此目录为“根目录”的.…
卷组 在安装系统时,就会创建一个rootvg卷组.包含自带硬盘(内置硬盘)和系统逻辑卷,一个系统只能有一个rootvg卷组.一般情况下rootvg卷组最好只包含自带硬盘. 一.创建卷组 在创建卷组之前,系统管理员必须知道如下所列的信息. (1)卷组的名字在系统中必须是唯一的.卷组名要求时一个字符串,长度时1至15字符. (2)要确定新卷组中包含哪些物理卷,并保证这些物理卷再系统中是可用状态,而且没有被其他卷组使用.要能知道这些物理卷的名称. (3)确定新卷组中的物理分区大小,它的范围时1到102…
1. 简介 SELinux策略语言主要描述policy.conf的相关语法,其相关部分如下图所示: 2. 客体类别 定义内核支持的客体类别和许可的策略语言指令,并对SELinux系统中内核客体类别标准做一个概述. 2.1 SELinux中客体类别的用途 客体类别及其许可是SELinux中访问控制的基础,个客体类别 被定义: [cpp] view plain copy #define COMMON_FILE_SOCK_PERMS "ioctl", "read", &q…
一.源码目录 图1 二.系统总体流程: 系统从boot开始动作,把内核从启动盘装到正确的位置,进行一些基本的初始化,如检测内存,保护模式相关,建立页目录和内存页表,GDT表,IDT表.然后进入main进行初始化设置,main完成系统各个模块要用到的所有数据结构和外部设备的初始化.使得系统可以正常的工作.然后才进入用户模式.执行第一个fork生成进程1执行init,运行shell,接受并执行用户命令. 这里整个系统建立起来了,OS就处于被动状态,靠中断和系统调用来完成每一项服务. 三.各个目录的阅…
先来看一下应用程序是怎么操作屏幕的:Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏.FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作.用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上.这种操作是抽象的,统…