0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

seL4微内核入门-代码下载运行及资料

yzcdx 来源:OS与AUTOSAR研究 作者:OS与AUTOSAR研究 2022-11-12 15:42 次阅读

不废话,老一套:编译环境准备,代码下载,代码编译,qemu代码运行。本文介绍的内容都是好东西,提供全方位的微内核入门指导,就看毅力怎么样了,就像那句话:笨鸟先飞。

1. sel4简介

sel4是微内核操作系统,号称世界上最安全,最高效的微内核。提供非posix兼容的编程接口,它只提供了少量的服务,创建和管理虚拟地址空间、线程以及进程间通信(IPC)。亮点是capability机制,管理每个进程所拥有的资源。这个机制的引入也导致了sel4较难理解和应用开发。关于微内核的介绍参考上一篇:

2. Turorial练习

从官网提供的学习教程hello world开始练习,
df669de2-3df3-11ed-9e49-dac502259ad0.png

2.1 环境准备

这里同样,采用的开发方式为VitrualBox+Ubuntu,下载VitrualBox和Ubuntu镜像(版本>= 20.04),安装虚拟机,具体不再描述。

df9622b0-3df3-11ed-9e49-dac502259ad0.png

环境搭建是否正常,以能运行第一个helloworld工程为准,详细步骤为:

1)repo工具安装

mkdir~/binPATH=~/bin:$PATH curl  https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
2)lib依赖库和编译工具安装

#ThebasicbuildpackageonUbuntuisthe build-essentialpackage.Toinstallrun:sudo apt-get updatesudo apt-get install build-essential #AdditionalbasedependenciesforbuildingseL4 projectsonUbuntuincludeinstalling:sudo apt-get install cmake ccache ninja-build cmake-curses-guisudo apt-get install libxml2-utils ncurses-devsudo apt-get install curl git doxygen device-tree-compilersudo apt-get install u-boot-toolssudoapt-getinstallpython3-dev python3-pippython-is-python3sudoapt-getinstallprotobuf-compiler python3-protobuf sudoapt-getinstallqemu-system-arm qemu-system-x86qemu-system-miscsudoapt-getinstallgcc-arm-linux-gnueabi g++-arm-linux-gnueabisudoapt-getinstallgcc-aarch64-linux-gnu g++-aarch64-linux-gnu
3)Python 依赖库

pip3 install--user setuptoolspip3 install--user sel4-deps# Currently we duplicate  dependencies for python2 and python3 as a python3 upgrade is in processpip install--user setuptoolspip install--user sel4-deps
4) 编译库依赖

sudo apt-get install clang gdbsudo apt-get install libssl-dev libclang-dev libcunit1-dev libsqlite3-devsudo apt-get install qemu-kvm
5)证明依赖

sudo apt-get installpython3 python3-pippython3-devgcc-arm-none-eabi build-essentiallibxml2-utilsccachencurses-dev librsvg2-bindevice-tree-compilercmakeninja-build curlzlib1g-devtexlive-fonts-recommendedtexlive-latex-extra texlive-metapost texlive-bibtex-extra mlton-compiler haskell-stack

2.2 下载代码 下载代码前安装python依赖用于编译教程

pipinstall--useraenumpip install --user pyelftools
下载代码前配置repo邮箱信息

gitconfig --globaluser.email"you@example.com"gitconfig--globaluser.name "Your Name"
下载代码(这里使用sel4官方的代码进行练习,从github上下载)‍

mkdirsel4-tutorials-manifestcd sel4-tutorials-manifestrepo init -u  https://github.com/seL4/sel4-tutorials-manifestrepo sync
2.3 Hello World应用生成 初始化hello-world文件夹‍

./init--tuthello-world--solution
hello-world是示例名字,练习其他示例更换这个名字就可以,命令加 --solution后缀,可以补全代码。可以看到生成了下面的hello-world文件夹,里面有c代码。

dfbb7376-3df3-11ed-9e49-dac502259ad0.png

2.4 代码编译

cdhello-world_buildninja
编译成功后显示:

dfe74c4e-3df3-11ed-9e49-dac502259ad0.png

2.5 代码运行

# In build directory, hello-world_build./simulate
成功后显示:

