在xeon-phi上启动自定义内核

时间:2015-04-08 20:36:24

标签: gcc kernel cross-compiling xeon-phi

我正在尝试在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结果。

for helloworld.c:

hello: file format elf64-k1om architecture: k1om, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0000000000400400

for mykernel:

mykernel: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0010000c

我使用相同的编译器进行编译,但它们显示了不同的体系结构。这是什么原因?

2 个答案:

答案 0 :(得分:0)

首先要弄清楚mykernel.img是什么。尝试在其上运行file

 $ file  /opt/mpss/3.4/sysroots/k1om-mpss-linux/boot/vmlinux-2.6.38.8+mpss3.4
 /opt/mpss/3.4/sysroots/k1om-mpss-linux/boot/vmlinux-2.6.38.8+mpss3.4: ELF 64-bit LSB executable, version 1 (SYSV), statically linked, BuildID[sha1]=0xa4c16ee85c11aca4e78dc4ae46d3827fb74289c1, not stripped

$ objdump -f /opt/mpss/3.4/sysroots/k1om-mpss-linux/boot/vmlinux-2.6.38.8+mpss3.4

/opt/mpss/3.4/sysroots/k1om-mpss-linux/boot/vmlinux-2.6.38.8+mpss3.4:     file format elf64-k1om
architecture: k1om, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000001000000

答案 1 :(得分:0)

原始问题的答案 - 不幸的是,它并不像交叉编译那么简单。 MPSS附带的内核有很多变化。我不知道所有的变化,但我知道的一个很大的变化就是他们必须添加对协处理器上更大的寄存器集的支持,以便能够在上下文切换上保存状态。

至于为什么文件格式是elf32-i386而不是elf32-k1om -

您引用的网站指的是在对文件进行一些更改后重新编译MPSS附带的内核。您会注意到他们还复制了已安装的内核版本的配置文件。因此,他们拥有完全重新制作内核的所有文件。

我怀疑,在你的情况下,或者a)你的源目录中有某种类型的配置脚本,它选择了你运行的架构并在makefile运行时造成混乱或b)你的makefile不知道什么是k1om。在任何一种情况下,它都回落到它认为最低的共同标准i386。正如我所说,这只是我的怀疑,但仔细阅读你的makefile应该会得到答案。