l4re/fiasco
一墨一飞花
人生没有白走的路,每一步都算数。成为最好的自己。
展开
-
L4RE学习笔记——简单教程
1.最简单的组件构成可能包含以下几部分(以hello应用为例):• Fiasco.OC— Microkernel• Sigma0— Root Pager• Moe— Root Task• Ned— Init Process• hello— Hello World Application2.、x86主机上利用qemu运行L4RE的iso镜像2.1首先,需要一个modules.list文件来定义包含所...原创 2018-06-23 01:33:24 · 1356 阅读 · 0 评论 -
Ds_handler类和Direct_mmio_handler类分析
Ds_handler类 class Ds_handler : public Vmm::Mmio_device { l4::Cap<L4Re::Dataspace> _ds; l4_addr_t _offset; bool _mergable(cxx::Ref_ptr<Mmio_device> other, ...原创 2018-08-25 17:44:31 · 282 阅读 · 0 评论 -
vbus机制分析
1.概述moe通过解析uvmm.tmgr来启动io进程和vm虚拟机进程。在uvmm.tmgr脚本中会将io.cfg和vm_pass.vbus文件(双虚拟机会有两个vbus文件)作为参数传递给io进程解析;另外,会将与vm虚拟机对应的vbus的能力权限传递给vm虚拟机。Uvmm在初始化时,会获取对应的vbus能力权限,通过IPC与io server服务端通信来获取整个vbus总线设备,并保...原创 2018-08-25 17:55:26 · 7505 阅读 · 0 评论 -
vbus机制之lua代码注释
在modules.list中带uvmm的entry会在moe中启动uvmm.tmgr。 entry uvmm-zcu102 kernel fiasco-serial_esc roottask moe rom/uvmm.tmgr module uvmm module l4re module tmgr module hello modu...原创 2018-08-25 18:01:55 · 978 阅读 · 0 评论 -
smmu实现分析
1.概述1.1 SMMU产生背景了解SMMU产生背景之前,首先要了解DMA工作原理。因为SMMU的产生主要是为了解决虚拟化平台下的DMA重映射问题。DMA,外设和内存的连接件,用于解放CPU。外设可以通过DMA,将搜集的数据批量传输到内存,然后再发送一个中断通知CPU去内存取。这样减少了CPU被中断的次数,提高了系统的效率。DMA要能够正常工作,首先要进行正确的配置(包括通道选择...原创 2018-09-10 10:31:49 · 15588 阅读 · 2 评论 -
L4/fiasco原生驱动在瑞萨M3单板支持emmc
EMMC协议层框架在另外文档中介绍,本文主要介绍跟单板(瑞萨M3)emmc相关实现部分。注:驱动基于linux 4.9.0版本移植。1.初始化(probe)1.1MMC主结构体内存申请调用协议层接口函数mmc_alloc_host为struct tmio_mmc_host申请空间。 struct tmio_mmc_host* tmio_mmc_host_alloc()...原创 2019-01-23 09:36:54 · 1126 阅读 · 0 评论 -
ARMV8对CPU虚拟化的支持及L4_fiasco中实现
部分素材参考原同事文档,如有冒犯敬请谅解。1.ARMV8对虚拟化的支持ARMV8把之前架构中的processor mode的概念去掉(或者说淡化),取而代之的是4个固定的Exception level,分別为EL0到EL3, 其中数字越大代表特权(privilege)越大。类似地,可以将EL0归属于non-privilege level,EL1/2/3属于privilege leve...原创 2019-03-29 12:58:44 · 7802 阅读 · 0 评论 -
L4_fiasco中FPU虚拟化实现介绍
1.硬件方面:Armv8提供了两个寄存器用于控制“FPU虚拟化”——CPTR_EL2、CPACR_EL1。我们截取手册上关键位置。CPTR_EL2当CPTR_EL2寄存器的bit10为0时,FPU相关操作不被trapped,相反为1,则所有意欲访问FPU部件的指令(不管是EL0、EL1还是EL2)都会被trap到EL2。CPACR_EL1CPACR_EL1寄存器...原创 2019-03-29 13:04:55 · 1237 阅读 · 1 评论 -
Binary_ds类分析
Binary_ds类定义简化表: namespace Boot { class Binary_ds { public: Binary_ds(char const *name) : _ds(L4Re::chkcap(L4Re::Util::Env_ns().query<L4Re::Dataspace>(name),...原创 2018-08-25 17:43:11 · 279 阅读 · 0 评论 -
make_device函数分析
定义在pkg\uvmm\server\src\device.h文件中: template< typename T, typename... Args > cxx::Ref_ptr<T> make_device(Args &&... args) { return cxx::make_ref_obj<Dev_ref_obj...原创 2018-08-25 17:28:39 · 754 阅读 · 0 评论 -
L4RE学习笔记——服务介绍
1.服务概述: Sigma0,theRootPagerSigma0是L4Re的第一个非常有用的task,用于处理root task(moe)的缺页异常。它可以认为是内核的一部分,尽管它运行在非特权模式。 Moe,theRootTaskMoe是L4的根任务,负责bootstrap the system,并且为上层应用提供基本的资源管理,包括:Memory:以动态分配((L4Re::Mem_alloc...原创 2018-06-29 15:54:57 · 1418 阅读 · 0 评论 -
fiasco内核分析——启动
前提1:以arm64架构为例进行fiasco内核分析前提2:编译生成arm64架构任意entry的镜像文件后,在编译路径下有个auto文件夹,其中就包含通过perl预处理后生成的内核源文件;通过rm *.ready命令删除临时文件;通过sed -i '/#line/d' *.cc和sed -i '/#line/d' *.h命令去掉源文件中的临时注释行;就得到一个相对标准的C++实现的fiasco内...原创 2018-07-02 08:52:12 · 1433 阅读 · 0 评论 -
L4RE 学习笔记——编程相关概念
1.Capabilities and NamingL4Re是一个基于细粒度访问控制及Capabilities (能力权限)的系统。通常来讲,拥有一个Capabilities(能力权限)意味着被允许同其代表的对象通信。所有用户可见的内核对象,如task,thread,IRQs等都只能通过能力权限来访问。能力权限存储在每个任务的能力权限表中,并且由选择器引用。简单的讲,选择器就是一个指向当前任务能力权...原创 2018-06-27 00:06:01 · 1144 阅读 · 0 评论 -
fiasco内核分析——内核时钟
如上篇分析,在fiasco系统启动的最后阶段——Kernel_thread::bootstrap中,会调用bootstrap_arch函数启动从核,同时启动每个核上的timer定时器。下面具体分析。 bootstrap_arch——》boot_app_cpus——》Platform_control::boot_ap_cpus(_tramp_mp_entry)注意到定义:extern char _t...原创 2018-07-04 11:32:57 · 774 阅读 · 3 评论 -
L4Re基于zynq102单板ttc驱动开发
本文借hello包的壳,对L4Re驱动开发的流程和步骤进行总结(有不妥或错误的地方,欢迎指正)。1.首先是驱动主体官网可下载zynq102的trm手册“ug1085-zynq-ultrascale-trm.pdf”。从Ch. 10: System Addresses章节可以找到TTC0定时器的基地址:0xff110000 可以调用zreio_request_iomem函数将TTC0寄存器的基地址映...原创 2018-07-05 22:45:59 · 1075 阅读 · 0 评论 -
Fiasco进程间通信
1.概述Fiasco的进程间通信主要通过do_ipc函数完成,其原型:voidThread::do_ipc(L4_msg_tag const &tag, bool have_send, Thread *partner, bool have_receive, Sender *sender, L4_timeout_pair t, Syscall_fr...原创 2018-07-06 08:40:01 · 888 阅读 · 0 评论 -
uvmm中设备管理
1.设备分类Uvmm中管理的设备分为两类:透传设备和虚拟设备(模拟设备)。在虚拟机中通过Device_repository类管理,其结构类图如下:2.设备获取所有的设备(包括虚拟和透传设备)通过解析dtb文件得到,然后加入到Device_repository类的_devices成员变量中进行保存。_devices成员是Dt_device结构类型,其包含了三个成员,path:node...原创 2018-08-25 17:08:15 · 1023 阅读 · 1 评论 -
Io_proxy类
Io_proxy设备为透传设备,因为其工厂类中将pass_thru属性设置为自身: F() { pass_thru = this; } bind_irq方法 void Io_proxy::bind_irq(Vmm::Guest *vmm, Vmm::Virt_bus *vbus, Gic::Ic *ic, ...原创 2018-08-25 17:16:10 · 409 阅读 · 0 评论 -
Uvmm中DTB文件解析
Uvmm中对guest的管理实例——Vmm::Vm vm_instance;首先找到main函数(pkg\uvmm\server\src\main.cc)----->run函数。Run函数中关于dtb解析的程序段如下: if (device_tree) { info.printf("Loading device tree...\n"); ...原创 2018-08-25 17:25:58 · 1131 阅读 · 0 评论 -
一个pagefault引发的“血案”
unhandled write page fault at 0x7ffb0550 pc=0x1036820unhandled write page fault at 0x7ffb0350 pc=0x1036820unhandled write page fault at 0x7ffb0150 pc=0x1036820…… 同一个pc位置持续的pagefault,而且地址不断减...原创 2019-03-29 13:09:08 · 1658 阅读 · 0 评论