Linux kernel 我的引导加载程序是否足以引导Linux映像

Linux kernel 我的引导加载程序是否足以引导Linux映像,linux-kernel,x86,bootloader,bootstrapping,Linux Kernel,X86,Bootloader,Bootstrapping,我不熟悉引导加载程序和Linux内核。我一直在从事一个项目,我们必须用Linux内核替换引导QNX内核。我们当前的引导加载程序代码支持引导QNX内核。似乎引导加载程序也支持引导Linux。我不确定,我需要知道它是否足够引导Linux内核 下面是我们的引导程序正在做的事情 Bootloader调用start_内核函数,该函数有两个参数,一个是内核入口点,另一个是指向引导行的指针 1.地址0X90000ULL,类型转换为boot_params结构 2.重新安置initrd 3.复制引导扇区,将数据和

我不熟悉引导加载程序和Linux内核。我一直在从事一个项目,我们必须用Linux内核替换引导QNX内核。我们当前的引导加载程序代码支持引导QNX内核。似乎引导加载程序也支持引导Linux。我不确定,我需要知道它是否足够引导Linux内核

下面是我们的引导程序正在做的事情

Bootloader调用start_内核函数,该函数有两个参数,一个是内核入口点,另一个是指向引导行的指针

1.地址0X90000ULL,类型转换为boot_params结构

2.重新安置initrd

3.复制引导扇区,将数据和命令行设置到最终静止位置

4.初始化Linux GDT

5.跳转到内核入口点

6.禁用中断

7.1内核

现在在上面的代码中有两件棘手的事情,它们怀疑Linux内核启动的支持

第一件事是跳转到内核入口点的方式,通常我看到在uboot中跳转到内核入口,或者Linux源代码在汇编中,但在我们的引导加载程序中,它只是归档一个结构

struct

{

long Kery;
long kernel_code_segment;
}

jumpv;

void *jump_s;

 jumpv.kery=first argument pass to start_kernel;
 jumpv.kernel_code_segment=0x10;
 jump_s=(void *)&jumpv;
第二件事是午餐内核,它的定义在代码库中根本不存在

现在,以上内容足以将控制权传递给Linux映像,或者我可以添加/修改哪些内容,以便在当前引导加载程序代码中引导Linux映像

我们正在研究X86体系结构


由于某些原因,在我们确定事情之前,我们无法在我们的董事会上进行点击和试用。

试试osdev.net上的论坛,那里的人对这些事情有着丰富的经验……感谢@Mellowcandle的建议。