免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 872 | 回复: 0

[硬件及驱动] 有人知道内核启动时如何从initramfs(准确说是rootfs)中加载磁盘驱动的源代码吗 [复制链接]

论坛徽章:
8
羊年新春福章
日期:2015-03-19 02:03:312015亚冠之北京国安
日期:2015-06-16 22:04:45程序设计版块每日发帖之星
日期:2015-06-23 22:20:00每日论坛发贴之星
日期:2015-06-23 22:20:002015亚冠之首尔
日期:2015-06-24 19:18:072015亚冠之广州恒大
日期:2015-08-06 10:29:442015亚冠之柏太阳神
日期:2015-11-02 11:21:0515-16赛季CBA联赛之辽宁
日期:2015-12-09 15:05:02
发表于 2015-03-19 02:03 |显示全部楼层
本帖最后由 firocu 于 2015-03-19 16:40 编辑

从下午一只看到现在, 感觉有点笨啊, 还是没找到,
我在3.17的代码定位到了sd_probe_async这个函数, 可能就是, 但是死活找不到request_module()调用的地方.


kernel_init-> async_synchronize_full();这个函数等待上面函数sd_probe_async执行完磁盘驱动旧加载上了.

睡觉, 每天都不想晚睡啊...
===========================待论证的答案==================================
##request driver                                                                                                                                      
ata_host_register->ata_scsi_scan_host->__scsi_add_device->scsi_probe_and_add_lun ->scsi_add_lun                                                      
                                                                                                                                                      
subsys_initcall(genhd_device_init);->kobj_map_init{bdev_map.probe.get = base_probe}                                                                  
                                                                                                                                                      
subsys_initcall(init_scsi);4->scsi_sysfs_register{autoprobe = 1;}                                                                                    
rootfs_initcall(populate_rootfs);->{unpack_to_rootfs; 解压initramfs到rootfs}                                                                          
module_initinit_sd;6->scsi_register_driver ->driver_register->bus_add_driver ->driver_attach ->driver_probe_device-> drv->probe(dev)=sd_probe_async->add_disk -> register_disk -> get_gendisk -> kobj_lookup { bdev_map.probe.get()=base_probe(){request_module}}                                          
                                                                                                                                                      
##mount fs                                                                                                                                            
kernel_init_freeable-> if  /init in initramfs 可以访问 根文件系统挂在和chroot交给/init也就是systemd                                                   
如果/init不可以访问 则prepare_namespace{挂在真正的文件系统}                                                                                             


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP