
linux-drive
wh8_2011
这个作者很懒,什么都没留下…
展开
-
linux内核奇遇记之md源代码解读之一
linux内核奇遇记之md源代码解读之一转载请注明出处:http://blog.youkuaiyun.com/liumangxiong最近花了一段时间认真地学习了一下md代码,并且在原代码的基础上开发了一系列的新功能,这些新功能让md更完善、更适合于企业大容量存储,通过增加阵列缓存和bitmap优化大大提升了存储速度,提高了数据的可靠性,在任何掉电的情况下保证数据一致性,超级块异常情况下完全不影响转载 2016-11-07 11:49:21 · 1313 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十三raid5重试读
linux内核奇遇记之md源代码解读之十三raid5重试读转载请注明出处:http://blog.youkuaiyun.com/liumangxiong上节我们讲到条块内读失败,在回调函数raid5_align_endio中将请求加入阵列重试链表,在唤醒raid5d线程之后,raid5d线程将该请求调用retry_aligned_read函数进行重试读:[cpp] view转载 2016-11-07 12:04:25 · 654 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十二raid读写
linux内核奇遇记之md源代码解读之十二raid读写转载请注明出处:http://blog.youkuaiyun.com/liumangxiong我们都知道,对一个linux块设备来说,都有一个对应的请求队列。注册在这个请求队列上的请求就是该块设备的请求入口。对于raid来说,分配struct mddev时就已经设置好了,在函数md_alloc中有这样的代码:[cpp] vi转载 2016-11-07 12:03:25 · 1186 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十一raid5d
linux内核奇遇记之md源代码解读之十一raid5d转载请注明出处:http://blog.youkuaiyun.com/liumangxiong正是有了上一篇的读写基础,我们才开始看raid5d的代码。raid5d不是读写的入口,也不是读写处理的地方,只是简简单单的中转站或者叫做交通枢纽。这个枢纽具有制高点的作用,就像美国在新加坡的基地,直接就控制了太平洋和印度洋的交通枢纽。[转载 2016-11-07 12:01:48 · 598 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程
linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程 转载请注明出处:http://blog.youkuaiyun.com/liumangxiong上一节讲到在raid5的同步函数sync_request中炸土豆片是通过handle_stripe来进行的。从最初的创建阵列,到申请各种资源,建立每个阵列的personality,所有的一切都是为了迎接数据流而作的准备。就像我们寒窗苦转载 2016-11-07 12:00:42 · 583 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之九阵列raid5同步函数sync_request
linux内核奇遇记之md源代码解读之九阵列raid5同步函数sync_request转载请注明出处:http://blog.youkuaiyun.com/liumangxiong我们再来回顾一下整个场景:1)在运行阵列的时候调用md_wakeup_thread唤醒主线程2)主线程调用md_check_recovery检查同步3)md_check_recovery函数中检查需要同步调用转载 2016-11-07 11:59:23 · 766 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之八阵列同步二
linux内核奇遇记之md源代码解读之八阵列同步二转载请注明出处:http://blog.youkuaiyun.com/liumangxiong在上一小节里讲到启动同步线程:[cpp] view plain copy7824 mddev->sync_thread = md_register_thre转载 2016-11-07 11:57:08 · 833 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之七阵列同步一
linux内核奇遇记之md源代码解读之七阵列同步一转载请注明出处:http://blog.youkuaiyun.com/liumangxiong阵列同步在md_do_sync,那么入口在哪里呢?就是说阵列同步触发点在哪里呢?听说过md_check_recovery吧,但这还不是同步的入口点。那raid5d函数是入口点吧?如果要认真分析起来还不算是。真正的同步入口点在do_md_run函数,就是在运转载 2016-11-07 11:55:46 · 543 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之六
linux内核奇遇记之md源代码解读之六转载请注明出处:http://blog.youkuaiyun.com/liumangxiongraid10的run函数与raid5的run函数最大区别在于setup_conf,那就直接深入核心:[cpp] view plain copy3540 static struct r10conf *setup_co转载 2016-11-07 11:55:01 · 766 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之五
linux内核奇遇记之md源代码解读之五转载请注明出处:http://blog.youkuaiyun.com/liumangxiong如果看懂了raid1阵列的run函数,那么看raid5阵列run就非常轻松了,因为两者要做的事情都是大同小异。raid5的run函数很长,但很大一部分跟创建运行是没有关系的,特别是有一段跟reshape相关的,大多数系统都不关注该功能,因此可以直接跳过。经过删减转载 2016-11-07 11:54:04 · 465 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之四
linux内核奇遇记之md源代码解读之四转载请注明出处:http://blog.youkuaiyun.com/liumangxiong运行阵列意味着阵列经历从无到有,建立了作为一个raid应有的属性(如同步重建),并为随后的读写做好的铺垫。那么运行阵列的时候到底做了哪些事情,让原来的磁盘像变形金刚一样组成一个新的巨无霸。现在就来看阵列运行处理流程:[cpp] view plain copy转载 2016-11-07 11:52:54 · 1498 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之三
linux内核奇遇记之md源代码解读之三转载请注明出处:http://blog.youkuaiyun.com/liumangxiong这一节我们阅读阵列的创建过程。按照常理出牌,我们到ioctl中找阵列创建命令,md对应的ioctl函数是md_ioctl,当找对应的cmd命令字时,却完全没有类似CREATE_ARRAY的命令,那么就说明md设备并不是通过ioctl函数来创建的。其实如果我们仔细转载 2016-11-07 11:51:30 · 1110 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之二
linux内核奇遇记之md源代码解读之二转载请注明出处:http://blog.youkuaiyun.com/liumangxiong在编译完成linux内核源代码的时候,drivers/md目录下会生成多个ko文件,那么这些内核模块哪一个先加载,哪一个后加载的呢?例如md-mod.ko, raid5.ko, raid10.ko,这些模块是一起加载的呢,还是有先后顺序呢?如果熟悉linux内核编程的话转载 2016-11-07 11:50:21 · 1114 阅读 · 0 评论 -
Linux芯片级移植与底层驱动(基于3.7.4内核)
1. SoC Linux底层驱动的组成和现状为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU hotplug以及底层的GPIO、clock、pinctrl和DMA硬件的封装等。定时器节拍、中断控制器、SMP启动和CPU hotplug这几部分相对来说没有像早期GPIO、clock、pinctrl和DMA的实现那么杂乱转载 2016-11-15 09:55:49 · 824 阅读 · 0 评论