1

我是引导加载程序和 Linux 内核的新手。我一直在做一个项目,我们必须用 Linux 内核替换引导 QNX 内核。我们当前的引导加载程序代码支持引导 QNX 内核。似乎引导加载程序也支持引导 Linux(不确定),我需要知道它是否足以启动 Linux 内核。

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

Bootloader 正在调用 start_kernel 函数,该函数有两个参数传递给它,一个是内核入口点,第二个是指向引导行的指针

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

2.重新定位initrd

3.复制引导扇区,设置数据和命令行到最后的位置

4.初始化Linux GDT

5.跳转到内核入口点

6.禁用中断

7.Lunch_kernel()

现在在上面的代码中,有两个棘手的事情怀疑对 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;

第二件事是Lunch_kernel(),其定义在代码库中根本不存在。

现在上面的东西足以将控制权传递给 Linux 映像或我可以添加/修改的其他内容以在我们当前的引导加载程序代码中引导 Linux 映像。

我们正在研究 X86 架构。

由于某种原因,在我们确定事情之前,我们不能在我们的板上进行打击和试验。

4

0 回答 0