seL4的编译和运行
seL4的编译和运行
seL4指定了可以运行的平台,按照下面的匹配来编译它。
ARCH | PLAT | ARMV | CPU |
---|---|---|---|
arm | imx31 | armv6 | arm1136jf-s |
arm | omap3 | armv7-a | cortex-a8 |
arm | am335x | armv7-a | cortex-a8 |
ia32 | pc99 |
从github上clone到工程后,执行如下:
如果遇到cc1: all warnings being treated as errors,在Makefile中找到CFLAGS,加上-Wno-unused-but-set-variable:
如果编译成功,应该是下面的结果:
看看都生成了哪些文件:
Fig 1 make之前目录结构
Fig 2 make之后目录结构
Fig 1是没有make的目录,Fig 2是make之后的目录。多出了:
- 目录api
- 目录arch
- 目录plat
- kernel_all.c
- kernel_all.c_pp
- kernel.elf
- kernel.elf.strip
- kernel_final.c
- kernel_final.s
-
kernel.o
其中kernel.elf包含所有seL4内核的调试信息,我们要用QEMU来执行这个elf格式的镜像。下面是qemu支持的平台:
我们需要为镜像选择正确的qemu运行的平台,运行命令:
这里没有适合seL4运行的平台,似乎seL4没有在QEMU中启动和运行。
另外在seL4官方文档中,指出下列平台也可以运行seL4:
-
Intel platforms
- a PC99-style Intel Architecture 32-bit x86 (ia32)
- There is also experimental support for the 64-bit Intel x86_64 architecture.
-
ARM platforms
- The Arndale dual core A15 ARM development board
- The Beagleboard, Omap 3530
- The Inforce IFC6410 development board, running a Qualcomm Krait processor that is like an A15.
- The KZM-ARM11-01. The kernel for this board is the one that is formally verified.
- The Odroid-X Exynos4412 board
- The Odroid-XU Exynos 5 board
- The Sabre Lite i.mx6 board.
- The Beaglebone Black is a community-supported port.
但对Odroid-XU Exynos 5进行编译:
TOOLPREFIX=arm-none-eabi- ARCH=arm PLAT=exynos5 ARMV=armv7-a CPU=cortex-a15 make
未能成功。
选择imx6平台:
TOOLPREFIX=arm-linux-gnueabi- ARCH=arm PLAT=imx6 ARMV=armv7-a CPU=cortex-a9 make
对arch/arm/machine/l2c_310.c的284行处做如下修改:
编译通过,生成kernel.elf镜像。
选择exynos4平台:
TOOLPREFIX=arm-linux-gnueabi- ARCH=arm PLAT=exynos4 ARMV=armv7-a
CPU=cortex-a9 make
通过修改src/plat/exynos4/../exynos_common/mct.c中的initTimer函数:
编译通过,生成镜像。
然后qemu选择相应的平台nuri或smdkc210,但都不能正常启动内核镜像。
本文永久更新链接地址:
评论暂时关闭