操作系统的定义
Operating System,是一组系统软件程序。
-主管并控制计算机操作、运用和运行硬件、软件资源。
-提供公共服务来组织用户交互。
操作系统有广义和狭义之分。
-狭义:内核。
-广义:发行包 = 内核 + 一组软件 e.g. ubuntu windows
QEMU-virt地址映射
其中kernel放置于VIRT_DARM空间,虽然VIRT_DARM在此表格里地址空间写的是0x0,但其实是有一个大小的,kernel就放在这个空间里。
-Ttext=0x8000000,就是编译的时候告诉链接器指令放置的开始位置。
QUMU -kernel os.elf意思是将os.elf这个文件里的二进制代码放到kernel这个空间里。
Machine模式下的CSR列表
csr 列表:
CSRRW(atomic read/write csr)
-CSRRW先读出CSR中的值,将其按XLEN位的宽度进行“零扩展”后写入RD;然后将RS1中的值写入CSR。
-以上两步操作以“原子性”方式完成。
-如果RD是X0,则不对CSR执行读的操作。
CSRRD(automic read and set bits in csr)
-X6相当于起到了一个mask的作用。SCRRS先读出CSR中的值,将其按XLEN位的宽度进行“零扩展”后写入RD;然后逐个检查RS1中的值,如果某一位为1则对csr的对应位置1,否则保持不变。
-以上两步操作以“原子性”方式完成。
伪指令
UART(统一异步接收传输协议)
接收方通过检测起始位来确定数据的开始,并根据事先约定的帧格式和波特率,正确地识别出数据位和停止位,而不会将停止位误认为是数据。这样就保证了数据传输的准确性和完整性。
qemu 模拟了 ns16550a 芯片,通过内存映射将对应的基地址映射到了 0x1000_0000 处
platform.h编写
/* This machine puts UART register here in physical memory. */
#define UARTO 0x10000000
uart.c编写
#define UART_REG(reg) ((volatile uint8_t*)(UART0 + reg))
#define uart_read_reg(reg) (*(UART0 + reg))
#define uart_write_reg(reg, v) (*(UART0 + reg)) = (v)
NS16550a编程接口介绍
uart寄存器一个是8位。
对数据的TX/RX有两种处理方式
-轮询处理:不断地去询问发送数据的那个寄存器,如果为空就写入数据。
-中断处理:uart发送数据的寄存器为空闲的时候,通过串口去告诉主设。