内核启动过程中init进程和驱动初始化的时间关系

从start_kernel讲起。

start_kernel会打印“Booting kernel”这样的log,这个是我们在内核启动过程中看到的最早的一些log.start_kernel会首先启动内核必要的元素:

setup_arch(&command_line);

page_alloc_init();

mm_init();

ftrace_init();

rcu_init();

early_irq_init();
    init_IRQ();

......

都很重要,就不一一列举了。

驱动和init进程在start_kernel的最后面,rest_init(剩下的,其余的,初始化)

rest_init启动了一个内核线程kernel_init,kernel_init调用kernel_init_freeable-->do_basic_setup();来初始化硬件设备,包括ACPI, PCI, USB等,然后调用run_init_process(ramdisk_execute_command);来启动init进程。

do_basic_setup并不是启动了所有的驱动,我的理解是启动了总线的驱动,挂在在总线上的驱动,比如scsi,input设备,都是在workqueue里启动的,比如drivers/scsi/hosts.c中scsi_host_alloc-->alloc_workqueue-->__alloc_workqueue_key-->init_rescuer中启动了一个rescuer_thread,在该线程中,调用

device_add+0x521/0x670
[    1.466982]  ? __pm_runtime_resume+0x54/0x70
[    1.466984]  scsi_sysfs_add_sdev+0xb8/0x270
[    1.466986]  scsi_probe_and_add_lun+0xc96/0xdb0
[    1.466988]  ? __pm_runtime_resume+0x54/0x70
[    1.466990]  __scsi_add_device+0x11f/0x130
[    1.466993]  ata_scsi_scan_host+0xa0/0x1e0
[    1.466995]  async_run_entry_fn+0x37/0x140
[    1.466997]  process_one_work+0x15e/0x3e0
[    1.466999]  worker_thread+0x4c/0x440
[    1.467001]  kthread+0xf8/0x130
[    1.467003]  ? rescuer_thread+0x350/0x350

对磁盘进行初始化,得到如下log:

[    1.467010] sd 0:0:0:0: Attached scsi generic sg0 type 0
[    1.468207]  sda: sda1 sda2 sda3 sda4
[    1.468414] sd 0:0:0:0: [sda] Attached SCSI disk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核的根文件系统初始化是系统启动过程的一个重要步骤,它负责加载根文件系统并挂载为系统的根目录。 在启动过程,BIOS或UEFI首先加载引导加载程序(bootloader),如GRUB或Syslinux等。引导加载程序会加载内核映像(vmlinuz)到内存,并将控制权转交给内核内核启动后,它会执行一系列初始化操作,其包括根文件系统的初始化。根文件系统通常存储在硬盘或闪存设备上,可以是ext4、XFS、Btrfs等文件系统格式。 根文件系统初始化的过程主要包括以下几个步骤: 1. 设备初始化内核初始化硬件设备,如磁盘控制器、网络接口等,以便后续能够访问根文件系统所在的设备。 2. 文件系统驱动加载:内核会加载相应的文件系统驱动模块,以支持对特定文件系统格式的读写操作。 3. 根设备挂载:内核会根据引导参数或配置文件指定的根设备信息(如硬盘分区、NFS共享等),找到根文件系统所在的设备,并将其挂载为系统的根目录(/)。 4. 初始化进程:一旦根文件系统成功挂载,内核会运行用户空间的第一个进程,通常是init或systemd。这个进程负责启动其他用户空间进程和服务。 总而言之,根文件系统初始化Linux系统启动过程的一个关键步骤,它负责加载和挂载根文件系统,并启动用户空间的初始化进程,从而完成系统的初始化工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值