疯狂内核预备知识
文章平均质量分 84
yunsongice
这个作者很懒,什么都没留下…
展开
-
Linux内核入门(五)——必要的硬件知识
要想弄懂Linux内核的工作原理,就必须懂点基本的硬件知识。这里我们主要介绍Intel 80x86系列CPU保护模式下最核心的部件中几个寄存器的作用,这些寄存器在Linux内核运行时起着至关重要的作用。至于其他那些各式各样的硬件设备,我们在讲解设备驱动时会针对具体的驱动程序来介绍的。首先,大家先看看CPU的主要架构: EU(通用寄存器、运算器和控制器)执行部件:完成指令所要求的功能原创 2010-04-12 18:57:00 · 6363 阅读 · 1 评论 -
Linux内核入门(一)——体系架构
Linux是一套免费使用和自由传播的类Unix操作系统,它最先用于基于x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。我们不去介绍操作系统的历史了,也不管操作系统这门学科上对操作系统的分类了,闲话少说,Linux操作系统只是一个非常新的操作系统。它不拘泥于某种特定的操作系统类型原创 2010-04-10 13:51:00 · 11674 阅读 · 10 评论 -
Linux内核入门(二)——用户态向内核态切换
那么,程序什么时候使用用户栈,什么时候使用内核栈呢?对,系统调用。也就是执行printf、open、read、write执行C语言库函数时,其最终会用到对应的系统调用,如sys_open、sys_read等。这时候就切换到内核栈。1 Linux的堆栈切换我们针对80x86来讨论,其实Linux只在四个地方用了它的堆栈段(由ss+esp指向其栈底地址):• 系统引导初始化临时原创 2010-04-10 19:09:00 · 15000 阅读 · 8 评论 -
Linux内核入门(三)—— C语言基本功
linux是一个复杂的软件系统,其内核源代码往往会用到一些在应用程序设计中部常见语言成分和编程技巧,这些都是分析内核源代码的基本功,希望大家能重点掌握。 首先,gcc编译器从语言里吸收了“inline”和“const”。inline函数的大量使用,有利于提高运行效率,由此相当一部分代码从.c文件移入了.h文件。 gcc增加了一种新的基本数据类型“long原创 2010-04-10 19:22:00 · 8536 阅读 · 2 评论 -
Linux内核入门(四)—— 内核汇编语言规则
任何一个用高级语言编写的操作系统,其内核源代码中总有少部分代码是用汇编语言编写的。读过Unix Sys V源代码的读者都知道,在其约3万行的核心代码中用汇编语言编写的代码约2000行,分成不到20个扩展名为.s和.m的文件,其中大部分是关于中断与异常处理的底层程序,还有就是与初始化有关的程序以及一些核心代码中调用的公用子程序。 用汇编语言编写核心代码中的部分代码,原创 2010-04-10 19:24:00 · 6567 阅读 · 9 评论 -
Linux内核入门(六)—— __attribute__ 机制
GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__是用来设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attr原创 2010-04-28 11:03:00 · 4760 阅读 · 0 评论 -
Linux内核入门(七)—— 必要的编译知识
所有的内核代码,基本都包含了include/linux/compile.h这个文件,所以它是基础,涵盖了分析内核所需要的一些列编译知识,本博就分析分析这个文件里的代码:#ifndef __LINUX_COMPILER_H#define __LINUX_COMPILER_H#ifndef __ASSEMBLY__首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个原创 2010-04-28 12:57:00 · 6402 阅读 · 3 评论 -
调用函数时 寄存器到底发生了那些变化
一直存在比较模糊的概念,因此用一个例子强化记忆。Linux x86 gcc3.2.3 AT&T格式的汇编代码如下: void fun() { int a = 'A'; } void main() { int b; fun(); return; } 开始调试 [sanool@sanool ex2]$ gd转载 2013-01-27 21:14:41 · 3617 阅读 · 0 评论