- 博客(57)
- 收藏
- 关注
转载 select(poll)系统调用实现解析(二)
select(poll)系统调用实现解析(二)分类: linux OS 2011-06-26 20:27403人阅读 评论(0)收藏 举报 二、重要结构体之间关系 比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、struct poll_tab
2012-04-25 21:45:15
662
转载 Linux poll机制精彩分析
Linux poll机制精彩分析2011-07-17 16:32 355人阅读 评论(0)收藏 举报原始地址:http://blogold.chinaunix.net/u3/102839/showart_2283496.html (偶这里有一定改动)所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用o
2012-04-25 21:44:19
750
转载 linux poll工作机制
poll的作用:同时探测n个drivers,找到可以直接使用的driver,从而尽量block进程。以下kernel源代码来自于: 与 fs/select.cstatic unsigned int scull_p_poll(struct file *filp, poll_table *wait){ struct scull_pipe *dev = filp->privat
2012-04-24 21:28:16
807
转载 Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分析
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数
2012-04-24 20:37:15
729
转载 Linux 2.6内核中新的锁机制--RCU
一、 引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就
2012-03-22 16:56:10
503
原创 MagicBoy2010 --- ·《深入Linux设备驱动程序内核机制》博文
http://blog.chinaunix.net/uid/23769728/frmd/-1.html
2012-03-22 16:54:43
866
转载 盘点Linux内核源码中使用宏定义的若干技巧(1)
盘点Linux内核源码中使用宏定义的若干技巧(1) (2012-03-20 21:30) 标签: Linux内核源码 宏定义 宏的使用技巧 分类:Linux系统内核 在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发:1. 类型检查比如module_init的宏定义:
2012-03-22 16:52:38
1368
转载 《深入Linux设备驱动程序内核机制》第2章 字符设备驱动程序 V1.2
《深入Linux设备驱动程序内核机制》第2章 字符设备驱动程序 V1.2 (2012-03-19 20:14)标签: 设备 blank border target Linux 分类:Linux设备驱动 截止目前最新的更新... 第2章 字符设备驱动程序(V1.2).pdf
2012-03-22 16:50:36
679
转载 Linux系统下init进程的前世今生
Linux系统下init进程的前世今生 (2012-03-11 20:37) 标签: Linux 内核进程 init进程 系统调用 x86 int 指令 分类:Linux系统内核 Linux系统中的init进程(pid=1)是除了idle进程(pid=0,也就是init_task)之外另一个比较特殊的进程,它是Linux内核开始建立起进程概念时第一个通过k
2012-03-22 16:45:22
998
转载 Linux内核中的init_task进程和idle进程
当Power on PC时,BIOS的代码开始执行,然后是Linux初始化的代码,这其中大约很长一段时间Linux都没有进程这一概念,但是这不影响CPU执行它的二进制代码。如果不是多任务以及进程调度的需要,Linux内核可以一直这样走下去。但是因为多任务的需求,Linux必须能支持任务这一特性,任务即进程,或者更简单地说由task_struct对象实例所代表的一段代码的集合,用以完成特定的任务
2012-03-22 16:44:15
6040
转载 Linux设备驱动模型中的热插拔机制及实验
热插拔(hotplug)不一定非要指类似U盘那样的插入拔出,此处的热插拔广义上讲,是指一个设备加入系统,内核如何通知用户空间。举个简单的例子,如果你的电脑中有块PCI网卡,针对该网卡的驱动程序以内核模块的形式被编译(obj-m),那么Linux系统在启动过程中是如何自动加载该网卡的驱动模块呢?大家都知道现在udev负责干这事,其实除了udev,还可以有其他的手法,你自己就可以这样做。我们先
2012-03-22 16:43:08
1215
转载 内核空间几种长延时函数实现策略的优劣讨论
内核空间几种长延时函数实现策略的优劣讨论 (2012-02-27 22:04) 标签: Linux设备驱动程序 内核模块延时函数 进程调度 分类:Linux设备驱动 这里所谓的长延时,是指其实现时间延时的粒度可以在HZ这一水准上。《深入Linux设备驱动程序内核机制》第8章"时间管理"中提到了好几种实现延时功能的机制,包括长延时短延时等,对每一种延时机制的优劣都有
2012-03-22 16:39:46
1075
转载 通过ramdisk内核模块研究Linux文件系统
在《深入Linux设备驱动程序内核机制》第11章"块设备驱动程序” 11.2节当中给出了ramdisk的两个版本的实现,这个示例的目的除了让读者直观感受一下编写一个块设备驱动程序的大体框架和关键元素之外,还特别提到“这个例子还有一个非常重要的潜在用途,那就是通过ramdisk来研究Linux的文件系统,比如ext3等,因为mkfs.ext3工具会将ext3文件系统做到这个ramdisk中,这意味着
2012-03-22 16:35:09
626
转载 再谈Linux内核中的RCU机制
再谈Linux内核中的RCU机制 (2012-02-22 22:10) 标签: Linux 分类:Linux设备驱动RCU的设计思想比较明确,通过新老指针替换的方式来实现免锁方式的共享保护。但是具体到代码的层面,理解起来多少还是会有些困难。在《深入Linux设备驱动程序内核机制》第4章中,已经非常明确地叙述了RCU背后所遵循的规则,这些规则是从一个比较高的视角来看,因为我觉得过多
2012-03-22 16:31:17
899
转载 详解Linux中断处理中的hardirq与softirq机制
今天在ChinaUnix论坛内核源码版上与linuxfellow网友讨论到hardirq和softirq的问题,虽然在《深入Linux设备驱动程序内核机制》(以下简称“ILDD”)第5章“中断处理”对此已有详细的解读,但是我觉得还是有必要再花点时间深入探讨一下这两者的区别。因为此前关于ARM上的中断处理我已经在另一篇帖子解密ARM based Linux内核中断处理框架 中讨论过,所以下面的讨
2012-03-22 16:30:14
1200
转载 Linux内核中的中断栈与内核栈的补充说明
Linux内核中的中断栈与内核栈的补充说明 (2012-02-20 20:17) 标签: Linux内核栈 中断栈 Linux中断处理 设备驱动 分类:Linux系统内核 中断栈与内核栈的话题更多地属于内核的范畴,所以在《深入Linux设备驱动程序内核机制》第5章“中断处理”当中,基本上没怎么涉及到上述内容,只是在5.4节有些许的文字讨论中断栈在中断嵌套情形下
2012-03-22 16:28:47
5292
转载 s3c6410 framebuffer分析
本文介绍了s3c6410中的framebuffer,参考代码为Linux2.6.28。网上介绍framebuffer的文章很多,内核代码中也有关于framebuffer的文档,所以本文只介绍一些其它文章较少介绍的部分。1. Overview在嵌入式系统中,会有一块内核空间保存LCD上每一个象素需要被显示的值。系统运行时,CPU的显示控制器会自动从这块内存读取内容,然后发送到LCD显
2011-11-02 21:38:02
1174
转载 基于S3C6410&WINCE6.0的LCD驱动详解
花了几天时间把6410的点屏代码研究了一下,这里分享出来供大家参考。 先大致说下目前LCD的类型以及渠道。针对手持设备,如手机,PMP,MID,GPS,UMPC,相机等,大多采用的是TFT,LTPS(低温多晶硅屏),OLED等。其中以TFT屏用的最广泛,LTPS屏以其色彩鲜艳,视角广而闻名,目前也逐渐多起来。OLED显示效果是以上三者中最好的,能够达到全视角,而且在阳光照射下也能清晰
2011-11-01 22:28:03
1429
转载 裸机系列--S3C2400之LCD
lcd型号 索尼3.5寸TFT液晶屏开始lcd的驱动是在上个学期末,那时候快要期末了,要准备考试什么的,大概看了一下没看一下的,感觉学习效率很低,考试完后家里面要帮忙干农活,就回家呆了半个月,回到学校已经是8月份了,本来在回来后不久把lcd驱动了弄了一下,也准备总结一下的,但是后面的linux计划,也不知道是什么刺激 了我的神经,就感觉要加快进度学习了,后来拖着就到了今
2011-10-31 21:28:53
1922
1
转载 S3C6410开发全纪录(二)《如何计算内存大小,并在UBOOT中调整内存大小》
前章我们已经可以制作出用来启动的SD卡了,并将自己编译的UBOOT烧录到了SD卡中这份UBOOT代码中的内存配置肯定和手头的开发板不一致,这里我们将搞清楚如何修改内存大小,并说清楚内存大小到底是如何计算的一、关于内存大小的计算1)硬件的型号,在飞凌的开发板中128M内存 采用的是 K4X51163PC 可以看出来 这颗芯片是 总大小为512 bit 位宽 为16256M内存 采
2011-10-29 22:06:30
1345
转载 S3C6410开发全纪录(三)《UBOOT中添加DM9000AE网卡驱动》
我们获得的UBOOT的代码中实际是有DM9000的网口驱动的,位于:driver/dm9000x.c在S3C6410的配置中,中并没有将之打开,而其他的芯片中有使用特别需要注意的是dm9000的驱动与dm9000AE的驱动还是有区别的,如果直接使用代码中自带的dm9000驱动流程,会出现无法收到数据的情况一、添加dm9000AE的驱动view plainprint?
2011-10-29 22:03:06
887
转载 s3c6410 LCD在uboot下的驱动
uboot下有现成的LCD驱动模板,原来是用于MPC823和PXA250的,我们需要在s3c6410这个ARM11的uboot中增加LCD的驱动,可以在这个基础上修改。具体分以下几步: 1. 修改配置头文件,是整个工程支持LCD。 在修改include/configs/smdk6410.h 增加一行 #define CONFIG_LCD
2011-10-29 21:56:36
3628
1
转载 LCD与ARM,详细
一 实验内容简要描述1.实验目的学会驱动程序的编写方法,配置S3C2410的LCD驱动,以及在LCD屏上显示包括bmp和jpeg两种格式的图片2.实验内容 (1)分析S3c2410实验箱LCD以及LCD控制器的硬件原理,据此找出相应的硬件设置参数,参考xcale实验箱关于lcd的设置,完成s3c2410实验箱LCD的设置(2)在LCD上显示一张BMP图片或JPEG图片3.
2011-10-29 21:46:34
6248
转载 S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一)
一、开发环境主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/C
2011-10-29 21:45:04
849
转载 OK6410 裸机中断最简单代码
近来想学ARM开发,使用了S3C6410核的OK6410开发板,为了学习ARM的底层技术,想从裸机开始学习,结果一路挫折,问题多多,经过很长一段时间的摸索也没有太多成果,因为平常上班,项目的事情也忙,看书的时间也不够多,结果走进中断编程都经过了将近一个月!! 中断,我认为在初学单片机开发的时候是一个比较麻烦的事情,所有想把这个东西弄懂,结果在网上找了遍,都没有找到可以用的代码!为什么呢?因
2011-10-20 16:42:06
2402
转载 汇编的进位与溢出
汇编的进位与溢出对于无符号数来说,不存在溢出的问题,而对有符号数来说,不存在进位的问题一个字节(8位) 的数有256个 (2的8次方)一个字(16位) 的数有65536个 (2的16次方)8个二进制位能够表达的无符号数范围是:0 ~ 255
2011-09-08 20:08:34
1057
转载 VMware5.5.3下安装RedHat9与windows共享文件
1. 利用VMware工具中的共享文件夹功能实现文件供享;1) 启动PC中的VMware;2) 在VMware窗口中选择“虚拟机(M)”下拉菜单;在菜单中选择“按装VMware工具(V)”;3) 开启一个终端窗口,准备键入命令;4) #ls /mnt/cdrom/
2011-08-31 16:18:25
693
转载 RHEL6通过安装光盘或ISO文件制作本地yum源的方法
RHEL6通过安装光盘或ISO文件制作本地yum源的方法rhel6中默认没有.repo文件,需要自己写一个。在使用yum安装之前是必须配置yum源的, 在不能联网的情况下, 可使用DVD光盘或ISO文件做本地yum源. 下面以RHEL6.0为例, 其它版本类似.1
2011-08-31 16:11:52
1479
1
转载 C++中派生类对基类成员的三种访问规则
C++中派生类对基类成员的三种访问规则C++中派生类对基类成员的访问形式主要有以下两种:1、内部访问:由派生类中新增成员对基类继承来的成员的访问。2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。今天给大家介绍在3中继承方式下,派生类对基
2011-08-07 16:12:53
8718
转载 为什么C++提倡用const_点点滴滴
为什么C++提倡用const2009年06月08日 星期一 下午 05:55尽量用const和inline而不用#define这个条款最好称为:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。这是问题之一。再看下面的语句:#define ASPECT_RATIO 1.653编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入
2011-06-13 19:51:00
639
转载 set、env、export——Linux中的环境变量命令
<br />Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境 变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 <br />什么是环境变量<br />环境变量是一个具有 特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。许多用户(特别是那些刚接触Linux的新手)发现这些变量有些怪异或者难以控制。其 实,这是个误会:通过使用环境变量,你可以很容易的修改一个牵涉到一个或多
2011-05-12 13:53:00
521
转载 神器VIM配置文件进阶v1.0beta
这个世界上有三种人,一种是用VI的人,一种是使用Emacs的,剩下的就是第三种人.本文原文来自于牛人Amir Salihefendic的VIM配置文档(网站地址:http://amix.dk/vim/vimrc.html) 全英文的说明,而且说的模模糊糊的,可苦了我这样的英盲了....., 希望我的部分翻译可以给你们一些帮助,少走些弯路.大家可以去作者的博客看一下. 我翻译的这篇配置文档是2006年的,后面该牛人还进行过数次更新,但是更新主要涉及到细节部分.所以建议大家仔细学习
2011-05-04 15:35:00
3291
4
转载 史上最强vim配置文件vimrc
读本文之前请注意:1. 本文的目标是提供一些vim的使用技巧,利用这些技巧可以提高vim的操作效率。部分技巧在vi上也可以使用,但是现在基本上都是用vim了。2. 本文是整理和总结使用技巧,而非讲解vim入门,因此不会涉及最基本的使用,例如如何上移或下移光标,对此类操作请参阅任何一本vim或者vi教程。3. 本文阅读对象是了解了vim的基本操作,而希望高效地利用vim进行工作的人。熟练使用vim的人自然不必细读,如果能留下您的宝贵意见,本人将感激不尽。4. 本文由本人搜集整理,转载请注明出处
2011-05-03 22:40:00
3864
1
转载 Ubuntu7.10 vi/vim搭建超级c/c++编程环境
<br />人家写自己感觉有用就到过来 …(如发生版权问题請通知)<br />原文地址http://blog.chinaunix.net/u/30958/showart_507405.html<br />以下为拷贝个人未添加任何修改:<br />在没有怎么太深的接触vi/vim之前,也曾经搞不懂为什么有好多linux下的程序员说vi/vim是个超级的代码编辑器或者编译器,也有不少的(我认为是刚在linux编程不久的人)说,“。。头让门挤啦,有那么多功能强大的linux环境下的IDE不用,竟然
2011-05-03 22:28:00
1399
原创 Vim的使用技巧-自动闭合成对符号
(,“,‘,[符号的自动闭合<br />我们可以用简单的键映射来实现以上这些成对符号的闭合,也就是在插入模式下输入这些符号的左边部分,键映射将自动完成右边部分,并保持插入模式,光标保持在成对符号的当中以便在其中输入字符。比如: :inoremap ( ()<Esc>i<br />以上的设置的意思是在插入模式时将输入的(转换为()然后回到正常模式,再用i回到插入模式,这时候光标位置正好落在)之前。同理可以完成其它符号的自动闭合。<br />但是这样的设置,在完成在成对符号中的输入后,要跳出成对符号继续输入时
2011-05-03 22:16:00
946
原创 红黑树插入和删除结点的全程演示
<br />红黑树插入和删除结点的全程演示<br /><br />作者:July、saturnman。<br />时间:二零一一年三月二十八日。<br />出处:http://blog.csdn.net/v_JULY_v。<br />声明:版权所有,侵权必究。<br />-----------------------------------<br />引言:<br /> 目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的阐述。而本人的红黑树系列
2011-04-18 21:52:00
868
转载 一步一图一代码,一定要让你真正彻底明白红黑树
<br />作者:July 二零一一年一月九日<br />-----------------------------<br />本文参考:<br />I、 The Art of Computer Programming Volume I<br />II、 Introduction to Algorithms, Second Edition<br />III、The Annotated STL Sources<br />IV、 Wikipedia<br />V、 Algorithm
2011-04-18 21:46:00
658
转载 红黑树c源码实现与剖析
<br />前言:<br /> 红黑树作为一种经典而高级的数据结构,相信,已经被不少人实现过,但不是因为程序不够完善而无法运行,就是因为程序完全没有注释,初学者根本就看不懂。<br /> 此份红黑树的c源码最初从linux-lib-rbtree.c而来,后经一网友那谁用c写了出来。在此,向原作者表示敬意。但原来的程序存在诸多问题,且全程序没有任何一行注释。没有一行注释的程序,令程序的价值大打折扣。<br /> 所以,我特把这份源码放到了windows xp+vc 6.0上,一行一行
2011-04-18 21:42:00
688
转载 红黑树算法的层层剖析与逐步实现
<br />引言: <br />昨天下午画红黑树画了好几个钟头,总共10页纸。<br />特此,再深入剖析红黑树的算法实现,教你如何彻底实现红黑树算法。<br />经过我上一篇博文,“教你透彻了解红黑树”后,相信大家对红黑树已经有了一定的了解。<br />个人觉得,这个红黑树,还是比较容易懂的。<br />不论是插入、还是删除,不论是左旋还是右旋,最终的目的只有一个:<br />即保持红黑树的5个性质,不得违背。<br />再次,重述下红黑树的五个性质:<br />一般的,红黑树,满足一
2011-04-18 21:40:00
467
转载 指针详解
<br />[转]这篇文章摘自网易广州社区的C语言版精华区。文章不错,不敢独享!作者girlrong是以前C语言版版主,她乐于助人,虚心诚恳,颇受网友欢迎。只可惜现在已退隐江湖了。 <br /><br /><br />第一章。指针的概念<br /><br />指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 <br /><br
2011-03-12 21:50:00
282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人