Home

Awesome

Navy Application Framework

编译方法

在应用程序目录(如tests/hello/)下通过

make ISA=xxx

编译程序, 通过

make ISA=xxx install

编译程序并将程序安装到文件系统镜像fsimg/bin/目录下.

若要单独编译函数库(如libs/libbmp), 则需要运行

make ISA=xxx archive

通过

make clean

清除应用程序或函数库的编译结果, 也可在工程根目录下运行

make clean-all

清除所有应用程序和函数库的编译结果.

文件系统镜像

fsimg/目录包含文件系统镜像的内容:

bin/ -- 二进制文件(该目录默认未创建)
share/  -- 平台无关文件
  files/ -- 用于文件测试
  fonts/ -- 字体文件
  music/ -- 示例音乐
  pictures/ -- 示例图像
  games/ -- 游戏数据(该目录默认未创建)
    nes/ -- NES Roms
    pal/ -- 仙剑奇侠传相关数据文件

工程根目录下的Makefile中包含构建文件系统镜像的规则, 可以修改APPSTESTS变量指定安装到文件系统镜像的应用程序, 然后通过

make ISA=xxx fsimg

来编译并安装指定的应用程序.

此外可以通过

make ISA=xxx ramdisk

来将fsimg/中的内容顺序打包成一个简单的镜像文件build/ramdisk.img, 并生成相应的文件信息build/ramdisk.h. 支持简单文件系统的操作系统(如Nanos-lite)可以使用这一镜像.

支持的ISA/操作系统

native (编译到本地Linux执行)

编译在本地时不链接libc和libos,使用本地的glibc/glibstdc++ (用g++不带参数链接)。

使用LD_PRELOAD实现了本地模拟的/dev/events, /dev/fb和其他一些设备文件, 具体可参考libs/libos/src/native.cpp. 代码模拟了与Navy兼容的运行时环境, 使用以下命令运行native程序:

make ISA=native run mainargs="参数1 参数2 ..."

x86, mips32, riscv32, am_native (Nanos, Nanos-lite)

其中am_native是指在AM项目native上运行操作系统.

运行时环境

系统调用

Navy的运行时环境会提供一部分POSIX系统调用, 具体见libs/libos/src/syscall.c, 可以往其中添加更多的系统调用. 实现的系统调用越多, 可以运行的程序就越多. 若调用了未实现的系统调用, 则会触发assertion fail; 若一个未实现的系统调用不便触发assertion fail, 则会调用exit()结束运行.

特殊文件

Navy假设操作系统提供以下设备文件的支持:

  1. 设备文件
  1. procfs文件系统: 所有的文件都是key-value pair, 格式为 [key] : [value], 冒号左右可以有任意多(0个或多个)的空白字符(whitespace).

例如一个合法的 /proc/dispinfo文件例子如下:

WIDTH : 640
HEIGHT:480

运行库

应用程序列表

Navy目前收录的应用程序位于apps/目录下, 包括

应用程序编写指南

ANSI C应用程序

原则上, ANSI C程序可以直接编译运行. stdin可以读取输入, stdout, stderr能接受输出.

NTerm终端应用程序

stdout, stderr输出字符序列显示在终端上,接受ANSI escape sequences (#表示数字):

NTerm-specific:

具体可参考apps/nterm/src/term.cpp.

NWM图形程序

通过NWM创建的应用程序可以通过以下文件描述符与NWM通信: