linux内核分析
初秋的风
这个作者很懒,什么都没留下…
展开
-
从 system_call走进linux系统调用
慕课18原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000、课程实验:添加系统调用到MenuOS,并用GDB跟踪调试。一、将系统调用uname 添加到MenuOS1、在test.c中添加使用了系统调用uname 的函数的C语言版本和 汇编版本(具体内容)操作很简单原创 2016-03-27 18:44:05 · 4424 阅读 · 0 评论 -
GCC & ELF文件格式 &linux内核如何加载和启动一个可执行程序
gcc 编译器常用的命令行参数一览exec函数族库文件的制作与使用1、静态库文件的制作:2、静态库文件的使用:注意点:(1) -l 后面跟的是库名 没有lib也没有.a 的后缀 (2) -ltarget 必须放在 main.o 的后面,main.o 为我们要编译的文件也就是调用库文件的文件。3、动态库文件(共享库)的制作:4、动态库文件的使用:ELF( executable and linking format)是一种对象文件的格式,用于定义不同类型的对象文件(Object File原创 2016-04-10 19:14:30 · 5981 阅读 · 0 评论 -
分析linux进程调度与进程切换
一、Linux进程调度时机主要有:(1)主动调度:进程的运行状态发生变化时,例如等待某些事件而进入睡眠态;设备驱动程序 主动调度随时都可以进行,一个进程可以调用schedule() 启动一次调度。从应用的角度来看,用户空间放弃运行是可见的,而在内核空间放弃运行是不可见的,它隐藏在其他可能受阻的系统调用中。几乎所有设计外设的的系统调用都可能受阻,如read(),w原创 2016-04-15 22:13:17 · 2765 阅读 · 0 评论 -
从汇编指令细看计算机程序的运行过程
一、相关知识点:1、x86汇编中intel 语法与AT&T语法的区别:X86 汇编存在两种不同的语法:inter语法和AT&T语法,在windows平台上通常使用的是inter语法,二在UNIX/linux平台的汇编器使用的则一直是AT&T语法。与inter语法相比,AT&T语法的特点有:(1) 、寄存器前面用前缀% 来标识;(2) 、指令中源操作数在前目的操作数在后;原创 2016-02-27 13:25:40 · 2461 阅读 · 0 评论 -
linux中库文件的生成和使用
1、linux库文件分为静态库和动态库两种。静态库习惯以.a 结尾,而动态库习惯以.so(shared object)结尾。而且必须以lib开头。2、静态库的原则是“以空间换时间”,增加程序体积,减少运行时间;生成:在编译时候,先生成目标文件.o,然后用ar文件对目标文件归档,生成静态库文件。例如:ar -rc libtest.a myalib.o (注意:ar -rc 目标 .o文件转载 2016-04-09 19:42:12 · 809 阅读 · 0 评论 -
linux 挂载 windows下的分区
针对在一个硬盘上安装了双系统的情况:linux 系统可识别Windows分区,默认情况下不自动加载它。但有时在Linux中需要与Windows分区交换文件,这就需要加载它。根据不同的交换需要,我们可采用不同的加载方式。下面以RedHat Linux 7.3简体中文版为例来说明。一、手工加载 如果你只是偶尔进行一些文件交换,又喜欢在仿真终端中捣鼓的话,可使用这种方式。 假设要转载 2016-02-29 19:03:44 · 3074 阅读 · 0 评论 -
linux 自启动脚本
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。阅读之前建议先看一下附图。本文中假设inittab中设置的init tree为:/etc/rc.d/rc0.d/etc/rc.d/rc1.d/etc/rc.d/rc2.d/etc/rc.d/rc3.d/etc/rc.d/rc4.d/etc/rc.d/rc5.d/e转载 2016-02-29 17:28:54 · 410 阅读 · 0 评论 -
linux系统调用
一、 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨转载 2016-03-23 20:15:36 · 743 阅读 · 0 评论 -
linux系统中关于中断、异常、系统调用、陷阱等概念的解析
中断:是为了设备与CPU之间的通信。典型的有如服务请求,任务完成提醒等。比如我们熟知的时钟中断,硬盘读写服务请求中断。 中断的发生与系统处在用户态还是在内核态无关,只决定于EFLAGS寄存器的一个标志位(中断允许位)。我们熟悉的sti, cli两条指令就是用来设置这个标志位,然后决定是否允许中断。在单个CPU的系统中,这也是保护临界区的一种简便方法(保护临界区的方法一般有:关中断、转载 2016-03-23 17:05:02 · 4987 阅读 · 2 评论 -
linux 新进程的创建
一、背景知识:1、进程与程序的关系:2、进程的组成:3、进程控制块的组成: 进程标识符: 进程的上下文环境:进程调度信息:进程控制信息:fork()、vfork()、clone() 的定义clone()函数的参数及其意思原创 2016-04-03 20:11:58 · 1822 阅读 · 0 评论 -
linux内核启动过程追踪
在start_kernel中调用了一系列的初始化函数,已完成内核本身的设置:设置与体系结构相关的环境、进程调度器初始化、控制台初始化、系统IRQ初始化、内存初始化等。在Start_kernel函数的最后调用了rest_init()函数,在rest_init中建立了init线程,并在最后调用cpu_idle()函数。 可以这样理解:start_kernel最后clone出一个新的进程,也就是init进程,然后原来的进程就去执行cpu_idle()函数了,也就变成了idle进程,当发生一次进程调度后,in原创 2016-04-03 18:07:04 · 2341 阅读 · 0 评论 -
任务的堆栈
每个任务都有两个堆栈,分别用于用户态和内核态程序的执行,并且分别称为用户态堆栈和内核态堆栈。除了处于不同CPU特权级中,这两个堆栈之间的主要区别在于任务的内核态堆栈很小,所保存的数据量最多不能超过4096 – 任务数据结构块个字节,大约为3KB。而任务的用户态堆栈却可以在用户的64MB空间内延伸。(1)在用户态运行时每个任务(除了任务0和任务1)有自己的64MB地址空间。当一个任务(进程)转载 2016-03-29 14:46:54 · 1862 阅读 · 0 评论 -
thinkpad E480 安装ubuntu 17.10 使能WIFI驱动
问题:thinkpad E480 的无线网卡使用的是 rtl8821ce,对应的linux驱动要求内核版本在4.15以上,而ubuntu17.10的内核版本为linux 4.15。thinkpad安装更早的ubuntu版本可能可能还会有其他的硬件兼容性问题(我安装了14.04版本,开机的时候进入不了系统,安装17.04版本后在更新软件时提示说该版本的系统已经停止更新,所以后面直接使用的ubuntu...原创 2018-03-28 09:36:59 · 4286 阅读 · 4 评论