do-initcall
2015-09-19 21:22:23 2 举报
`do-initcall`是一个函数,通常在Linux内核初始化过程中被调用。它主要用于执行一些需要在内核启动时完成的操作,例如硬件设备的初始化、内存管理等。`do-initcall`函数的主要作用是提供一个统一的入口点,使得内核初始化过程更加有序和模块化。通过将各个模块的初始化函数按照一定的顺序添加到`do-initcall`函数的链表中,可以实现这些函数在内核启动时的自动执行。这种机制有助于提高内核代码的可维护性和可扩展性,同时也降低了出错的可能性。总之,`do-initcall`是Linux内核初始化过程中一个非常重要的函数,它为内核提供了一个简洁、高效的初始化框架。
作者其他创作
大纲/内容
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 条评论
下一页