在 xeon-phi 上引导自定义内核
Posted
技术标签:
【中文标题】在 xeon-phi 上引导自定义内核【英文标题】:Booting custom kernel on xeon-phi 【发布时间】:2015-04-08 20:36:23 【问题描述】:我正在尝试在 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: file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0010000c
我使用相同的编译器编译,但它们显示不同的架构。这是什么原因?
【问题讨论】:
你现在用的是什么版本的MPSS,你编译的是哪一个? 我使用的是 3.4.2。我想要做的是用另一个内核替换当前的 linux 内核。现在我的内核应该需要一些补丁,但我无法继续,因为它没有给出任何错误,只是即使在我成功交叉编译后它也无法识别图像。 【参考方案1】:首先要弄清楚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
【讨论】:
对于文件,我得到“x86 引导扇区”,对于 objdump,“文件格式无法识别”。 你有一个磁盘映像而不是 Linux 内核。磁盘映像包括引导扇区、引导加载程序和 Linux 内核。查找以 vmlinux* 开头的其他文件 好的。所以这些是正确的结果-mykernel: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
mykernel: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0010000c
我仍然得到同样的错误mykernel is not a k1om Linux bzImage
也许吧,但它确实应该有 k1om 架构。
看来你没有正确使用交叉编译器,而是使用了原生gcc。【参考方案2】:
原始问题的答案 - 不,不幸的是,它不像交叉编译那么简单。对 MPSS 附带的内核进行了许多更改。我不知道所有的变化,但我知道的一个重要变化是,他们必须在协处理器上添加对更大寄存器集的支持,以便能够在上下文切换时保存状态。
至于为什么文件格式是elf32-i386而不是elf32-k1om -
您引用的网站提到在可能对文件进行一些更改后重新编译 MPSS 附带的内核。您会注意到他们还复制了已安装内核版本的配置文件。所以他们拥有所有文件来完全按照原来的方式重新制作内核。
我怀疑,在您的情况下,a)您的源目录中存在某种配置脚本,该脚本选择了您正在运行的体系结构并在 makefile 运行时造成混乱,或者 b)您的 makefile 不知道k1om 是什么。在任何一种情况下,它都会退回到它认为的最低公分母 i386。正如我所说,这只是我的一个怀疑,但仔细阅读您的 makefile 应该会找到答案。
【讨论】:
以上是关于在 xeon-phi 上引导自定义内核的主要内容,如果未能解决你的问题,请参考以下文章