
Linux内核
寸先生的牛马庄园
专注AI,热爱文学
展开
-
devfs、sysfs、udev介绍
<br />一、devfs<br />linux下有专门的文件系统用来对设备进行管理,devfs和sysfs就是其中两种。在2.6内核以前一直使用的是devfs,devfs挂载于/dev目录下,提供了一种类似于文件的方法来管理位于/dev目录下的所有设备,我们知道/dev目录下的每一个文件都对应的是一个设备,至于当前该设备存在与否先且不论,而且这些特殊文件是位于根文件系统上的,在制作文件系统的时候我们就已经建立了这些设备文件,因此通过操作这些特殊文件,可以实现与内核进行交互。但是devfs文件系统有一些缺点转载 2010-11-08 21:04:00 · 885 阅读 · 0 评论 -
Linux内核裁剪
本文转载自http://blog168.chinaunix.net/space.php?uid=233938&do=blog&id=162616内核配置<br /> 内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。<br /> 需要牢记:不必转载 2011-04-29 17:11:00 · 1200 阅读 · 0 评论 -
platform总线、设备与驱动
<br />本文转载自http://blog.youkuaiyun.com/xxu0123456789/archive/2011/02/22/6199622.aspx<br />1.1 platform总线、设备与驱动<br />在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 <br />一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于转载 2011-04-22 15:02:00 · 818 阅读 · 0 评论 -
Linux内核中的list_for_each_entry
<br />在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:<br />意思大体如下:<br />假设只有两个结点,则第一个member代表head,<br />list_for_each_entry的作用就是循环遍历每一个pos中的member子项。<br /><br />宏list_for_each_entry:<br /> /**401 * list_for_each_entry - iterate over list o转载 2011-04-22 14:36:00 · 811 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。 (2)内存映射方式(Memory-mapped)转载 2011-04-07 11:28:00 · 1249 阅读 · 0 评论 -
学习笔记之Linux内核同步方法
一、程序并发执行的原因在用户空间:l 调度程序完全可能选择另一个高优先级的进程到处理器上执行,所以就有可能一个程序正处于临界区时被非自愿的抢占了,如果新调度的的进程随后也进入到同一个临界区,前后两个进程之间就会产生竞争。l 信号是异步发生的也有可能产生竞争条件。在内核空间:l 中断:中断几乎可以在任何时候异步发生,也就可能随时打断当前正在执行的代码。l 软中断和tasklet:内核能在任何时候唤醒或调度软中断和tasklet,打断当前正在执行的原创 2011-03-28 09:22:00 · 753 阅读 · 0 评论 -
Linux设备模型分析之基本数据结构
Linux随着硬件设备的发展及内核版本的演进,设备模型也变得越来月复杂,早先看了《Linux设备驱动程序》觉得一头雾水,又看了许多资料和高手的帖子,总算有了一定认识,下面写出来和Linux内核爱好者分享一下。一、底层数据结构:kobject 和 kset1、kobject内核对象:Linux2.6设备模型的最底层核心结构,该数据结构使所有设备在底层都具有统一的接口,每一个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject在内核中对应有一套申请,初始化,添加,注原创 2011-03-25 15:52:00 · 1099 阅读 · 0 评论 -
Linux设备模型之platform_device和platform_driver
<br /> 在《Linux设备模型分析之基本数据结构》一文中我分析了kobject,kset,device,device_driver等构成Linux设备模型的重要数据结构。但在分析Linux内核代码时这些原始数据结构大多被platform_device和platform_driver所封装代替,下文采用at91sam9260开发板提供的Linux2.6.19内核,剖析platform_device和platform_driver的使用。<br /> 首先来看这两个结构体的定义,都在/原创 2011-03-25 20:02:00 · 1531 阅读 · 0 评论 -
利用bochs调试引导程序和Linux内核
今天使用bochs2.4.5调试《Linux内核完全注释》上的一个简单的启动代码例子,bochs是一个模拟Intelx86指令系统很好的软件系统,可以从网上免费下载,下文就如何进行调试做说明。 先来看到的是《Linux内核完全注释》中的一个例子:在Ubuntu10.04中编写代码后保存为boot.s文件 .globl begtext,begdata,begbss,endtext,enddata,endbss !全局标识符,供ld86链接使用 .text !正文原创 2011-02-23 15:21:00 · 1654 阅读 · 0 评论 -
任务和过程的可重入性
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。 重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许原创 2011-03-03 10:57:00 · 623 阅读 · 0 评论 -
一致代码段与非一致代码段
<br /> 定义这个概念主要是为了系统安全:内核要和用户程序分开,内核一定要安全不能被用户程序干涉。但有时候用户程序也需要读取内核的某些数据。于是操作系统内核程序开辟一些可以供用用户程序访问的段,但是不允许用户程序写入数据。内核不用知道用户程序的数据.内核不用调用用户程序的数据.内核不用转移到用户程序中来。用户程序只能访问到内核的某些共享的段.我们称这些段为一致代码段。用户程序不能访问内核不共享的段。<br />于是就有了代码段的一致(Comforming)和非一致的概念:<br />一致代码段:也就原创 2011-02-28 11:25:00 · 1413 阅读 · 0 评论