SeL4:一 辅助库

辅助库介绍:
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函数。


我们内部开发了四个主要的库集合:

     seL4_libs:  在 seL4 开源之前启动的 seL4 特定库
     util_libs:    在 seL4 开源之前启动的独立于操作系统的库
     seL4_projects_libs:在 seL4 开源后启动的 seL4 特定库 - 新库应该放在这里。
     projects_libs:seL4 开源后启动的操作系统独立库——新的操作系统独立库应该放在这里。

seL4_libs   (用于处理 seL4 的库集合。)

     libsel4allocman:用于管理虚拟内存、malloc 内存和 cspace 的分配器。
     libsel4bench:一个带有实用程序的库,用于在 seL4 上进行基准测试。
     libsel4debug:一个带有实用程序的库,用于在 seL4 上进行调试。 仅在调试用户级应用程序时有用; 潜在的hacky。
     libsel4muslcsys:支持根任务的 muslc 的库。
     libsel4platsupport:libplatsupport 的包装器,专门用于 seL4。
     libsel4simple:一个对 seL4 应用程序的引导环境进行抽象的接口。
     libsel4simple-default:内核主分支的简单实现。
     libsel4simple-experimental:内核实验分支的简单实现。
     libsel4sync:一个使用通知构造基本锁的同步库。
     libsel4test:一个非常基本的测试基础设施库。
     libsel4utils:一个库操作系统——常用的东西,积极维护:实现线程、进程、elf 加载、虚拟内存管理等。
     libsel4vka:seL4 的分配接口。
     libsel4vspace:seL4 的虚拟内存管理接口。

util_libs

独立于操作系统的实用程序库的集合:

     libcpio - 用于解析 CPIO 文件的库。
     libelf - 用于解析 ELF 文件的库。
     libethdrivers - 以太网驱动程序库。
     libpci - 一个用于 PCI 驱动程序的库。
     libplatsupport - 一个平台支持实用程序库,用于与驱动程序、定时器驱动程序、串行驱动程序和时钟驱动程序交互的接口。
     libfdt - 用于平面设备树操作的库 libfdt
     libutils - 通用实用程序库,包括:
         ansi.h - 用于格式化 ansi 输出的实用程序。
         arith.h - 算术实用程序,即 MAX、MIN、ROUND_UP 等。
         assume.h - 提供 ASSUME,它允许用户向 gcc 提供提示。
         builtin.h - 为使用内置 gcc 属性定义方便的宏。
         compile_time.h - 提供编译时断言。
         debug.h - 各种调试宏。
         formats.h - printf 的格式。
         list.h - 一个基本的、基于 void * 指针的列表实现。
         math.h - 提供复杂的数学,即。 muldivu64.
         page.h - 提供虚拟内存页面操作。
         sglib.h - 一个开源模板库,提供数组、列表、红黑树等。
         stringify.h - 提供用于创建更多宏的宏。
         time.h - 提供时间常量(即 US_IN_S)
         util.h - 包括所有 util 头文件。
         verification.h - Isabelle 中用于验证的宏。
         zf_log_config.h - 提供 zf_log 配置。
         zf_log.h - 一个开源日志库。
         libpicotcp - 包含 picotcp 的包装器库。

seL4_projects_libs

seL4 的库集合。 这些库与 seL4_libs 兼容。

projects_libs

平台独立库

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值