认识块设备 1. 存储设备 在嵌入式中,常见的存储设备有SD卡、eMMC、sata硬盘、U盘、NVMe盘等。其中SD卡和eMMC使用的是SD协议,sata盘使用的是sata协议(包括机械硬盘和固态硬盘...
SylixOS BSP开发(十二)
SylixOS内核启动过程简单分析 通过前面的学习我们已经掌握了SylixOS BSP开发的最基础的内容,现在大家至少能快速地在一块开发板上移植SylixOS并且能启动到显示Logo阶段了。现在我们暂...
RISCV基础开发(三)
中断和异常处理 在RISCV架构设计中,有一系列的控制和状态寄存器( Control and Status Registers)简称CSR,在三种特权级别下都有其对应的CSR,比如m模式下的命名都为m...
全志D1开发(十五)网络驱动之网络测试
1. 完善BSP设置 1.1 网卡驱动完善 将上一章节封装出来的三个接口分别填入网络驱动操作集函数中调用: static int netifInit(struct netdev *pnetdev) {...
Xv6内核分析(三.10)
main函数之tvinit 1. 中断描述符 中断描述符表idt共有256个项目,每个条目8字节,根据每个条目的类型不同,共有3种不同的门描述符如下: 在xv6中的设置idt代码如下: 注意,这个id...
SylixOS之BSD红黑树
1. 设计数据结构 使用红黑树的主要目的是为了加速查找数据,我们先来看一看使用链表而不是红黑树方式组织数据时该如何设计数据结构。 1.1 平常的链表方式 我们能想到一种很简单的数据结构: struct...
SylixOS 多核SMP BSP开发(二十三)
在bspInit.c中添加多核启动功能 在本章节中,我们将添加从核启动需要的初始化代码,同样的在主核的处理过程中也需要添加代码来配合多核功能。 1. halModeInit 这个接口是主核和从核进入C...
RISCV基础开发(十四)
QEMU裸机开发之S模式软中断 S模式下的软中断我们借助m模式下的定时器中断进行触发,在m模式下设置sip中的soft位域就可以触发S模式下的软中断,如下所示。 void machine_trap(v...
Xv6内核分析(十三)
buffer cache分析 1. buffer cache概述 Buffer cache是一个双向循环链表,用于缓存磁盘上的数据以提高性能。使用bread从磁盘上读取数据,使用bwrite将修改的数...
SylixOS网络开发(三)
1. 概述 本篇章节介绍SylixOS网络驱动不使用零拷贝时的数据是如何传递的。在阅读本篇文章的时候,大家脑海里一定要记住以下这张图: 这张图只是对上一章节中的网络数据流图做了一点小修改。 2. 发送...
(四)SylixOS同步互斥之互斥锁
从本篇开始往后的文章主要介绍下SylixOS常用的编程接口,比如同步互斥接口、动态内存相关类接口、Cache操作接口等等,主要聚焦于驱动开发中经常使用到的内核接口。 1. 基本作用 互斥锁在Sylix...
全志D1开发(五)SD驱动之SD协议简介
1. 总线拓扑 SD卡定义了两种总线来进行通信,SD总线和SPI总线,一般SD总线用的较多,本次我们以SD总线为例进行讲解驱动的编写,SD在设计上可以挂接多个SD设备,如下所示。 虽然设计上同一条SD...