为了测试内核以及让内核更加的「可交互」,我们实现了一部分用户进程,其中包括一个简易 Shell,可以执行一些简单的命令。
用户编写的程序入口为 main()
,还需要链接启动汇编和我们编写的一些库文件,具体文件如下:
Entry.S
:程序入口,完成 argc argv 的传递include/*.h
:库文件,实现了一些基本的函数*.c
:库文件的具体实现和用户程序
我们采取了两种用户进程的加载方式:链接到内核和 exec
加载。
由于初期未实现文件系统以及一些关键系统调用,我们无法直接执行 sd 卡中的程序,故我们将 ELF 文件转化为 C 文件中的字符数组,编译到内核中,并将其按照二进制文件的形式加载到内存对应位置:
PROCESS_CREATE_PRIORITY(syscall_test, 1)
PROCESS_CREATE_PRIORITY(sh, 1)
将用户程序编译完成后,生成 sd 卡镜像,内核通过 exec
系统调用访问该程序。