do-initcall
2015-09-19 20:35:32 1 举报
do-initcall是一个在Linux内核初始化阶段执行特定函数的机制。它允许开发者在内核启动时,将一些特定的初始化任务注册到initcall链表中,从而确保这些任务按照预定的顺序被执行。这种机制有助于简化内核代码,提高可维护性,并使得内核能够更好地适应各种硬件平台和应用场景。通过使用do-initcall,开发者可以确保关键性的初始化工作在内核启动过程中得到妥善处理,从而提高系统的稳定性和可靠性。
作者其他创作
大纲/内容
init/initramfs.c populate_rootfs()
如果initrd_start变量不为0,说明还有一个外部的initramfs通过bootloader加载了,内核将这个外部initramfs也释放到rootfs中。其中CONFIG_BLK_DEV_RAM是使用ramdisk的情况,这里我们不关心这个。
initrd_start是initramfs被加载到内核中的起始位置。initramfs通常作为一个独立的外部文件存在,并通过bootloader加载到内存中。
这里的关键点是write_buffer,这个函数后面还有很多东西,不过此时要牢记的是参数buf是用于输入的,是提供加载到内核中的initramfs压缩包的起始地址的,而write_buffer最终是要调用read_into函数,将initramfs写到本地的header_buf中。
执行段”.initcall“中包含的函数
init/main.c do_basic_setup()
init/main.c kernel_init()
init/initramfs.c rootfs_initcall()
首先调用unpack_to_rootfs将内核内置的initramfs解压到rootfs中,全局变量__initramfs_start指向内核数据段.init.ramfs的起始地址。
init/initramfs.c unpack_to_rootfs()
init/main.c do_initcall()
0 条评论
下一页