目录

1 实验环境部署

1.1 Ubuntu环境搭建

1.2 实验代码下载

1.3 实验代码使用方法

1.3.1 提取实验代码

1.3.2 编译实验代码

1.3.3 运行实验代码

2 Hello World示例

2.1 编译与运行hello world示例

2.1.1 编译Hello World示例

2.1.2 运行Hello World示例

2.2 Hello World示例分析

2.2.1 root task的概念

2.2.2 Hello World示例的CMakeLists.txt


说明:本系列文档参考https://docs.sel4.systems/Tutorials/,并基于教程提供的代码进行了实验

1 实验环境部署

1.1 Ubuntu环境搭建

实验环境基于Ubuntu 18.04搭建,具体流程可参考如下链接,将所有安装命令执行一遍

Host Dependencies | seL4 docs

说明:更新CMake版本

Ubuntu 18.04自动安装的CMake版本为3.10.2,而编译seL4 Tutorials代码需要至少3.12.0版本。可以在如下链接下载最新版本的CMake

Download | CMake

可以直接下载binary版本使用

1.2 实验代码下载

repo init -u https://github.com/seL4/sel4-tutorials-manifestrepo sync

实验代码下载需要科学上网,而且下载巨麻烦,连续尝试下载十几次才最终成功。此处附上已下载的版本

sel4-tutorial.tar.gz-其它文档类资源-CSDN下载

代码结构如下

1.3 实验代码使用方法

seL4 Tutorials提供了多个实现,均从上述代码包提取,我们以Hello World的实验为例进行说明

1.3.1 提取实验代码

首先提取实验代码,并初始化编译目录

提取代码后会生成2个目录,其中

1. hello-world目录为实验源码目录

2. hello-world_build目录为编译环境目录

说明:代码提取命令

① 代码提取命令的统一格式为

./init --tut <实验名称>

我们可以在源码的projects/sel4-tutorials/tutorials目录查看目前支持的所有实验

② 通过上述命令提取的代码不包含题解,可通过如下命令提取包含题解的实验代码

./init --tut <实验名称> --solution

1.3.2 编译实验代码

进入提取代码后生成的带有_build后缀的编译目录,执行ninja指令,即可编译实验代码

1.3.3 运行实验代码

在编译目录执行simulate脚本,即可使用qemu虚拟机运行实验代码编译后的镜像

2 Hello World示例

2.1 编译与运行hello world示例

2.1.1 编译Hello World示例

seL4使用了一套基于python、cmake、ninja的编译系统,非常复杂,我们不关注他如何实现,仅关注如何使用,以及如何向其中添加新的模块

使用如下命令编译Hello World示例

# 配置hello-world示例./init --tut hello-world# 编译hello-world示例cd hello-world_buildninja

我们虽然不关心配置和编译的实现细节,但是我们可以看一下配置过程都做了什么

说明:可见测试用例代码在hello-world目录,build环境在hello-world_build目录,我们来看一下测试用例代码的内容,就是打印"Hello, World"

2.1.2 运行Hello World示例

使用如下命令运行Hello World示例

# 在hello-world_build目录下执行./simulate

该命令是一个脚本,用于启动qemu模拟器,来运行编译生成的seL4镜像。我们依然不去深究这个脚本的内容,而是看一下运行结果

可见seL4在内核启动完成,并在返回user space之后打印了"Hello, World",但是之后运行崩溃。这是符合预期的,下面简单说明原因

说明:退出qemu虚拟机

① 按下<Ctrl> + a,并松开

② 按下x

2.2 Hello World示例分析

2.2.1 root task的概念

1. 在seL4内核启动完成后,一个称作root task的起始线程将被调用,root task用于设置用户态环境。可见root task的概念类似于Linux中的init进程,也就是系统中的首个用户态进程

2. 当前的root task没有妥善的清理运行环境,所以触发了capability违例,后续实验将完善该问题

2.2.2 Hello World示例的CMakeLists.txt

首先需要说明的是,seL4使用cmake编译,因此任何应用程序(app)和函数库(lib)都需要一个CMakeLists.txt文件,将当前模块加入编译系统

我们来看一下hello-world的CmakeLists.txt

可见,此处将hello-world示例应用作为root task,而seL4对root task的唯一要求,就是有main函数,这个是root task的入口点

