- 博客(105)
- 资源 (12)
- 收藏
- 关注
转载 Linux内核的时钟中断机制
摘要:本文主要从内核实现的角度分析了Linux 2.4.0内核的时钟中断、内核对时间的表示等。本文是为那些想要了解Linux I/O子系统的读者和Linux驱动程序开发人员而写的。 关键词:Linux、时钟、定时器 申明:这份文档是按照自由软件开放源代码的精神发布的,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布内容的权利。发布本文的目的是希望它能对读者有用,但没有任
2008-08-21 20:41:00 1360
转载 I2C总线协议学习笔记
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering),任何时间点只能有一个主控。 总线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。1.1 I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生
2011-05-23 09:52:00 943
转载 I2C总线协议学习笔记
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering),任何时间点只能有一个主控。 总线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。1.1 I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生
2011-05-23 09:50:00 7484 2
转载 Linux 引导解析(使用bootsect.s+setup.s方式)
<br /><br />我详细解析了bootsect.s,同时阅读了setup.s。其中bootsect.s存放于磁盘的主引导扇区,bios-startup程序加载该程序(bootsect.s)到内存0x700处,并由此执行bootsect.s来引导Linuxkernel。在bootsect.s中加载setup.s至内存中,并在执行完它自身后,jump跳至刚刚已读入的setup部份,继续执行。 <br /> Linux Kernel Image 生成过程: 一.引导扇区汇编代码bo
2010-06-29 20:57:00 3439
原创 elinks应用
参考Lynx、elinks、w3m命令<br /><br /><br />elinks2010-02-20 09:37<br /><br /><br />使用w3m效果:<br />w3m
2010-06-29 20:55:00 1959
转载 Linux Anticipatory I/O 调度算法分析笔记
Linux Anticipatory (预测)I/O 调度算法分析笔记as_add_reques是调度算法的入口。AS和Deadline比较类似,都是先把request加入sector排序的红黑树,然后再把requst加入fifo。只不过AS因为加入了预测,需要在加入requst时,调用as_update_
2010-02-06 21:32:00 1106
原创 linux deadline I/O调度算法分析笔记
linux deadline I/O调度算法分析笔记deadline算法的核心就是在传统的电梯算法中加入了请求超时的机制,该机制主要体现在两点:(1)请求超时时,对超时请求的选择。(2)没有请求超时时,当扫描完电梯最后一个request后,准备返回时,对第一个request的选择。基于以上两点,平衡了系统i
2010-02-06 21:31:00 2472
转载 剖析一个由sendfile引发的linux内核BUG
之前看了《新爆内核高危漏洞sock_sendpage的利用分析的讨论》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自我的空间)。有什么不足之处还望多多指教~内核的BUG这个BUG首先得从sendfile系统调用说起。考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket
2010-01-16 16:48:00 1067 1
转载 文件读写(3)
2、读入操作。完成了上面的准备工作,下一步就是执行读操作的核心函数do_generic_mapping_read,这是一个比较复杂的函数,里面有大量的goto跳转,但还是比较清晰的。 它工作过程可以描述如下:a. 如果所要读取的文件在页面缓存中,则跳转到步骤d。b. 文
2009-12-20 10:58:00 831
转载 文件读写(2)
二、文件读过程我们先看标准的读过程。1、准备工作。通过VFS层,及一些初始化操作,为真正的读操作做准备。首先是用户进程通过read系统调用发出一个读请求:asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count){
2009-12-20 10:56:00 684
转载 文件读写(1)--页面缓冲(Page Cache)的管理
文件读写(1)--页面缓冲(Page Cache)的管理R.wen 一、本文分析文件的读写过程。当用户进程发出一个read()系统调用时,它首先通过VFS从disk cache中去查找相应的文件块有没有已经被缓存起来,如果有,则不需要再次从设备中去读,直接从CACHE中去拷贝给用户缓冲区就可以了,否则它就要先分配一个缓冲页面,
2009-12-20 10:55:00 927
转载 2.4.18预读算法详解
琢磨ULK2时的一些个人理解。参考了WFG的这篇文章: http://os.51cto.com/art/200711/60574.htm 如果觉得有必要,以后会写写其他版本预读算法的实现分析及改进逻辑。 一 为什么需要预读 1 I/O合并 2 延迟隐藏 参见上述链接。 二 预读算法初步设计 设read系统调用的内核实现函数为do_gene
2009-12-18 11:01:00 601
原创 binary search tree
Binary Search Treeregarding with the action : search , search_min , search_max ,search_predecessor , search_successor.Data structure of the treestruct tree_node{ unsigned int data;
2009-10-11 17:26:00 653
转载 linux2.6 的 slab alloctor 结构分析
To solve the external fragementation, Linux just implemneted the Buddy Algorithm Allocator.But what if we want to allocate the small or tiny memory(file descriptor, struct inode, struct task_sturct,
2009-10-03 17:50:00 894
转载 CPU缓存——L1+L2详解
CPU缓存(CacheMemory)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。
2009-10-03 15:46:00 3828
转载 Linux内核代码分析 slab.c
slab.c来自linux内核2.4.22版,本文件按照GNU协议发布。一、准备知识:slab的概念:提出的原因:由于操作系统在运行中会不断产生、使用、释放大量重复的对象,所以对这样的重复对象的生成进行改进可以大大提高效率 解决buddy system造成的内存浪费问题最早由sun的工程师提出(1994
2009-10-01 22:18:00 1309
转载 Linux slab 分配器剖析
良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab分配器背后所采用的思想,并介绍这种方法提供的接口和用法。动态内存管理
2009-10-01 22:05:00 574
转载 linux内核内存管理的伙伴算法
1. Linux 内核对各个zone都有一个buddy system.2. 数据结构:mem_map:一个Struct page数组,对应系统中所有的物理内存页。而每一个zone结构里都有一个zone_mem_map域指向这个zone的第一个page 在mem_m
2009-10-01 19:14:00 2214
转载 Grub for dos bootloader 分析
概述一下:Grubfordos0.4.4的主题为三部分:MBR,bootloader,kernel1:MBR对应的文件为stage1目录下的stage1.S .S后缀为GAS汇编源文件Stage1:大小512字节,编译后的结构为DBR结构,这样的优点是,无论你将GRUB安装在MBR还是分区的DBR中,都能正常引导,如果安装在硬盘的MBR中,那么bios的int19号中断会MBR中
2009-09-28 22:32:00 1127
转载 grub----Stage1.s源代码分析
Stage1.s源文件是用古老的at&t汇编编写而成,是大名鼎鼎的unix家族操作系统引导程序GRUB中的第一个文件。它编译后产生的二进制代码正好是512字节(故意的,也是必须的),刚好填充满硬盘初始的一个扇区,也即0柱面、0磁道、1扇区。人们称之为MBR——主引导记录。它的作用是载入stage2文件。 阅读本段代码,gemfield建议你首先具备以下能力:cpu寄存器
2009-09-28 22:00:00 3362
转载 cli/sti 用法
cli 禁止中断发生sti 允许中断发生在对 ss 和sp操作的时候, 如果有中断发生,中断的保存现场的操作是将相关寄存器值保存到ss:sp指向的地址.如果ss 或者sp没有完成赋值操作, 这时候ss:sp指向的地址则是不期望的地方. 如果将系统或者其他应用的数据覆盖,会导致系统/应用崩溃. 下面是两条规则: 1)在改变ss:sp之前,必须用cli指令屏蔽中
2009-09-28 19:26:00 1260
转载 linux2.6.29 启动过程详细分析
突然心血来潮,想自己写个模块,于是就把linux2.6.29的启动过程有分析了一下,整理出来和大家分享下。linux的启动大体上可以分几个步骤:第一部分 grub部分,内核的加载过程。这里总结一下别人的思想,因为自己没怎么看过grub的源码。1. Bios执行int 0x19,加载MBR至0x7c00并跳转执行,这个MBR在我们通常的系统中就是stage1.S(512B),
2009-09-25 20:08:00 774
转载 深入理解linux启动过程
inux系统的启动过程是由很多步骤组成的,但是,无论你是启动一个标准的x86桌面计算机,还是一个嵌入式PowerPC的目标板,大多数的流程是惊人得相似的。这篇文章,探索了linux从最初的启动准备到用户空间中某个程序被开启之间的启动过程,跟随这个流程,你还能学到其他许多与启动有关的知识,例如,bootloaders,内核解压缩,初始化内存盘,以及其他一些linux启动的部分。在很早
2009-09-25 20:05:00 858 1
转载 剖析Linux系统启动过程
容提要 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程。并且介绍了启动中涉及到的各种文件。 阅读Linux源代码,无疑是深入学习Linux的最好方法。在本文对Linux启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析Linux的启动过程,所以其中也简单涉及到部分相关的Linux源代码,Linux启动这部分
2009-09-25 20:05:00 497
转载 GRUB 启动窥探
理解Linux的启动过程,对于解决Linux系统启动问题还是非常有帮助的,知道Linux系统在每个阶段做了哪些事,将会帮助你更快的找到问题出处,并解决这些问题。提示:在进行重要文件编辑之前,最好是先对文件进行备份。 首先,我们来看机器启动的第一步–自检(Power-On Self Test)在启动过程中的第一步,就是自检,自检是由电脑的BIOS(基本输入
2009-09-25 20:03:00 632
转载 [RedHat] (原创)Linux 操作系统启动流程以及trouble shooting思路
Linux系统启动的基本过程和步骤:最近在某个版块看到有人讨论GRUB的问题,这里是我个人的一些理解。我想大部分还是正确的,但肯定也有理解错误的地方,在这里抛砖引玉了!Linux系统启动过程大致按照如下步骤进行(这是一个简述):第一阶段:BIOS启动引导阶段; 在该过程中实现硬件的初始化以及查找启动介质;
2009-09-25 20:02:00 571
转载 Linux/Unix环境下的Make和Makefile详解
无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每
2009-09-25 19:26:00 450
转载 Hacking initrd.img - 添加网卡驱动,网络安装 Linux
本文通过将网卡驱动加入到 initrd.img 中,使 Linux 内核在启动的过程中能正确识别并加载网卡驱动,从而使网络安装得以进行。 前言 网络安装 Linux 并不是一个新鲜的话题,其过程也不是一个轻松的体验。为了让机器能通过网络来安装 Linux,如果还需要配合kickstart
2009-09-24 13:30:00 2716
转载 Linux 初始 RAM 磁盘(initrd)概述 学习 initrd 的剖析、创建以及在 Linux 引导过程中的用法
什么是初始 RAM 磁盘?初始 RAM 磁盘(initrd)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd 中包含了实现这个目标所需要的目录和可执行程
2009-09-24 10:53:00 887
转载 LPC: Booting Linux in five seconds
At the Linux Plumbers Conference Thursday, Arjan van de Ven, Linux developer at Intel and author of PowerTOP, and Auke Kok, another Linux developer at Intels Open Source Technology Center
2009-09-10 17:27:00 1041
转载 硬盘分区表知识——详解硬盘MBR
硬盘是现在计算机上最常用的存储器之一。我们都知道,计算机之所以神奇,是因为它具有高速分析处理数据的能力。而这些数据都以文件的形式存储在硬盘里。不过,计算机可不像人那么聪明。在读取相应的文件时,你必须要给出相应的规则。这就是分区概念。 分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即MasterBootRecor
2009-09-04 09:32:00 877
转载 Linux环境进程间通信(五): 共享内存(上)
2003 年 5 月 01 日共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易见的好处是效率高,因为进程
2009-08-20 11:08:00 527
转载 电阻式触摸屏的基本结构和驱动原理
四线电阻式触摸屏 四线电阻式触摸屏的结构如图1,在玻璃或丙烯酸基板上覆盖有两层透平,均匀导电的ITO层,分别做为X电极和Y电极,它们之间由均匀排列的透明格点分开绝缘。其中下层的ITO与玻璃基板附着,上层的ITO附着在PET薄膜上。X电极和Y电极的正负端由“导电条”(图中黑色条形部分)分别从两端引出,且X电极和Y电极导电条的位置相互垂直。引出端X-,X+,Y-
2009-08-13 15:51:00 3091
原创 如何成为优秀的驱动开发工程师
作者:刘旭晖 Raymond转载请注明出处Email:colorant@163.com BLOG:http://blog.csdn.net/colorant/主页:http://sites.google.com/site/rgbbones/ 或许这样的标题,应该
2009-08-11 12:24:00 1363
转载 Linux I/O端口
I/O端口 关键词:设备管理、驱动程序、I/O端口、资源 申明:这份文档是按照自由软件开放源代码的精神发布的,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布内容的权利。发布本文的目的是希望它能对读者有用,但没有任何担保,甚至没有适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证(GPL),以及GNU自由文档协议(GFDL)。
2009-08-11 12:18:00 789
原创 Linux-2.6.20的cs8900驱动分析(三)
三、net_rx和net_send_packet3.1 net_rx在这部分将介绍cs8900驱动的两个最重要的函数,内核通过该两个函数实现了数据的收发。net_rx函数的主要功能是从cs8900的片上数据缓冲区中将数据传送给sk_buff缓冲区,sk_buff是网络驱动程序与Linux内核通信的缓冲区。该结构可在/inc
2009-08-11 10:53:00 1204
原创 Linux-2.6.20的cs8900驱动分析(二)
2.1 net_open与net_closenet_open函数主要完成的工作有:(这段net_open函数的概要内容总结来源于网络,网址:http://www.akae.cn/bbs/archiver/?tid-6657.html)A.获取私有数据指针存放于lpB
2009-08-11 10:51:00 1404
转载 Linux-2.6.20的cs8900驱动分析(一)
几经波折,在开发板上终于可以使用网络了。Linux内核可以通过网络挂接网络文件系统了。首先感谢Internet,Google等帮助过我的工具,还要感谢各位嵌友的无私奉献。在移植的过程中尤其感激weibing的博客文章cs8900移植linux-2.6.19.2,根据他的文章使cs8900成功跑起来。此文章可以在http://weibing.blogbus
2009-08-11 10:50:00 1532
转载 Linux I/O 模型---I/O复用:Select和Poll函数
Select和Poll函数在前一章中,我们遇到一个问题就是,客户端阻塞在了从标准输入中读取数据,与此同时,服务器由于某种原因要求关闭连接给客户端发送了一个FIN,而客户端只有从标准输入读到数据返回后才能知道连接已关闭。在这一章中介绍的I/O复用可以很好的解决这个问题。1.I/O模型a. Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(sel
2009-07-28 14:27:00 3100
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人