QEMU裸机开发之格式化打印 在前面的程序中我们实现了简单的字符串输出函数,在实际使用时,我们还需要进行格式化打印,比如打印某个变量的值,按十进制或者十六进制打印等等,本章节我们在“uart.c”中实...
Xv6内核分析(三.10)
main函数之tvinit 1. 中断描述符 中断描述符表idt共有256个项目,每个条目8字节,根据每个条目的类型不同,共有3种不同的门描述符如下: 在xv6中的设置idt代码如下: 注意,这个id...
SylixOS BSP开发(八)
初始化FPU、MMU和Cache组件 本来想在不初始化这些部件的情况下把SylixOS先启动起来感受下,结果测试发现如果MMU不使能的话,系统启动过程中线程无法进行调度emm。。。所以只好把这一章节提...
Xv6内核分析(十八)
目录实现分析 1. Xv6目录简介 在xv6中目录的也是用inode来表示的,只是inode中的type字段为T_DIR。普通文件的数据块中保存的是文件的内容,但是目录inode的数据块中保存的是一系...
Liteos-a内核分析(三)
系统内存管理 本篇文章主要分析OsSysMemInit这个函数,主要初始化了内核虚拟空间、vmalloc虚拟空间、还有内核堆和系统物理页初始化等等。 1. TCB内存申请 在调用OsSysMemIni...
SylixOS PCIe控制器驱动开发(九)
SylixOS PCIe控制器驱动使用自动配置功能 1. 地址空间简单回顾 自动配置主要就是配置各个设备BAR空间的PCIe地址,所以我们简单回顾下PCIe地址和CPU物理地址的概念。 PCIe控制器...
RISCV基础开发(十四)
QEMU裸机开发之S模式软中断 S模式下的软中断我们借助m模式下的定时器中断进行触发,在m模式下设置sip中的soft位域就可以触发S模式下的软中断,如下所示。 void machine_trap(v...
SimpleOS开发(4)切换到S模式
1. 设置trap入口 1.1 设置M模式trap入口 RISCV架构发生中断和异常时不会像arm那样自动切换栈指针,所以在trap入口需要先设置好栈地址,我们将__stack_start加上第九个页...
全志D1开发(二)添加串口驱动
1. 基础功能修改 1.1 创建base,导入BSP工程 根据全志D1的架构说明,创建base时选择如下: 创建完成后base中的libsylixos版本比较低,内核中的riscv架构是不支持全志D1...
浅谈编译(二)
OpenGL 1. OpenGL渲染管线 管线的英文名叫pipeline,其实翻译成流水线更贴切形象一点,渲染管线就是图形图像从数据一步一步形成最终输出的画面所要经历的各种操作过程。数据经过一个操作后...
SimpleOS开发(7)添加进程支持
1. 进程相关数据结构定义 首先定义进程的状态,这里参考xv6将进程定义为6个状态: PROC_UNUSED:进程控制块未使用处于空闲状态。 PROC_USED:进程控制块已经被使用状态。 PROC_...
SylixOS块设备驱动开发(一)
认识块设备 1. 存储设备 在嵌入式中,常见的存储设备有SD卡、eMMC、sata硬盘、U盘、NVMe盘等。其中SD卡和eMMC使用的是SD协议,sata盘使用的是sata协议(包括机械硬盘和固态硬盘...