我试图在Xeon-phi上启动自定义内核而不是默认的Linux内核 . 在this link,我找到了一种交叉编译我的内核的方法,该内核使用k1om-mpss-linux-gcc交叉编译器成功编译 . 交叉编译足够吗?我收到了错误
mykernel.img不是k1om Linux bzImage
编辑:所以,我使用/usr/linux-k1om-4.7/bin/x86_64-k1om-linux-gcc编译器来编译一个简单的helloworld.c程序和内核源代码 . 我在可执行文件上获得了两种不同类型的objdump -f结果 .
对于helloworld.c:
hello: file format elf64-k1om architecture: k1om, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0000000000400400
对于mykernel:
mykernel: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0010000c
我使用相同的编译器进行编译,但它们显示了不同的体系结构 . 这是什么原因?
2 回答
要做的第一件事是找出
mykernel.img
是什么 . 尝试在其上运行file
.原始问题的答案 - 不幸的是,它并不像交叉编译那么简单 . MPSS附带的内核有很多变化 . 我不知道所有的变化,但我知道的一个重要变化是它们必须添加对协处理器上较大寄存器集的支持,以便能够在上下文切换上保存状态 .
至于为什么文件格式是elf32-i386而不是elf32-k1om -
您引用的网站指的是在文件中进行一些更改后重新编译MPSS附带的内核 . 您会注意到它们还复制了已安装的内核版本的配置文件 . 因此,他们拥有完全重新制作内核的所有文件 .
我怀疑,在你的情况下,要么a)你的源目录中有一个类型的配置脚本,它选择了你运行的架构并在makefile运行时造成混乱或b)你的makefile不知道什么是k1om . 在任何一种情况下,它都回落到它认为最低的共同标准i386 . 正如我所说,这只是我的怀疑,但仔细阅读你的makefile应该会得到答案 .