- 论坛徽章:
- 8
|
本帖最后由 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{挂在真正的文件系统}
|
|