linux IDE驱动
文章平均质量分 81
licl2008
这个作者很懒,什么都没留下…
展开
-
linux2.6下IDE驱动分析
近段时间由于项目上的需要不得不关注linux下IDE硬盘的实现,目的是为了移植IDE接口的硬盘到S3C2440平台上,采用的驱动方式是PIO模式。因此在分析代码之余做了些简单的笔记,一则加深印象,二来方便对linux设备驱动感兴趣的朋友,多多交流。由于整个IDE驱动实现比较复杂,加之分析过程比较充忙,难免有许多错误之处,请发现问题的朋友能帮忙指正。这里是以linux2.6.32内核为基础,重点分析ide硬盘驱动的实现。通过前面子系统的分析,不难发现任何一个底层驱动的实现都离不开其他内核模块的支持。同时内核对原创 2010-10-13 11:05:00 · 2319 阅读 · 2 评论 -
linux IDE驱动分析之Ide_driver的注册(一)
<br />Ide_driver的注册(一)<br /><br />前面的故事中大家都知道,linux的设备驱动是以模块的形式加载的。那么Ide_driver的注册肯定也不例外。按照常规也应该有一个module_init()。早在开始讲述ide故事的时候我们就看过kconfig和makefile这份内核地图了,在里面我们列出了我们所关心的.c文件。并且看到其中的generic ATA/ATAPI disk support感觉到了和我们接下来要说的generic disk有莫大的关系,他所对应的文件ide_原创 2010-10-15 19:05:00 · 3272 阅读 · 1 评论 -
linux IDE驱动分析之Ide_driver的注册(三)
<br />Ide_driver的注册(三)<br /><br />Linux内核代码之所以如此精辟,我觉得很主要的一个原因是容易让人产生健忘,这样前面说的后面联系不上,猛然回头一看的时候,很容易让人产生扑朔迷离的感觉,从而衬托出他的一种境界。当然,要说清楚这里的这个故事就得回到N年以前我们讲到的一个传说。早在ide-generic中add-host的时候我们通过层层调用最终通过request_irq申请了一个ide中断,当说到对应的中断向量是ide_intr的时候我们妥协了,说以后有用到的时候再来分析。今原创 2010-10-15 19:54:00 · 1766 阅读 · 0 评论 -
linux IDE驱动分析之Ide_driver的注册(二)
<br />Ide_driver的注册(二) <br /> <br />还记得很久很久以前,当我们还在讲述ide_generic的那段青涩往事的时候,讲过一个static int ide_init_queue(ide_drive_t *drive) 函数,他里面调用了一个q = blk_init_queue_node(do_ide_request, NULL, hwif_to_node(hwif));。对没错就是他do_ide_request,当时我们还单独把它提出来说迟早有一天他会翻身做人的。没想到到了今原创 2010-10-15 19:37:00 · 1821 阅读 · 0 评论 -
linux IDE驱动分析之真正的数数据传输
<br />故事发展到今天,看到了块设备的注册以后,也将近了尾声。在剩下的日子里面我们了解一下块设备的IO请求是如何作用在硬件上面的。<br />前面我们说过do_ide_request是整个IDE接口驱动处理IO请求的开始,然后会调用然后会调用start_request来处理这个任务。在上面我们分析中我们只看了343-344行,因为前面的调用中是处理REQ_TYPE_ATA_TASKFILE事务的,我们执行了execute_drive_cmd就直接返回了。对于硬盘的数据传输等过程我们就没有那么早返回了,所原创 2010-10-15 20:09:00 · 1832 阅读 · 0 评论 -
linux IDE驱动分析之总线枚举
<br />总线枚举<br />[/linux/driver/ide/Ide.c]<br />155struct bus_type ide_bus_type = {<br />156.name= "ide",<br />157.match= ide_bus_match,<br />158.uevent= ide_uevent,<br />159.probe= generic_ide_probe,<br />160.remove= generic_ide_remove,<br />161.shutdown=原创 2010-10-15 19:00:00 · 1432 阅读 · 0 评论 -
linux IDE驱动分析之IDE总线、驱动注册(五)
<br />IDE总线、驱动注册(五)<br /><br />一路走来,感觉和do_probe一起走了好久好久,现在他总算快要离我们而去了,还是回忆一下和他走过的快乐时光,do_probe做的最有意义的一件事情就是调用ide_dev_read_id完成了硬盘identify数据的读取。离开do_probe,回到probe_for_drives中来的时候发现我们还只是刚刚开始…..<br />489-493行我想我们没有研究的必要了,毕竟是和ATAPI,出错有关了。<br />495行判断一下设备的存在性,要原创 2010-10-13 14:50:00 · 2034 阅读 · 0 评论 -
linux IDE驱动分析之IDE总线、驱动注册(四)
<br />IDE总线、驱动注册(四)<br /><br />418行是个宏定义<br />#define OK_STAT(stat,good,bad)(((stat)&((good)|(bad)))==(good))<br />这个宏看上去有点好玩,就是说只有好的,没有坏的就认为是好….<br />对应到我们程序的上下文就是“现在的状态是准备好,而且不忙,那么就返回1”<br />420行调用ide_dev_read_id(drive, cmd, id, 0),跟踪一下源码如下:<br />[ide_ge原创 2010-10-13 14:37:00 · 2759 阅读 · 2 评论 -
linux IDE驱动分析之IDE总线、驱动注册(三)
<br />IDE总线、驱动注册(三)<br /><br /> <br />好了,闲话少叙仍旧回到ide_host_register中来….<br />1386行ide_port_apply_params(hwif);这是关于模块参数的,模块加载的时候可以指定一定的参数,这个在《内核对子系统或者模块的初始化.pdf 》中已经有了说明。这里呢我们还是不妨进去看看,还是比较简单的:<br /><br />[ide_generic_init]->[ide_host_add]->[ ide_host_registe原创 2010-10-13 14:30:00 · 2481 阅读 · 2 评论 -
linux IDE驱动分析之IDE总线、驱动注册(二)
<br />IDE总线、驱动注册(二)<br />回到ide_host_alloc()中来,继续向前走…<br />1313行又遇到一个ide_find_port_slot(),源码如下:<br /><br />[ide_generic_init]->[ide_host_add]->[ ide_host_alloc]->[ ide_find_port_slot]<br />1195/**<br />1196 *ide_find_port_slot-find free port slot<br />1197原创 2010-10-13 14:18:00 · 1614 阅读 · 0 评论 -
linux IDE驱动汇总
<br />整个ide接口的驱动实现比较复杂,但对于移植所做的工作就相对<br />较少了。下面链接是对linux2.6.32内核IDE驱动移植成功的源码,及其相关的硬件电路图。http://download.csdn.net/source/2773611原创 2010-10-21 19:21:00 · 1455 阅读 · 1 评论