- 論壇徽章:
- 8
|
本帖最后由 firocu 于 2015-03-19 16:40 編輯
從下午一只看到現(xiàn)在, 感覺(jué)有點(diǎn)笨啊, 還是沒(méi)找到,
我在3.17的代碼定位到了sd_probe_async這個(gè)函數(shù), 可能就是, 但是死活找不到request_module()調(diào)用的地方.
kernel_init-> async_synchronize_full();這個(gè)函數(shù)等待上面函數(shù)sd_probe_async執(zhí)行完磁盤(pán)驅(qū)動(dòng)舊加載上了.
睡覺(jué), 每天都不想晚睡啊...
===========================待論證的答案==================================
##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 可以訪問(wèn) 根文件系統(tǒng)掛在和chroot交給/init也就是systemd
如果/init不可以訪問(wèn) 則prepare_namespace{掛在真正的文件系統(tǒng)}
|
|