测试用户态程序

我们提供了一些简单的测试方法,包括:

仅测试用户态程序能否运行(无 ELF、无系统调用)

利用下面的程序,我们可以在没有实现 ELF 和系统调用的情况下,测试用户态程序是否能够运行。运行前,请确保这个程序的地址空间中 0x10000000 地址(UART 的物理基地址)已经被映射到了 0x10000000 地址。和一般程序不同,这个程序是从 pc 为 0 开始执行的。

let program: [u32; 4] = [
    0x10000537, // lui a0,0x10000
    0x0310059b, // addiw a1,zero,0x31
    0x00b50023, // sb a1,0(a0)
    0xbfd5 // j 0
];

如果程序能够正常运行,那么其将会不断打印字符 1

测试调度是否正确(无 ELF、无系统调用)

利用下面的程序,我们可以在没有实现 ELF 和系统调用的情况下,测试调度是否正确。运行前,请确保两个程序的地址空间中 0x10000000 地址(UART 的物理基地址)已经被映射到了 0x10000000 地址。和一般程序不同,这个程序是从 pc 为 0 开始执行的。

let program1: [u32; 4] = [
    0x10000537, // lui a0,0x10000
    0x0310059b, // addiw a1,zero,0x31
    0x00b50023, // sb a1,0(a0)
    0xbfd5 // j 0
];

let program2: [u32; 4] = [
    0x10000537, // lui a0,0x10000
    0x0320059b, // addiw a1,zero,0x32
    0x00b50023, // sb a1,0(a0)
    0xbfd5 // j 0
];

如果程序能够正常运行,那么控制台将会不断交替打印字符 12