转载声明:希望大家能够从这里收获知识之外,也能够体会到博主撰写博客的辛苦。个人博客势单力薄,对于强转甚至转载博客访问量高于原文的例子不在少数。

  希望能够得到大家关注的同时,也能够稍微体谅一下博主的不易。

  

  既然奔着seL4来的,那么对于宏内核与微内核的区别应该是很清楚的了,在此就简单地介绍两者的区别,本文主要用来完成seL4环境配置工作

   对于小白来说,自己独自完成对seL4微内核的阅读和理解真的很困难,目前跟着老师助教一起进行对seL4微内核的分析和理解。所以准备长期更新seL4学习的博客,希望大家多多支持,错误之处还请各位帮忙指出改正。

对于两者的区别也就简单提一下,相关的资料十分充足可以自行查找满足自己的需求。

微内核:所有的服务器都相对独立并且运行在各自的地址空间。通过进程间通信机制(IPC)实现进程之间的通讯,互换“服务”。服务器的独立运行避免了一个服务器崩溃或及其他的服务器。

宏内核:也称为单内核,将内核从整体上作为一个大过程实现,并且同时运行在一个单独的地址空间。这也意味所有的内核服务之间可以直接调用函数,简单高效。

下图为宏内核与微内核架构图:

seL4 官网:http://sel4.systems/

seL4 wiki:https://wiki.sel4.systems/

seL4 项目主页:http://ts.data61.csiro.au/projects/seL4/

在安装和运行seL4系统之前,需要在机器上安装必要的安装包。这里假设大家都安装在Linux系统之上,并且下面的示例均为Ubuntu14.04版本(64-bit)或者可以安装在Ubuntu16.04版本(64-bit),当然也可以尝试其他的Unix系统(包括Mac OS)等。

下图为进行第一个实验的要求:

下面进行第一个seL4实验:

下面为获取代码以及第一个实验执行hello1的指令

首先先将需要的seL4程序从git上面clone下来,指令如下所示:

>git clone https://github.com/zpfbuaa/seL4.git

其中后面的程序地址可以是其他的只要是源码就行了,上面是指提供一个方便大家的链接。

为了避免链接失败,下面再多给些地址:

https://github.com/xcgxg/sel4-tutorials-manifest.git(和上述指令相同)

http://pan.baidu.com/s/1jIsdVTG (直接下载到Linux机器上就可以了)

http://pan.baidu.com/s/1kV2RkVH(直接下载就可以了)

该步目的在于完成对源码的clone工作,为后期的源码阅读做准备。

假设大家都已经准备好了上述源码的工作。

对于文件怎样

下面需要对源码进行一系列的配置操作。

https://github.com/SEL4PROJ/sel4-tutorials/blob/master/Prerequisites.md

可以参照上述的链接。不过出现的问题就是安装的东西有点多,甚至有些不必要安装,看到上述的指令不要想就知道很麻烦。

下图为代码下载解压之后的文件,其中rebuild.sh文件可能不存在,只是自己写的一个指令脚本,用来对代码进行clean等操作。

下面为rebuild.sh文件的内容

下图解释每个指令的作用:

上述rebuild.sh文件的执行指令为:

> sh rebuild.sh

通过上述指令,可以重新build项目。

之后执行下述指令

产生错误信息如下所示:

原因是src/main.o以及src/util.o文件缺少,其中main.o以及util.o文件都是通过相对应的.c文件经过编译得到的,也就是意味着main.c以及util.c文件出现了错误。所以下一步需要对src/main.c以及src/util.o文件经行必要的修改,来完成我们的第一个实验hello1。

具体的文件路径如下图所示:

下面我们查看main.c文件,可以使用指令gedit main.c同样也可以使用vim main.c

通过上述的提示,告诉我们需要添加一个main函数用来打印一条消息,因为我们的第一个实验就是hello1嘛,所以就直接让程序打印HelloWorld未尝不可。

这样经过上述的操作,我们就可以开心地运行我们的helloworld程序了。

首先还是先运行sh rebuild.sh,重建项目。

下图为需要进行的实验hello-1的运行指令:

运行该指令文件结果如下所示:

其中会在下面这个地方稍微等待一下:

接着程序进行编译,编译结果如下:

这样我们就可以运行我们的hello1程序了,运行指令如下:

> qemu-system-i386 -nographic -m 512 -kernel images/kernel-ia32-pc99 -initrd images/hello-1-image-ia32-pc99

注意这里可能报错,如果之前工作没有错误的话,这里报的错误应该就是缺少程序包。由于已经安装时错误截图没有保留,所以没法给大家看具体的错误截图了。

如果没记错的话,缺少的安装包应该就是这个qemu-system-x86,如果不是这个的话,大家按照提示缺少的安装包进行安装即可。

> sudo apt-get install qemu-system-x86

修复上述问题之后,运行结果如下所示:

经过上述的操作,对于seL4的基本配置已经告一段落。

接下来就开始对seL4源码的阅读分析。

另外推荐一个不错的链接:

推荐技术分享网站:http://www.jianshu.com/users/d130a6d54c7b/latest_articles(技术分享,欢迎大家捧场)

seL4环境配置的更多相关文章

  1. uboot环境配置

    uboot环境配置 通过配置uboot让它在启动过程中从tftp获取内核和设备树,并从在加载内核之后把通过启动参数将"从nfs挂载根文件系统"传入内核.这个配置主要是通过uboot ...

  2. 史上最全Windows版本搭建安装React Native环境配置

    史上最全Windows版本搭建安装React Native环境配置 配置过React Native 环境的都知道,在Windows React Native环境配置有很多坑要跳,为了帮助新手快速无误的 ...

  3. Electron的环境配置

    原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...

  4. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  5. PHP_环境配置_python脚本_2017

    Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...

  6. PHP环境配置

    PHP环境配置 1.Apache的安装 第一步: 1.    双击httpd-2.2.17-win32-x86-no_ssl.msi.出现 Windows 标准的软件安装欢迎界面,直接点“Next”继 ...

  7. Visual studio 通用开发环境配置:SDL,FFMPEG为例

    引言 每一个C++库的使用都是从开发环境的配置开始的,其实每个库的配置过程都是大同小异,总结下来有下面几个步骤: 下载库文件,这里假定是已经预先编译完成的. 配置库文件的包含目录(include)和库 ...

  8. windows 7下React Native环境配置

    React Native 是 Facebook 推出的一个用 Java 语言就能同时编写 ios,android,以及后台的一项技术,它可以做到实时热更新 .FaceBook 也号称这们技术是 “Le ...

  9. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

随机推荐

  1. 【JavaScript吉光片羽】遭遇IE8

    最初对做兼容性的认知只停留在UI层面,但其实UI层面都还好,因为毕竟你可以直接看得见现象,更为重要的是在JavaScript层面,因为这个部分涉及到功能性,前者最多是体验性的问题.下面扯一下这几天遇到 ...

  2. CSharpGL(35)用ViewPort实现类似3DMax那样的把一个场景渲染到4个视口

    CSharpGL(35)用ViewPort实现类似3DMax那样的把一个场景渲染到4个视口 开始 像下面这样的四个视口的功能是很常用的,所以我花了几天时间在CSharpGL中集成了这个功能. 在CSh ...

  3. 镜像切换Logreader Agent报错:分发数据库中可能存在不一致的状态(续)

    报错: 分发数据库中可能存在不一致的状态: dist_backup_lsn {00000030:000001ba:0004},dist_last_lsn {00000030:000001cd:0004 ...

  4. 借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘

    本挖掘典型地运用了机器学习技术,例如聚类,分类,关联规则,和预测建模.这些技术揭示潜在内容中的意义和关系.文本发掘应用于诸如竞争情报,生命科学,客户呼声,媒体和出版,法律和税收,法律实施,情感分析和趋 ...

  5. nodejs处理url工具

    url模块提供3个方法:parse,format,resolve 1.parse 要先引入url模块 >url.parse('http://www.cnblogs.com/cate/108703 ...

  6. MVC5 网站开发之八 栏目功能 添加、修改和删除

    本次实现栏目的浏览.添加.修改和删除. 栏目一共有三种类型. 常规栏目-可以添加子栏目,也可以添加内容模型.当不选择内容模型时,不能添加内容. 单页栏目-栏目只有一个页面,可以设置视图. 链接栏目-栏 ...

  7. AngularJS Resource:与 RESTful API 交互

    REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格.RESTful风格的设计不仅 ...

  8. 自己用js实现全屏滚动

    参照fullPage.js的效果,用自己的想法实现的. 实现的效果:1.全屏滚动,滚动一下齿轮就会滚动全屏. 2.自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏. 下一步计划: 1.改 ...

  9. express路由探析(续)

    上一篇分析了express的路由机制,这次主要补充一些没有说到的东西. 之前说到,Router是中间件容器,Route是路由中间件,他们各自维护一个stack数组,里面存放layer,layer是封装 ...

  10. 关于Java语言中那些修饰符

    一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的 ...