启动efi_linux内核启动流程分析 efi_main
时间: 2023-08-05 22:10:52 浏览: 425
当 EFI系统启动时,会首先加载EFI固件,然后由EFI固件负责加载操作系统引导程序。在EFI中,操作系统引导程序就是指EFI应用程序,因此内核启动流程的第一步是编写一个EFI应用程序,这个应用程序就是efi_main。
efi_main是EFI应用程序的入口点,它的实现类似于C语言中的main函数。在efi_main函数中,我们需要完成以下几个任务:
1. 初始化EFI系统服务
EFI系统服务是一组由EFI固件提供的功能,包括文件系统访问、图形界面显示、键盘输入等。在efi_main函数中,我们需要调用EFI系统服务来初始化这些功能,以便后续的内核启动可以正常进行。
2. 加载内核镜像
在EFI系统中,内核镜像是以EFI可执行文件的形式存储的。因此,在efi_main函数中,我们需要使用EFI系统服务来加载内核镜像,并将其存储在内存中。
3. 跳转到内核入口点
内核镜像加载完成后,我们需要跳转到内核入口点,以开始内核启动过程。在EFI中,内核入口点是一个C语言函数,通常称为efi_start。因此,在efi_main函数中,我们需要跳转到efi_start函数,并将内核镜像的信息作为参数传递给它。
以上就是efi_main的实现流程。需要注意的是,由于EFI系统与传统的BIOS系统存在很大的差异,因此在编写EFI应用程序时需要特别注意代码的规范性和可移植性。
阅读全文