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. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值