说明:后续的示例都将作为component app运行,而不是root task

seL4操作系统基础02:从Hello World开始相关推荐

  1. seL4操作系统基础01:seL4 whitepaper概览

    目录 Chapter 1:What Is SeL4 Chapter 2:SeL4 Is a Microkernel and Hypervisor, It Is Not an OS 2.1 微内核结构 ...

  2. seL4操作系统基础05:event interface与seL4Notification connector

    目录 1 示例程序分析 1.1 示例程序结构 1.2 CMakeLists.txt文件分析 1.3 component类型定义 1.3.1 event interface概述 1.3.2 event ...

  3. seL4操作系统基础06:dataport interface与seL4SharedData connector

    目录 1 示例程序分析 1.1 示例程序结构 1.2 CMakeList.txt文件分析 1.3 component类型定义 1.3.1 dataport interface概述 1.3.2 data ...

  4. linux基础操作与实践,Linux操作系统基础与实践

    <21世纪高等院校计算机网络工程专业规划教材:Linux操作系统基础与实践>由清华大学出版社出版. ¥19.18定价:¥29.50(6.51折) /2014-06-01 <Linux ...

  5. java 01 02_Java知识系统回顾整理01基础02面向对象01类和对象

    一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...

  6. Linux_操作系统-基础操作-教学

    Linux操作系统基础教程 前言.................................................................................... ...

  7. 日拱一卒.操作系统基础知识点梳理

    课程知识概述部分 磁盘管理体系结构 磁盘创建文件系统 磁盘挂载操作 (mount 参数信息) ! 磁盘应用环境 (作为交换分区) ! 系统启动流程 基础节点知识梳理 课程知识回顾说明 操作系统磁盘分区 ...

  8. 计算机和操作系统基础知识

    -----------------------siwuxie095 计算机和操作系统基础知识 1.操作系统(Operating System,简称 OS),是管理计算机硬件与 软件资源的计算机程序,同 ...

  9. 电大计算机应用技术基础形考二,贵州电大2020年春季《计算机应用技术基础》计算机应用技术基础02任务满分...

    2020年春季<计算机应用技术基础>计算机应用技术基础02任务8 e0 T4 M9 X5 Z! l' ? 1.[判断题] 存储器容量的基本单位是字节.(    ) # n( _/ [' R ...

最新文章

  1. 三阶魔方还原步骤图_(六)最简单的三阶魔方入门教程——顶面还原
  2. Google和Yahoo专家联手揭秘世界顶尖公司的技术内幕
  3. 反射获取空参数构造方法并运行
  4. 如何在Eclipse里方便地进行markdown文件编辑
  5. mysql replicate error
  6. Quick cocos2dx学习笔记
  7. mac中一一些常用的命令
  8. vue slot的使用介绍
  9. Flink 在快手实时多维分析场景的应用
  10. Syncfusion的新JavaScript条形码生成器控件
  11. eval('{kkk:{}}')出错,eval('{}')与eval('var ss = {kkk:{}}')正常
  12. 一网打尽位图与矢量图
  13. CS5211 eDP转LVDS转换器芯片 CS5211芯片说明书
  14. 《郭论—捡史》郭德纲/著 读后得
  15. 小米电视联网后显示无法解析小米电视服务器,小米电视机功能详解 教你轻松使用...
  16. 程序员的有个坏习惯!
  17. uni-app分享小程序卡片给微信好友
  18. 硬实时系统的语言构造和转换----普渡大学
  19. php 织梦symbol,织梦内置标签小优化之三—dede:field name=position标签优化
  20. 不小心删库了,试试binlog

热门文章

  1. windows php fastcgi,windows下FastCGI(php-cgi)的工作原理和配置
  2. mysql密码加强_MySQL密码增强插件
  3. 并发执行linux命令结果混乱,Shell脚本--并发执行
  4. java中流关闭如何打开_关于java中流关闭的问题
  5. java学到什么程度安卓_自学Android到什么程度才能找到工作?
  6. linux 执行脚本报错:nginx_check.sh:行10: 语法错误: 未预期的文件结尾
  7. php 自减函数,Thinkphp中某个字段值从增或自减函数
  8. springcloud五大组件?注解_spring cloud实现简单的微服务架构
  9. JDK8的LocalDateTime用法
  10. [OGG] [INS-75012] GoldenGate重装报错