1.最简单的组件构成可能包含以下几部分(以hello应用为例):
• Fiasco.OC— Microkernel
• Sigma0— Root Pager
• Moe— Root Task
• Ned— Init Process
• hello— Hello World Application
2.、x86主机上利用qemu运行L4RE的iso镜像
2.1首先,需要一个modules.list文件来定义包含所需模块的entry
modaddr0x002000000 entryhello kernelfiasco -serial_esc roottaskmoe rom/hello.cfg modulel4re modulened modulehello.cfg modulehello |
这个文件描述了所有需要放在ISO镜像里的二进制文件和脚本文件,同样也描述了GRUB的menu.lst(x86主机的启动菜单项包含的内容)文件的内容。这个文件可以在l4/conf/modules.list路径查找。
2.2entry中的module在编译时都会生成,除了hello.cfg;hello.cfg的内容应该类似下面这样:
localL4 = require("L4"); L4.default_loader:start({},"rom/hello"); |
第一行保证了”L4”这个package,对这个脚本是可用的。
第二行利用“L4”这个package中的default_loader来加载"rom/hello"这个二进制文件。
这个文件同样可以在l4/conf/examples目录下找到。
注:modules.list中定义的所有modules的数据空间(dataspace)为:L4Re::Dataspace,而名字空间(namespace)为:L4Re::Namespace;并且其对init进程(Ned)会作为‘rom’形式呈现(什么意思呢?直观的说就是系统启动后entry下的所有module二进制文件会包含在/rom目录下)。
2.3编译内核
进入内核目录——kernel/fiasco/,利用命令创建内核编译目录以及相应文件:
|
2.4编译L4RE
进入l4目录,执行如下命令:
makeB=builddir makeO=builddir/ config makeO=builddir/ -j4 |
2.5打包镜像,并用qemu验证
进入L4RE编译目录——l4/builddir,执行如下命令:
makegrub2iso E=helloMODULE_SEARCH_PATH=/home/gaojy/l4re-base-18.06/src/kernel/fiasco/mybuild/ makegrub2iso E=helloMODULE_SEARCH_PATH=/home/gaojy/l4re-base-18.06/src/kernel/fiasco/mybuild/ |
斜体部分改为自己源码路径。执行成功后会弹出qemu窗口打印”helloworld!”字样。
附录:
源码路径:http://www.l4re.org/download/snapshots/
如果第一次搭建环境,你可能需要安装如下软件:
sudo
apt-get install make gawk g++ binutils pkg-config g++-multilib
subversion
libncurses5-dev qemu xorriso