linux device driver
文章平均质量分 89
thewayma
这个作者很懒,什么都没留下…
展开
-
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 · 922 阅读 · 0 评论 -
深入理解linux启动过程
inux系统的启动过程是由很多步骤组成的,但是,无论你是启动一个标准的x86桌面计算机,还是一个嵌入式PowerPC的目标板,大多数的流程是惊人得相似的。这篇文章,探索了linux从最初的启动准备到用户空间中某个程序被开启之间的启动过程,跟随这个流程,你还能学到其他许多与启动有关的知识,例如,bootloaders,内核解压缩,初始化内存盘,以及其他一些linux启动的部分。在很早转载 2009-09-25 20:05:00 · 847 阅读 · 1 评论 -
GRUB 启动窥探
理解Linux的启动过程,对于解决Linux系统启动问题还是非常有帮助的,知道Linux系统在每个阶段做了哪些事,将会帮助你更快的找到问题出处,并解决这些问题。提示:在进行重要文件编辑之前,最好是先对文件进行备份。 首先,我们来看机器启动的第一步–自检(Power-On Self Test)在启动过程中的第一步,就是自检,自检是由电脑的BIOS(基本输入转载 2009-09-25 20:03:00 · 618 阅读 · 0 评论 -
[RedHat] (原创)Linux 操作系统启动流程以及trouble shooting思路
Linux系统启动的基本过程和步骤:最近在某个版块看到有人讨论GRUB的问题,这里是我个人的一些理解。我想大部分还是正确的,但肯定也有理解错误的地方,在这里抛砖引玉了!Linux系统启动过程大致按照如下步骤进行(这是一个简述):第一阶段:BIOS启动引导阶段; 在该过程中实现硬件的初始化以及查找启动介质;转载 2009-09-25 20:02:00 · 561 阅读 · 0 评论 -
Hacking initrd.img - 添加网卡驱动,网络安装 Linux
本文通过将网卡驱动加入到 initrd.img 中,使 Linux 内核在启动的过程中能正确识别并加载网卡驱动,从而使网络安装得以进行。 前言 网络安装 Linux 并不是一个新鲜的话题,其过程也不是一个轻松的体验。为了让机器能通过网络来安装 Linux,如果还需要配合kickstart转载 2009-09-24 13:30:00 · 2701 阅读 · 0 评论 -
Linux 初始 RAM 磁盘(initrd)概述 学习 initrd 的剖析、创建以及在 Linux 引导过程中的用法
什么是初始 RAM 磁盘?初始 RAM 磁盘(initrd)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd 中包含了实现这个目标所需要的目录和可执行程转载 2009-09-24 10:53:00 · 873 阅读 · 0 评论 -
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 · 1109 阅读 · 0 评论 -
grub----Stage1.s源代码分析
Stage1.s源文件是用古老的at&t汇编编写而成,是大名鼎鼎的unix家族操作系统引导程序GRUB中的第一个文件。它编译后产生的二进制代码正好是512字节(故意的,也是必须的),刚好填充满硬盘初始的一个扇区,也即0柱面、0磁道、1扇区。人们称之为MBR——主引导记录。它的作用是载入stage2文件。 阅读本段代码,gemfield建议你首先具备以下能力:cpu寄存器转载 2009-09-28 22:00:00 · 3340 阅读 · 0 评论 -
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 · 1027 阅读 · 0 评论 -
剖析Linux系统启动过程
容提要 本文以RedHat9.0和i386平台为例,剖析了从用户打开电源直到屏幕出现命令行提示符的整个Linux启动过程。并且介绍了启动中涉及到的各种文件。 阅读Linux源代码,无疑是深入学习Linux的最好方法。在本文对Linux启动过程的介绍中,我们也尝试从源代码的视角来更深入的剖析Linux的启动过程,所以其中也简单涉及到部分相关的Linux源代码,Linux启动这部分转载 2009-09-25 20:05:00 · 484 阅读 · 0 评论 -
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 · 771 阅读 · 0 评论 -
Linux内核代码分析 slab.c
slab.c来自linux内核2.4.22版,本文件按照GNU协议发布。一、准备知识:slab的概念:提出的原因:由于操作系统在运行中会不断产生、使用、释放大量重复的对象,所以对这样的重复对象的生成进行改进可以大大提高效率 解决buddy system造成的内存浪费问题最早由sun的工程师提出(1994转载 2009-10-01 22:18:00 · 1296 阅读 · 0 评论 -
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 · 7413 阅读 · 2 评论 -
文件读写(3)
2、读入操作。完成了上面的准备工作,下一步就是执行读操作的核心函数do_generic_mapping_read,这是一个比较复杂的函数,里面有大量的goto跳转,但还是比较清晰的。 它工作过程可以描述如下:a. 如果所要读取的文件在页面缓存中,则跳转到步骤d。b. 文转载 2009-12-20 10:58:00 · 817 阅读 · 0 评论 -
文件读写(1)--页面缓冲(Page Cache)的管理
文件读写(1)--页面缓冲(Page Cache)的管理R.wen 一、本文分析文件的读写过程。当用户进程发出一个read()系统调用时,它首先通过VFS从disk cache中去查找相应的文件块有没有已经被缓存起来,如果有,则不需要再次从设备中去读,直接从CACHE中去拷贝给用户缓冲区就可以了,否则它就要先分配一个缓冲页面,转载 2009-12-20 10:55:00 · 916 阅读 · 0 评论 -
文件读写(2)
二、文件读过程我们先看标准的读过程。1、准备工作。通过VFS层,及一些初始化操作,为真正的读操作做准备。首先是用户进程通过read系统调用发出一个读请求:asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count){转载 2009-12-20 10:56:00 · 674 阅读 · 0 评论 -
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 · 1093 阅读 · 0 评论 -
linux deadline I/O调度算法分析笔记
linux deadline I/O调度算法分析笔记deadline算法的核心就是在传统的电梯算法中加入了请求超时的机制,该机制主要体现在两点:(1)请求超时时,对超时请求的选择。(2)没有请求超时时,当扫描完电梯最后一个request后,准备返回时,对第一个request的选择。基于以上两点,平衡了系统i原创 2010-02-06 21:31:00 · 2456 阅读 · 0 评论 -
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 · 886 阅读 · 0 评论 -
Linux slab 分配器剖析
良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在过去,堆内存管理器是实际的规范,但是其性能会受到内存碎片和内存回收需求的影响。现在,Linux® 内核使用了源自于 Solaris的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配。本文将探索 slab分配器背后所采用的思想,并介绍这种方法提供的接口和用法。动态内存管理转载 2009-10-01 22:05:00 · 563 阅读 · 0 评论 -
Linux Page Cache机制
1 、前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使用得非常广泛,它与 Windows、UNIX一起占据了操作系统领域几乎所有的市场份额。特别是在高性能计算领域,Linux已经成为一个占主导地位的操作系统,在2005年6月全球TOP500 计算机中,有 301 台部署的是 Linux 操作系统。因此,研究和使用Linux转载 2009-06-21 20:19:00 · 17727 阅读 · 0 评论 -
Linux环境进程间通信(五): 共享内存(上)
2003 年 5 月 01 日共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易见的好处是效率高,因为进程转载 2009-08-20 11:08:00 · 515 阅读 · 0 评论 -
Linux设备驱动编程之阻塞与非阻塞 2
+还有一个与设备阻塞与非阻塞访问息息相关的论题,即select和poll,select和poll的本质一样,前者在BSDUnix中引入,后者在SystemV中引入。poll和select用于查询设备的状态,以便用户程序获知是否能对设备进行非阻塞的访问,它们都需要设备驱动程序中的poll函数支持。 驱动程序中poll函数中最主要用到的一个API是poll_wait,其原型如下:转载 2008-11-30 15:56:00 · 668 阅读 · 0 评论 -
Linux设备驱动编程之阻塞与非阻塞 1
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。 在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。waitqueue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础转载 2008-11-30 15:47:00 · 676 阅读 · 0 评论 -
如何编写Linux设备驱动程序
Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经原创 2008-11-30 14:53:00 · 479 阅读 · 0 评论 -
Linux内核对I/O端口的管理实现
本文主要从内核实现的角度分析Linux 2.4.0内核IO子系统中对IO端口资源的管理的实现原理。本文是为那些想要深入分析Linux的IO子系统的读者和设备驱动程序开发人员而写的。 几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式原创 2008-11-28 15:14:00 · 946 阅读 · 0 评论 -
Linux下PCI设备驱动程序开发基本框架
PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备驱动程序的基本框架。一、PCI总线系统体系结构PCI是外围设备互连(Peripheral ComponentInterconnec转载 2008-11-27 14:02:00 · 625 阅读 · 0 评论 -
PCI驱动程序实现
1. 关键数据结构PCI 设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设原创 2008-11-27 13:42:00 · 949 阅读 · 0 评论 -
Linux设备模型之tty驱动架构分析
一:前言Tty这个名称源于电传打字节的简称。在linux表示各种终端。终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标。输出设备显示器的控制终端和串口终端.也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么将它们统一建模的呢?这就是我们今天要讨论的问题.二:tty驱动概貌Tty架构如下所示:500)this.width=500;" border=转载 2008-11-20 16:24:00 · 799 阅读 · 0 评论 -
字符设备驱动 架构分析
Char Device Driver相关数据结构:struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t d原创 2008-11-22 11:26:00 · 769 阅读 · 0 评论 -
Linux设备驱动程序设计实例
Linux系统中,设备驱动程序是操作系统内核的重要组成部分,在与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设备驱动程序,可以深入理解Linux系统和进行系统开发。本文通过一个简单的例子来说明设备驱动程序的设计。 1、程序清单 #ifndef __KER原创 2008-11-30 14:09:00 · 742 阅读 · 0 评论 -
在内核中实现realloc
/** The wrapper for allocating/releasing dynamic memory inside the kernel** Authors: Wensong Zhang ** This program is free software; you can redistribute it and/or*转载 2009-02-15 11:32:00 · 1173 阅读 · 0 评论 -
利用udev在/dev下动态生成/移除设备文件
利用udev在/dev下动态生成/移除设备文件用udev在/dev/下动态生成设备文件,这样用户就不用手工调用mknod了。利用的kernel API: class_create : 创建class class_destroy : 销毁class class_device_create :转载 2008-12-05 23:19:00 · 458 阅读 · 0 评论 -
电阻式触摸屏的基本结构和驱动原理
四线电阻式触摸屏 四线电阻式触摸屏的结构如图1,在玻璃或丙烯酸基板上覆盖有两层透平,均匀导电的ITO层,分别做为X电极和Y电极,它们之间由均匀排列的透明格点分开绝缘。其中下层的ITO与玻璃基板附着,上层的ITO附着在PET薄膜上。X电极和Y电极的正负端由“导电条”(图中黑色条形部分)分别从两端引出,且X电极和Y电极导电条的位置相互垂直。引出端X-,X+,Y-转载 2009-08-13 15:51:00 · 3052 阅读 · 0 评论 -
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 · 1185 阅读 · 0 评论 -
如何成为优秀的驱动开发工程师
作者:刘旭晖 Raymond转载请注明出处Email:colorant@163.com BLOG:http://blog.csdn.net/colorant/主页:http://sites.google.com/site/rgbbones/ 或许这样的标题,应该原创 2009-08-11 12:24:00 · 1356 阅读 · 0 评论 -
Linux I/O端口
I/O端口 关键词:设备管理、驱动程序、I/O端口、资源 申明:这份文档是按照自由软件开放源代码的精神发布的,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布内容的权利。发布本文的目的是希望它能对读者有用,但没有任何担保,甚至没有适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证(GPL),以及GNU自由文档协议(GFDL)。转载 2009-08-11 12:18:00 · 775 阅读 · 0 评论 -
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 · 1382 阅读 · 0 评论 -
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 · 1511 阅读 · 0 评论 -
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 · 3088 阅读 · 0 评论