seL4的编译和运行(OdroidXU3)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BlueCloudMatrix/article/details/46803249

seL4支持平台

seL4所在的git如下:
https://github.com/seL4/seL4.git

不过我们编译和运行seL4一般不只是用这个git,而是借助seL4test(seL4的测试框架):
https://github.com/seL4/sel4test.git

seL4提供了各种平台上的配置文件,也提供了用于测试seL4的app。


seL4指定了可以运行的平台,按照下面的匹配来编译它(当然还有其他的匹配)。

ARCH PLAT ARMV CPU
arm imx31 armv6 arm1136jf-s
arm omap3 armv7-a cortex-a8
arm am335x armv7-a cortex-a8
ia32 pc99

另外在seL4官方文档中,指出下列平台也可以运行seL4:

  • Intel platforms

    1. a PC99-style Intel Architecture 32-bit x86 (ia32)
    2. There is also experimental support for the 64-bit Intel x86_64 architecture.
  • ARM platforms

    1. The Arndale dual core A15 ARM development board
    2. The Beagleboard, Omap 3530
    3. The Inforce IFC6410 development board, running a Qualcomm Krait processor that is like an A15.
    4. The KZM-ARM11-01. The kernel for this board is the one that is formally verified.
    5. The Odroid-X Exynos4412 board
    6. The Odroid-XU Exynos 5 board
    7. The Sabre Lite i.mx6 board.
    8. The Beaglebone Black is a community-supported port.

选择OdroidXU3编译seL4

根据seL4官方文档所说明的支持平台,并参照seL4test工程中的配置文件,我们选择OdroidXU3开发板来运行seL4。下面就是OdroidXU3:
OdroidXU3

这个平台采用Samsung Exynos5422 Cortex™-A15 2.0Ghz quad core and Cortex™-A7 quad core CPUs。而exynos5422在seL4的支持序列当中。同时这个板子支持的操作系统如下:Ubuntu 14.04 + OpenGL ES + OpenCL on Kernel LTS 3.10和Android 4.4.2 on Kernel LTS 3.10。因此是一款能满足时下开发的较新的开发板。
关于它的相信信息,可以到官网上去查看:
Hardkernel Odroid


通过repo获得seL4test工程。工程根目录下有一个configs文件夹,里面就是根据具体平台所设置的配置文件,我们根据我们的板子,选择 odroidxu3_release_xml_defconfig。把它拷贝到seL4test工程根目录下。
在工程根目录下执行命令: $ make menuconfig
出现如下界面:
这里写图片描述

进入“Load an Alternate Configuration File”,输入刚才拷贝的配置文件的名字:
这里写图片描述

ok后,回到上面的界面,进入“Save an Alternate Configuration File”,直接ok。最后Exit退出menuconfig。

然后运行命令: $ make

这样你就会在images目录下发现新生成的seL4的elf格式的镜像文件:
sel4test-driver-image-arm-exynos5

编译成功!


制作OdroidXU3的SD卡启动盘

OdroidXU3默认是eMMC启动,也就是说厂商在eMMC中烧写了u-boot和ubuntu的镜像,我们想通过SD卡启动,所以需要做:

  1. 将OdroidXU3的启动方式改为SD卡启动
  2. 制作SD卡启动盘

对于1,看下面的图:
这里写图片描述

板子上有如图所示的开关,左数第一个开关就是控制启动方式:

开关状态 启动方式
ON eMMC
OFF MICROSD

下面制作SD卡启动盘:

  • 根据OdroidXU3提供的分区表烧写u-boot
  • 对SD卡分区并拷贝seL4镜像

下面是OdroidXU3的eMMC卡或microSD卡的分区表:
这里写图片描述

如果我们不按照平台指定的SD卡的分区表来烧写u-boot,是不能正确烧写并启动u-boot的。

OdroidXU3官方也提供了如何编译u-boot的手册和烧写u-boot的shell脚本:
xu3 building u-boot

注意:
首先确认目录 u-boot/sd_fuse/hardkernel/下是否存在 bl1.bin.HardKernel、bl2.bin.HardKernel、tzsw.bin.hardkernel,和配置文件sd_fusing.sh。 将自带的u-boot.bin.hardkernel删掉。
安装手册会在根目录编译生成u-boot/u-boot.bin,需要将它拷贝到u-boot/sd_fuse/hardkernel目录下,并重命名为u-boot.bin.hardkernel。

按照手册所说的利用sd_fusing.sh脚本将u-boot烧写到SD卡中。

我们使用minicom在xubuntu下进行串口调试(minicom配置信息采用默认即可),查看板子启动信息,如果u-boot烧写成功,启动后会出现如下界面:
这里写图片描述

进入u-boot命令模式。


接下来我们先要将上面生成的seL内核镜像放到SD卡中,我们不是用烧写u-boot时的脚本将内核也烧进SD卡中,而是要将SD卡进行分区,然后直接拷贝。

将SD卡分区需要注意以下两点:
1. 第一分区位置要从地址3072开始。原因:MBR的需要占用第一个512byte,fwbl1区需要占用1-30 共15KB,bl2区需要占用31-62 共 16KB,u-boot镜像需要占用63-718 共238KB,tzsw.bin需要占用719-1230,共256KB,u-boot的运行环境需要占用1231-1263 共16KB,u-boot的环境变量需要占用1263-3071。而第一分区存储的是SEL4的内核镜像,为保证u-boot运行,以及不干扰第一分区的读写操作,所以地址设定为3072。
2. 我们将SD卡分为两区(非必须),文件系统类型分别为FAT16(vfat)、LINUX 文件系统(ext4),第一分区应留出足够的空间存储SEL4的内核镜像,至少为3MB以上。

分好区后,将SD卡插入电脑就可以挂载识别了,我们将seL4的内核镜像sel4test-driver-image-arm-exynos5拷贝到SD卡的第一个分区中(为了下面启动seL4内核的方便,我们将内核重命名为sel4)。

大功告成!现在试一下是否可以在OdroidXU3上点亮seL4。


点亮seL4

在u-boot命令模式下,依次输入如下命令:

这里写图片描述

这里显示的是SD卡第一个分区中存放的文件,我们的内核镜像是sel4。

然后将内核加载到内存指定位置:
这里写图片描述

其中0x48000000就是内核在内存中的指定位置。

最后启动:
这里写图片描述

这里写图片描述

由于我们使用的是seL4test这个官方提供的框架,编译生成的seL4内核镜像包含了一个叫seL4test-driver的app,所以运行所出的信息实际上是这个app在运行,最后会出现“All is well in the universe”。

至此我们已经在OdroidXU3上成功点亮seL4。

猜你喜欢

转载自blog.csdn.net/BlueCloudMatrix/article/details/46803249
SEL