Linux内核开发理论帖
文章平均质量分 79
wustdatamining
这个作者很懒,什么都没留下…
展开
-
Linux内核开发之Helloworld
学了那么多程序语言,总是有一个Hello world开头,不禁感叹Hello world的强大。呵呵,废话少说,咋们的故事当然要从这个Hello world开始。 (1)linux开源当然少不了源代码的贡献,请看下边(至于什么是开源,悲剧的我现在也没整明白): #include #include MODULE_LICENSE("Dual BSD/GPL"); static int原创 2012-12-11 17:45:43 · 248 阅读 · 0 评论 -
Linux内核开发之异步通知与异步I/O(四)
“小王,接着昨天的来,你知道吗?在异步IO中,什么可以用来做为AIO的通知呢?”我用渴求的眼神望着她. "啊?那我咋知道,你说的我能记住就不错了,让我发明创造,我可是不会."小王委屈道。 “笨死了,我前边花了那么多的时间来讲信号之类的东西,联想一下信号作为异步通知的信号,也想的出来啊,告诉你,我当年用脚肢头都能想到,可你..真让我失望”我叹气到,“算了,也不怪你了,咱们开始继续学习吧“。 先上原创 2012-12-11 17:46:22 · 262 阅读 · 0 评论 -
Linux内核开发之异步通知与异步I/O(五)
“小王呢,今天开始讲AIO与设备驱动,这也是设备驱动通知与异步IO的最后一节了,下次咱们就要开始讲更高级的东西,比如中断啦,时钟等” 在Linux内核中,每个IO请求都对应一个kiocb结构体,其ki_filp成员指向对应的file指针,通过is_sync_kiocb可以判断某Kiocb时候为同步IO请求,如果非真,表示是异步IO请求。 块设备和网络设备本身就是异步的。只有字符设备驱动必须原创 2012-12-11 17:46:24 · 364 阅读 · 0 评论 -
Linux内核开发之中断与时钟(一)
“小王,醒醒,开始上课了,今天咱们开始讲中断,这可是高级东西,错过不补哈”我使劲推着睡梦中的小王。 “嗯?感情好啊,快点,快点”小王一听有新东西讲,像打了鸡血似的兴奋,连我都怀疑起她是不是性格中喜新厌旧。 不管那么多了,我讲我的,她厌她的… 啥叫中断?就是指cpu在执行过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU有返回原程序被中断的位置并继续执行原创 2012-12-11 17:46:27 · 270 阅读 · 0 评论 -
Linux内核开发之中断与时钟(二)
“小涛哥,快醒醒,快醒醒..”小王使劲推着睡梦中的我,“你不是说今天要讲昨天有关的典型模板实例吗…” “啊?小姐啊,现在才早上8点,还让人睡觉不,别吵”我一头钻进被子里说。 “不管,谁让你昨天不说完,还卖个小关子,害我昨天晚上都没睡好,想了一晚上…” 我揉揉蒙蒙的眼说:“行,权当看在你渴求的心情上,但只此一次,下不为例,我还想好好睡懒觉呢..” 昨天我们讲了有关中断方面的东西,鉴于小王你不太懂,我原创 2012-12-11 17:46:29 · 245 阅读 · 0 评论 -
Linux内核开发之中断与时钟(三)
晚上7点10分.. “小涛哥,这章不是叫Linux设备驱动程序之中断与时钟,前边你讲了中断,还给了我很多模版,我都看懂了,这次是不是要开始讲时钟了..” “真聪明,越来越喜欢你这聪明的样子了,说的不错,今天就要开始一个新的模块--内核时钟”我很少夸人,为啥今天夸她呢了,呵呵. 定时器,意思大家都明白,我就不说了,要是不明白,把它想成个闹钟总可以吧.. 定时器分为硬件和软件定时器,软件定时器原创 2012-12-11 17:46:32 · 280 阅读 · 0 评论 -
Linux内核开发之中断与时钟(四)
“小王,小王,今天可是这一章节最后一节了,知识点咱们前边都讲过了,今天主要是给你用前边的东西讲一个实际例子---秒字符设备驱动程序” 这个驱动程序会在被打开的时候初始化一个定时器并将其添加到内核定时器链表中,每秒输出一次当前的jiffies,这意味着,定时器处理函数中每次都要修改新的expires。不多说了,看代码分析:#include …//必要的系统头文件#define SECOND_MA原创 2012-12-11 17:46:37 · 260 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(一)
“小王,今天咱们开始讲有关内存和I/O访问的内容,心里先要有点低,这部分内容还是有点烦,有点难的哦”说着话,我心里都没底,怕吓着小王,不瞒你说,当时看这部分,我可是没少费劲。 “哦,那咋办,不能不学是不?没事,有小涛哥在,俺就不怕”小王信心十足的说。 “哦!看不出来,还让你来安慰我了”看着小王这充满信心的样子,我也没啥顾虑了。好了,深吸一口气,开始今天的课程。 我们知道,在X86中,有I/O原创 2012-12-11 17:46:39 · 287 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(二)
“小涛哥,咱们说Linux设备驱动程序说了那么久,怎么从来不说实际设备呢,顶多就说了下内存,总感觉驱动程序是和设备分离的,怎么关联起来..”小王思索着。 “不错,这也正是这次讲课的内容,设备I/O端口与I/O内存的访问”我啊,禁不住拍拍她的头。 对于一块实际的设备而言,通常会提供一组寄存器来用于控制设备,读写设备和获取设备状态,也就是我们常说的控制寄存器,数据寄存器和状态寄存器。这些寄存器可能原创 2012-12-11 17:46:42 · 306 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(三)
“小王,不瞒你说,我现在是悲喜交加啊,悲的是:这最后一章,我讲的是胆颤心惊(以前自己都没学好,现在也算还账了),喜的是每讲一张,我知道离结束就近了一点,赶快把这个东西过掉,进入下一环节,那又是我牛皮吹破天的时代了”看着小王期盼和怀疑的眼神,我,昔日的风采也不见了。 “没事的,小涛哥,其实说真的,不是我安慰你哈,从开始我什么都不懂,到现在我也算个入门级的高手了,都是你一手带过来的,我已经对你推崇备至原创 2012-12-11 17:46:44 · 306 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(四)
时间:晚上7点 地点:寝室中.. “小王,今天就不多话了,接着昨天没讲完的,不然连不起来了,都..”我催促着。 上节讲到kmalloc()申请的内存若要被映射到用户空间可以通过mem_map_reserve()设置为保留后进行。具体怎么操作呢,给你一个模版吧: // 内核模块加载函数int __init kmalloc_map_init(void){ ../申请设备号,添加c原创 2012-12-11 17:46:47 · 278 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(五)
“小王,告诉你一个好消息,最难理解的部分不知不觉中已经讲完了,今天的课程就简单多了,而且最重要的是咱们的Linux设备驱动核心理论课也差不多了…” “最难的部分?已经讲完了?我咋没感觉呢..你讲的真是太好了,太通俗易懂了,太..”小王调皮的说。 “切,就你嘴甜,我还不知道你啊,小脑筋..”我白了小王一样。 那么今天呢?今天就讲讲IO内存静态映射。在将Linux移植到目标电路板中,通常会建立外原创 2012-12-11 17:46:49 · 308 阅读 · 0 评论 -
Linux内核开发之异步通知与异步I/O(三)
小王,听说过AIO没?外国人,就这样,总是爱简写,简写的结果是咱们都不认识了。所谓AIO就是Asynchronous Input/Output异步输入/输出,基本思想是允许进程发起很多的I/O操作,而不用阻塞或等待任何操作的完成,稍后或在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。 “得得,你咋又跟我上起课来了呢,不是说好,今天CS吗?是不是跟我讲课特自信啊“小王抱怨到。 “啊?原创 2012-12-11 17:46:19 · 292 阅读 · 0 评论 -
Linux内核开发之异步通知与异步I/O(二)
“曾经有一份真挚的爱情摆在面前,我却不懂珍惜;曾经有一个承诺,我却倍感珍惜,今天一定要好好讲讲..” 讲讲啥,讲讲上节说的那个异步通知的例子呗,大家喜欢看代码,咋们就先上代码:struct globalfifo_dev {原创 2012-12-11 17:46:17 · 327 阅读 · 0 评论 -
Linux内核开发之简单字符设备驱动(上)
废话少说,先来介绍几个必须要知道的和字符设备有关的结构体,然后结合代码详细讲解。第一部分 必要的设备结构体1)linux 2.6内核中使用cdev结构体表示字符设备:struct cdev{ struct kobject kobj;//内嵌的kobject对象 struct module *owner;//所属模块 struct file_operations原创 2012-12-11 17:45:45 · 266 阅读 · 0 评论 -
Linux内核开发之简单字符设备驱动(下)
在上一篇中,我们介绍了有关简单字符设备驱动中那些简单但又必须要掌握的结构体和一些源码中核心的操作函数,这一节我们继续介绍有关源码部分的后续相关内容及测试使用的方法(在本文中同时也会给出完整的Makefile文件,方便大家调试)。 static const struct file_operations globalmem_fops ={ //这些就是上篇中所实现的所有操作该字符设备的函数接口,这原创 2012-12-11 17:45:48 · 340 阅读 · 0 评论 -
Linux内核开发之并发控制(一)
“小涛,你说十一黄金周,火车站,飞机场那些售票系统咋没一个宕掉的呢。你不宕掉也没关系,来两个卖错票的,说不定哥就去上海看世博,去北京看青梅竹马的表妹了…”小王抱怨道。 “晕死..哥鄙视你,你说都老大不小的人了,怎么脑子里天天都是MM之类的事了,能不能有点男子气概啊..”。 “靠,能跟你比啊,你是饱汉不知饿汉饥,要是像你一样十一和…” "嗯,啊,哼哼.."没等他说完,我赶忙塞了双臭袜子(哪天的也原创 2012-12-11 17:45:51 · 259 阅读 · 0 评论 -
Linux内核开发之并发控制(二)
上集说到哪儿了呢?瞧这记性,什么?说到"天要下雨,娘要嫁人"那段。。 这是谁在答话,废话,我当然知道讲到这里了,我是说驱动讲到哪里了。算了,不管了.. 话说Linux开源社区的开发者们做了什么工作呢,很简单: 利用spin_lock()/spin_unlock()作为自旋锁的基础,将它们和关中断local_irq_disable()/开中断local_irq_enable(),关底半部local_原创 2012-12-11 17:45:56 · 307 阅读 · 0 评论 -
Linux内核开发之并发控制(三)
算了,既然给你那么多秘籍了,也不在乎这剩下的两三招: 出招表五:顺序锁(seqlock) 使用顺序锁,读执行单元绝不会被写执行单元阻塞,同时写执行单元也不需要等待所有读执行单元完成读操作后才进行写操作。但是写执行单元之间仍然是互斥的。如果读执行单元在读操作期间,写执行单元已经发生了操作,那么,读执行单元必须重新读取数据,以便确保得到的数据是完整的。 致命弱点:顺序锁有一个限制,就是它必须要求被保护原创 2012-12-11 17:45:59 · 256 阅读 · 0 评论 -
Linux内核开发之并发控制(四)
出招表七:信号量(信号量其实和自旋锁是一样的,就是有一点不同:当获取不到信号量时,进程不会原地打转而是进入休眠等待状态) Linux系统中与信号量相关的操作主要有一下4种: 1)定义信号量 struct semaphore sem; 2)初始化信号量 void sema_init (struct semphore *sem, int val); //设置sem为val void原创 2012-12-11 17:46:02 · 251 阅读 · 0 评论 -
Linux内核开发之并发控制(五)
"小涛,还有多少啊,你看我本来就开玩笑似的说说火车票,飞机票的事,看MM的事,你在眉飞色舞,鸡飞狗跳的没完了呢…” "啊?怎么这样呢,本来一个寝室,做人的差别就那么大嗫,平时不好好学习,有问题了问我,给你免费教学,还满腹牢骚,也太不够朋友了吧…."我锤着桌子说. "朋友,我还不够朋友啊,你没听说吗:朋友为我,两肋插刀,我为朋友,插它两刀..“小王打断我,”听你念经似的,都三个小时了,你瞧,都来五了原创 2012-12-11 17:46:04 · 241 阅读 · 0 评论 -
Linux内核开发之并发控制(实例总结篇)
"小王,小王,别睡了,瞧你,咋还睡着了呢…"我催促他说. "现在是公元前还是公元后啊,我的MM等急了没.."呵呵,看他一脸傻笑。 提醒各位路过的MM,如果没有男友的,可以联系小王,电话:拐拐拐。“什么,我的,呵呵,没办法,谁让我这有才呢..” 算算前边有关并发控制的有关内容,都到五了,一连来了十一招,今天也不好意思再卖官子了,做一个最后的实例总结篇,下一节,就要开始新的内容了哦,没赶上的可要加油了原创 2012-12-11 17:46:07 · 392 阅读 · 0 评论 -
Linux内核开发之阻塞/非阻塞IO----等待对列
十一过后.. 小王也刚好即将大学毕业,现在要开始写简历,投简历,找工作了。 到了家工作单位,小王欣喜若狂,可再一看,心都凉了半截.. “咋了,小王,看你找工作,我都来了帮你大气,怕什么,不就人多点吗..”看着排到电梯口的长龙,我说(其实,我心里也害怕,可也不能说出来不是)。 “不是,你不知道,我并不怕面试上有问题,有你在,技术上还是问题吗,不相信自己还不相信你啊,我主要是怕连面试的机会都没有,你看原创 2012-12-11 17:46:09 · 339 阅读 · 0 评论 -
Linux内核开发之阻塞非阻塞IO----轮询操作
“小王,来聊聊,今天面试的情况怎么样,应该挺顺利的吧..”看着小王平淡的眉头,我问道。 “唉,别提了,你说,我的运气咋这差呢,面试前你不是给我讲了有关阻塞的问题吗,我见了面试官是吧,还跟他好好的用今天排队的例子说了有关阻塞的问题,但是..”小王哀声叹气地说到。 “别但是了,怎么啦..” “可问题是面试官压根就没打算问我有关阻塞的问题及解决方案,但是问我说:这样吧,你给我说说在Linux设备驱动中有原创 2012-12-11 17:46:12 · 232 阅读 · 0 评论 -
Linux内核开发之异步通知与异步I/O(一)
“小王,听说过锦上添花吧..”我拍拍下王的头说。“还锦上添花你,为你上次提的几个东东,我是头上长包..”小王气愤地瞪着我。“啊,为啥这样呢,本来还特意拒绝了MM的月份,抽出时间打算给你说点高级的东东,看来现在是不行了”我吃惊道,“这样吧,这次就给你讲些和前边有关的东西,也不失为锦上添花不是?”。“好,我也是这么打算的,就是没好意思说,今天讲些啥呢?”小王暗淡的眼光总算闪了闪。(为啥这么原创 2012-12-11 17:46:14 · 361 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(六)
“小王,再告诉你一个好消息,今天是咱们设备驱动程序核心基础理论的最后一节课了,战斗就已经到了最后一刻了,开心不”我眉飞色舞的对小王说。 “嗯,开心,我挣扎许久了,终于结束了,只是..”小王伤感的说“只是我觉得怎么能一下就没了呢, 心里空荡荡的”. “没关系的…”看着小王噘着嘴调皮而又可爱的样子,我也心软了”核心的理论是讲完了,但你不是没动过手吗,还有很多路要走呢..我还舍…”我一把蒙住自己的嘴.原创 2012-12-11 17:46:52 · 290 阅读 · 0 评论