随笔分类 - linux内核学习
研究linux系统的内核模块
摘要:(1)几个概念物理地址:芯片级别的内存寻址,由地址总线决定的,一旦连接到CPU 物理地址不会更变。虚拟内存:抽象出来的虚拟内存地址,真实不存在。进程使用虚拟内存地址,虚拟内存管理单元(MMU)转换为真实的物理地址。逻辑地址:内存分段机制中使用(早期内存管理机制),逻辑地址是段地址和段内便宜地址组合值。线性地址:对应页式内存管理中 转换前的地址。线性空间的大小在32-bit平台上为4GB的固定大小,对于每个进程都是这样(一个应用可以是多进程的,在OS眼中,是以进程为单位的)。也就是说线性空间不是进程共享的,而是进程隔离的,每个进程都有相同大小的4GB线性空间。一个进程对于某一个内存地址的访问,与
阅读全文
摘要:定时器是一种轮询的机制,每隔一段时间去执行下相关的函数。(1) 内核中 定时器结构 Linux在include/linux/timer.h头文件中定义了数据结构timer_list来描述一个内核定时器 CODE>struct timer_list { struct list_head list; unsigned long expires; unsigned long data; void (*function)(unsigned long); } 1> list: 双向链表元素list:用来将多个定时器连接成一条双向循环队列。 2> expires:指定定时器到期的时间,这
阅读全文
摘要:中断通常分为同步中断和异步中断: 同步中断:是当指令执行时由CPU控制单元产生,之所以称之为同步,是因为只有在一条指令终止执行后CPU才会发出中断 异步中断:是由其它硬件设备依照CPU时钟信号随机产生。 通常把同步中断称之为异常,把异步中断称之为中断异步中断可能为以下两种: 可屏蔽中断:I/O设备发出的所有中断请求(IRQ)都产生可屏蔽中断。 非屏蔽中断:只有几个危急的事件(如硬件故障)才引起非屏蔽中断。非屏蔽中断总是由CPU辩认的。异常(fault):根据CPU控制单元产生异常时保存在内核态堆栈eip寄存器的值分为以下三种: 故障:通常是可以纠正的,一旦纠正,程序就可以在不失...
阅读全文
摘要:proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。主要目录结构如下:apm 高级电源管理信息cmdline 内核命令行Cpuinfo 关于Cpu信息Devices 可以用到的设备(块设备/字符设备)Dma 使用的DMA通道Filesystems 支持的文件系统Interrupts 中断的使用Ioports I/O端口的使用K
阅读全文
摘要:Linux 就是通常所说的单内核(monolithic kernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。通过 Linux 内核模块(LKM)可以在运行时动态地更改 Linux。Linux可加载内核模块(从内核的 1.2 版本开始引入)是 Linux 内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成 Linux 内核的一部分。(1) linux 内核模块的创建 LKM 包含 entry 和 exit 函数。当向内核插入模块时,调用 entry 函数,从内核删除模块时则调用 exit 函数。因为...
阅读全文
摘要:1. 系统加电,CPU RESET,进入实模式,跳到地址0xFFFFFFF0,此处是BIOS,执行BIOS-ROM 代码,进行系统自检2. 初始化中断向量表 地址是03.BIOS将可启动设备的第一个扇区(磁盘引导扇区,512字节,即就是bootsect.S)读入内存绝对地址0X7C00处,并跳转到这个地址。启动设备通常是软驱或者硬盘4.把自己移到绝对地址0x90000处,并调转到那里继续执行。5.通过BIOS提供的读磁盘调用"int 0x13"从磁盘上读入setup和内核的映像,将(boot/setup.S)2kB字节的代码读入内存0x90200处,将内核镜像载入0x100
阅读全文
摘要:arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。 和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、 boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。block:部分块设备驱动程序。crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。Documentation:关于内核各部分的通用解释和注释。drivers:设备驱动程序,每个不同的驱动占用一个子目录。fs:各种支持的文件系统,如ext、fat、nt
阅读全文
摘要:(1) 查看版本下载内核 uname -r 查看内核版本 一般系统中不会有内核源码,需要自己下载源码。 1> mkdir /home/usr1/temp 建立临时目录 usr1是用户的主目录 2> cd /home/usr1/temp 进入临时目录 3> apt-get source linux-image-$(uname -r) 下载内核源代码 建议:下载源码时候使用一般用户模式,建立临时路径,不要在系统目录usr/bin/src 目录中。(2) 解压配置 1>tar jfx linux-2.6.25.10.tar.bz2 解压源码 2>cd l...
阅读全文