e00930f2-3df3-11ed-9e49-dac502259ad0.png

运行后Ctrl-A, X退出qemu模拟工具。

3. Hello World代码分析

编译的时候,我们使用了ninja这个命令,Ninja 是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。

可见ninja跟makefile同级别的都是构建工具,生成编译器使用的规则。

在sel4-tutorials-manifest/hello-world_build/build.ninja文件中可以看到

e048cd34-3df3-11ed-9e49-dac502259ad0.png

执行ninja命令就会通过这个build.ninja进行编译,会找到hello-world的代码

dfbb7376-3df3-11ed-9e49-dac502259ad0.png

cmake是makefile之上的一层封装。

CMakeLists.txt – cmake使用的脚本,将根任务合并到更广泛的 seL4 构建系统中的文件。

src/main.c - 初始任务的单个源文件。
hello-world.md - 为教程生成的自述文件。

intmain(intargc,char*argv[]){     printf("Hello, World!
");      printf("Second hello
");    return  0;}
如果修改了应用的源码,重新运行重建项目:

Bash# In build directory, hello-world_buildninja
然后再运行simulator:

# In build directory, hello-world_build./simulate
4. 学习资料

sel4原理熟悉,主要从两条路进行学习:

一边是sel4的参考手册,另一边就是基于Tutorials教程开始一步一步的做实验,这样可以做到理论和实践结合。

(turorials中camkes相关的例子可以先不学习)

e076385a-3df3-11ed-9e49-dac502259ad0.png

辅助库介绍:

tutorials工程中,其他辅助库的介绍,除了sel4微内核之外,还需要提供一些库,才能让你的应用程序运行起来。

sel4内核:首先是sel4内核。单单的一个内核运行起来,是没法运行一个例如hello world这样的程序的,因为这个程序需要链接其他的库,比如stdio中的printf,而且该程序和内核交互,就需要知道内核提供的标准API有哪些。

libsel4:sel4内核提供的api都用内核源码工程里面的libsel4这个库来描述。里面是sel4内核支持的标准api。


sel4_libs:当一个程序连接了这个libsel4之后,就可以使用sel4内核的标准api了,这个和Linux内核提供的标准api类似,是和操作系统密切关联的。非posix标准的。另外这个libsel4库不是很好用,因此在这之上又堆叠了一个sel4_libs库,这个库是对sel4标准api的进一步功能性的封装,比如分配一个cap对象,调用者无需知道更下层的sel4标准api调用的细节。

musllibc:这个是开源的一个libc库,和sel4是没有直接关系的。用到这个工程里面来,主要是提供标准的符合posix标准的api,其他的操作系统也是可以使用的。因此应用程序可以直接使用libsel4中的函数,也可以使用sel4_libs中的函数,比较标准的功能就可以使用muscllibc中的功能了。为了打通muslibc和sel4_libs,sel4_libs中提供了一个libsel4muslcsys这样的一个库,muslibc中的一些功能通过sys call的方式调用到libsel4muslcsys这个接口库中,这个接口库就会调用sel4_libs中的相应函数。当然muslibc中的有些函数可能会直接调用libsel4的函数接口(目前还没有看到muslibc中或者libsel4中有对这两个库的对接口的实现,可能这个猜测不对)

sel4runtime:一般程序里面都有一个main函数,作为该程序的入口位置,但是,这个程序的运行并不是从main开始的,在运行main之前,其实还做了其他的一些工作,比如堆栈指针的设置,环境变量的获取,其他的一些准备工作等等。一般编译器,比如gcc编译器编译一个比如hello world这样的一个代码的时候,会指定该程序的入口地址是 _start, 就是会找寻源码,把 _start开始的代码放在该程序代码段的最开始位置,hello_world.c源码中并没有 _start这个函数或者标号,所以这个标号是其他地方的,且是会被hello_world.c链接进来的源码,在sel4 tutorial工程里,我们用sel4runtime(里面是源码)和lshello_world.c一起编译,链接。这个sel4runtime工程里面提供了各个架构的 _start入口标号,该标号紧跟着的是该架构的一些汇编语言,处理堆栈等等,之后跳转到一个简单的c函数处,该c函数收集环境变量,传入参数等,并最终调用main函数。


审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6941

    浏览量

    124154
  • 微内核
    +关注

    关注

    0

    文章

    58

    浏览量

    13490

原文标题:seL4微内核入门-代码下载运行及资料

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    最近写了一个lcd的驱动,每次下载运行的结果

    同样的程序,每次下载运行的结果不一样,是代码的问题吗?
    发表于 11-09 23:41

    seL4移植到Xilinx Zynq UltraScale + MPSoC,以实现极高的硬件安全性

    seL4是经过正式验证的内核,考虑到安全性和性能而构建。对于具有严格安全性和/或安全性要求的项目,它是一种非常有吸引力的软件解决方案。尽管seL4是一个不错的选择,但缺点之一是,与其
    发表于 08-20 19:23

    HarmonyOS学习之十:HarmonyOS内核技术

    ,第三代内核蓬勃发展,许许多多内核都被开发出来,主要代表有:seL4、Fiasco.OC、NOVA 等。 本来第一代
    发表于 11-30 13:55

    RK3399(内核入门篇)通过sysfs清楚了解设备的系统状况

    RK3399平台开发系列讲解(内核入门篇)1.1、通过sysfs清楚了解设备的系统状况 sys目录
    发表于 12-16 08:00

    ide界面为什么找不到选择从Flash上传至ILM的下载运行模式?

    ide界面找不到选择从Flash 上传至ILM 的下载运行模式 下册第12章运行gpio实验 ide界面找不到选择从Flash 上传至ILM 的下载运行模式
    发表于 08-12 07:28

    AT32 MCU Cortex M4内核入门指南

    AT32 MCU Cortex M4内核入门指南主要介绍了AT32 M4 内核系统架构,并针对M4 内核
    发表于 10-25 08:08

    基于内核入侵的木马设计与实现

             通过内核入侵是木马入侵 Linux 系统的一种重要形式,其原理是利用Linux 内核提供的机制来实现木马的各种功能,主要是通过内核
    发表于 09-05 08:32 9次下载

    OK Labs推出可供下载的移动安全内核OKL4 Verified

    Open Kernel Labs (OK Labs)日前推出了可供下载的OKL4 Verified(项目名称为seL4
    发表于 01-28 08:47 1139次阅读

    linux内核入门教材之linux内核设计与实现第二版中文版免费下载

    此书是当今首屈一指的linux内核入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是
    发表于 10-15 18:20 0次下载
    linux<b class='flag-5'>内核入门</b>教材之linux<b class='flag-5'>内核</b>设计与实现第二版中文版免费<b class='flag-5'>下载</b>

    SEL-SPC5 SEL-SPC5智能选择32位Power架构产品

    电子发烧友网为你提供(ti)SEL-SPC5相关产品参数、数据手册,更有SEL-SPC5的引脚图、接线图、封装手册、中文资料、英文资料SEL
    发表于 05-20 12:05

    鉴释宣布加入RISC-V基金会、Linux基金会、seL4基金会与ioXt联盟,旨在实现静态代码分析服务的全方位赋能

    静态代码工具开发商鉴释科技(下文简称:鉴释)宣布其加入RISC-V基金会、Linux基金会、seL4基金会,以及ioXt联盟四大国际非盈利组织。
    的头像 发表于 07-27 14:29 8870次阅读

    seL4内核参考⼿册中⽂翻译版

    内核操作系统SEL4的简介、功能描述
    发表于 01-21 09:33 0次下载

    seL4操作系统内核

    seL4.zip
    发表于 04-18 10:13 6次下载
    <b class='flag-5'>seL4</b>操作系统<b class='flag-5'>内核</b>

    谷歌在官博上又发布了一款全新的操作系统——KataOS

    目前的GitHub版本,已经涵盖了大部分KataOS的核心部分,包括用于Rust的框架(如sel4-sys crate,用于让seL4系统调用API),一个用Rust编写的备用根服务器(用于全系统的动态内存管理),以及对seL4
    的头像 发表于 10-28 11:54 987次阅读

    什么叫变压器的空载运行、负载运行及超负荷运行

    什么叫变压器的空载运行、负载运行及超负荷运行? 变压器的空载运行、负载运行及超负荷运行是变压器工
    的头像 发表于 01-26 16:59 6082次阅读