SylixOS
文章平均质量分 82
checode
android,arm,linux,gpu
展开
-
st7789s显示芯片驱动代码
gpiofd_write(resetIO, 1); usleep(50000); gpiofd_write(resetIO, 0); usleep(100000); gpiofd_write(resetIO, 1); usleep(100000); st7789s芯片是分大小端的,当使用RGB16位方式发送数据时要注意发送数据的大小端问题send_ct...原创 2018-10-07 12:21:30 · 8619 阅读 · 0 评论 -
编译nanopi neo 或者M1 uboot 启动SylixOS系统
在全志网站查到2017年3月 uboot 加入了对nanopi 网络支持,所以要2017年3月后的uboot才能通过网络启动SylixOS系统。下载源码uboot git 仓库 :http://git.denx.de/sunix MainLine uboot :http://linux-sunxi.org/Mainline_U-Bootnanopi allwinner 提供相关链接...原创 2019-03-08 10:51:54 · 744 阅读 · 0 评论 -
SylixOS 内存管理源代码分析--pageLib.c
SylixOS 系统中内存相关的代码放在SylixOS/kernel/vmm文件夹中,pagelib.c 主要是实现了页面的分配和回收。页面分配是以页面控制块进行管理的,配合哈希表。以下先是对每个文件的源代码分析,然后最后分析调用关系。首先看下载SylixOS 内存管理常用的结构体pageLib.c 文件是管理页分配,相关的。LW_VMM_ZONE 是区域zone 的结构体...原创 2019-03-17 19:58:12 · 625 阅读 · 0 评论 -
SylixOS 内存管理源代码分析--pageTable.c
此文件内函数基本和映射相关。会调用mmu操作集函数,操作集函数参考https://blog.csdn.net/qq_28637193/article/details/88546354,因为不同体系结构mmu操作函数集不同,这里是以arm64为例__vmmLibVirtualToPhysical此函数来查找虚拟地址映射的物理地址。/***************************...原创 2019-03-17 21:48:58 · 450 阅读 · 0 评论 -
SylixOS 内存管理源代码分析--phyPage.c
phyPage.c是对物理页面管理相关的内容。在SylixOS中虚拟页面和物理页面都是使用相同的数据结构管理,下文使用vmpage代表这个结构体,如下图在物理页面中不管存在zone数组,还有一个内核内存信息的数组,用来保存代码段和数据段的大小。/**********************************************************************...原创 2019-03-18 01:11:06 · 422 阅读 · 0 评论 -
SylixOS 内存管理-通过地址反查页面控制块-vmmArea.c
在vmm文件夹中的vmmArea.c文件是实现页表控制块反查功能。通过给定的地址(虚拟或者物理)可以查找到对应页面控制块LW_VMM_PAGE。 系统是通过哈希红黑树来实现这个功能的。首先在zone包含了一个哈希表。通过哈希索引值找到对应的红黑树根。也zone页面管理类似,页面关系是通过哈希表插到对应的链表头。有几个比较重要的结构体。LW_VMM_AREA 是一个非常重要的结构,它包含了一个哈希表...原创 2019-03-18 14:55:03 · 296 阅读 · 0 评论 -
SylixOS 内存管理源代码分析--vmmMalloc.c
vmmMalloc.c文件内容是内核对外提供API函数,前面文章分析的各种函数都是最后汇集到这里,对外提供系统功能。API_VmmMallocAlign此函数是分配一个对齐的物理页面和虚拟页面并将其映射。/******************************************************************************************...原创 2019-03-18 20:16:37 · 580 阅读 · 0 评论 -
SylixOS armv8 原子操作
在SylixOS 中 armv8 原子操作分为32位和64位。首先介绍32位#define ATOMIC_OP_RETURN(op, c_op, asm_op) \static LW_INLINE INT archAtomic##op (INT i, atomic_t *v) \{...原创 2019-04-10 10:19:49 · 1040 阅读 · 0 评论 -
SylixOS 缺页异常
在arm64 中mmu访问错误会触发同步异常在同步异常向量表中填入同步异常处理函数,同步异常函数会调用系统的archSyncExcHandle函数,可以看到此函数的第一个参数x0 是当前当前任务的TCB。x1 是ESR_EL1 的值,根据armv8手册此寄存器包含了一些异常的信息。,特别是此寄存器中的EC 包含了同步错误的类型根据不同类型的错误,采取不同的处理措施。/...原创 2019-04-01 16:40:41 · 534 阅读 · 0 评论 -
SylixOS armv8 任务切换
SylixOS 在进入中断退出,进入内核退出时会进行任务切换。分为两种情况讨论:1.中断退出时任务切换在SylixOS 中无论是同步异常还是异步异常都会首先将系统寄存器保存到系统异常栈中,然后获取当前任务的tcb控制块,最后将保存到异常堆栈中的系统上下文寄存器保存到任务控制tcb中。在SylixOS 中EXC_SAVE_VOLATILE是定义成了一个宏,所以不会进入函数,LR被改变的问题(...原创 2019-04-11 10:22:12 · 508 阅读 · 0 评论 -
SylixOS arm64 自旋锁
SylixOS 下自旋锁结构体,使用union , SLD_uiLock 和 SLD_usSvcNow, SLDQ_usTicket共用空间SLD_uiLock 代表了 是否上锁, SLD_usTicket 是当前自己编号,每次加锁后这个值会加1.依次递增。 SLDQ_usSvcNow 代表了目前正在锁的编号。 加入此时有四个加锁 SCL_usTicket 每次加锁都会递增加1。SLD...原创 2019-04-02 14:55:23 · 465 阅读 · 0 评论 -
SylixOS 网络文件系统 nfs 的使用
SylixOS 支持网络文件系统 nfs,在开发阶段,当工程文件相当多并修改频繁时,使用 nfs 可以免去频繁下载这些工程文件的麻烦,从而提高开发效率,下面介绍 nfs 的使用方法。确保 SylixOS 编译了 nfs 组件默认情况 SylixOS 开启了 nfs 的支持,但 nfs 可以裁减,查看 sylixos-base/libsylixos/config/fs/fs_cfg.h 文件...转载 2019-04-08 15:04:47 · 572 阅读 · 1 评论 -
SylixOS arm64 异常向量表
在VBAR_ELx寄存器中存放着异常向量基地址;/*********************************************************************************************************; 关中断并设置异常向量表;**************************************************...原创 2019-03-12 01:04:35 · 440 阅读 · 0 评论 -
SylixOS 启动时mmu 初始化
armv8 mmu 操作函数集已经介绍了操作函数集。SylixOS在启动时会调用__vmmLibPrimaryInit函数进行页表的初始化。/*********************************************************************************************************** 函数名称: __vmmLibPri...原创 2019-03-15 12:53:27 · 517 阅读 · 0 评论 -
SylixOS 操作系统Makefile 简介
1.Makefile 流程图 在SylixOS中每个项目都包含一个Makefile文件,每次编译都是从Makefile文件开始。2.mk文件介绍 config.mk : 与配置相关,在新建base选择体系结构,cpu类型,fpu类型,release或者debug,base路径等信息会保存到此。 header.mk : 将mktemp模板库中的mk文件路径转换为宏定义,根...原创 2019-02-12 10:35:14 · 1062 阅读 · 0 评论 -
SylixOS pci 设备驱动开发
1.新建内核模块工程在 module_init函数中调用pci初始化函数。2.pci初始化函数lspci -xxx1.使用pcis命令查看当前设备的设备厂商,ID等信息,如下图:2. 使用 lspci -vvv 查看设备更多信息3.使用 lspci -xxx 可以查看pci配置寄存器值,如下图每个pci设备的配置寄存器值都会显示出来,具体寄存器对应...原创 2019-02-12 14:53:49 · 716 阅读 · 0 评论 -
allwinner h3 通用DMA 驱动(SylixOS 操作系统)
SylixOS 集成了DMA框架,在使用DMA时需要针对硬件封装对应的函数。1.注册DMA驱动全志 h3 共有12个通用驱动,注册12个DMA控制器驱动。 dmaGetFuncs函数实现对传输,状态监测,复位函数的封装。 首先配置时钟,根据手册中的DMA时钟写入对应的值,实现 Reset,Trans,Status三个函数2.功能函数实现由全志h3 数据手册可以看出存在...原创 2019-02-12 17:17:35 · 1598 阅读 · 5 评论 -
SylixOS Makefile 源代码解析
word版下载地址:https://download.csdn.net/download/qq_28637193/10871601原来是在word上写的,粘贴复制过来了,格式显示的不是很好。 SylixOS Makefile 源代码解析SylixOS 是由base,bsp,app三部分组成,一下将分别介绍着三部分中的Makefile以及他们之间Makefile相互联系。1....原创 2019-02-24 15:31:53 · 1020 阅读 · 1 评论 -
SylixOS PCI 驱动 分析--设备枚举
内容写在有道云笔记里了。链接如下http://note.youdao.com/noteshare?id=73df8a99ec344ac1b2ffbb66b52a895e原创 2019-02-21 10:30:05 · 250 阅读 · 0 评论 -
SylixOS IO层源代码解析
SylixOS IOopen 函数第313行是默认的权限,第318行的va_start() 是与va_arg (),va_end()配合一起使用的,是gcc提供函数,va_start()是初始化,va_arg()是取下一个参数,当标志位iFlag为创建时,通过va_arg()读取iFlag后面参数,赋值给权限位。然后调用_IoOpen()函数。第130行是获取当前的I...原创 2019-03-03 10:53:15 · 646 阅读 · 0 评论 -
SylixOS allwinner h6 链接脚本
/********************************************************************************************************* 包含配置文件*********************************************************************************...原创 2019-03-08 15:06:31 · 585 阅读 · 0 评论 -
SylixOS freescale powerpc p4080 pci msi 中断驱动
飞思卡尔 powerpc pci msi 中断实现和x86有点不相同,在SylixOS 实现msi 中断驱动参考了《PCI+EXPRESS体系结构导读》和一个 博客链接,不知道这个博主叫啥名字,但是多谢他指导我分开调试msi功能。不同体系结构在pci msi实现在会在msi 配置空间address 和data两个地方不同。x86的address是内容如下图:在...原创 2019-03-03 15:23:15 · 840 阅读 · 0 评论 -
TMS570LC43xx SylixOS can 驱动
1. SylixOS 系统 can驱动注册在SylixOS系统中在系统启动时首先会注册can驱动,调用API_CanDrvInstall函数此函数将can驱动注册为字符设备。但是_canOpen等函数并不是设备驱动需要实现的,而是在系统内部已经实现。__canOpen函数会判断当前字符设备是不是第一打开,如果是第一次打开会调用can设备的ioctl 定义的CAN_DEV...原创 2019-03-06 16:36:04 · 736 阅读 · 0 评论 -
allwinner h6 armv8 SylixOS 启动分析
在SylixOS为了让代码统一,针对不同的体系结构汇编文件差别,声明了统一的宏。如下是arm64 在内核的头文件中声明:#define EXPORT_LABEL(label) .global label#define IMPORT_LABEL(label) .extern label#define FUNC_LABEL(func) func:...原创 2019-03-10 21:44:38 · 1941 阅读 · 0 评论 -
SylixOS armv8 mmu
armv8 mmu 支持4K,16K,64K分页,在SylixOS目前实现了4K和6K分页。根据查看代码SylixOS目前使用的是Non-secure EL1、stage 1 translation、VA和PA的地址宽度都是48个bit。所以分析代码不包含arm提供的其他功能。代码位于SylixOS/arch/arm64/mm/mmu 文件夹。在SylixOS封装了mmu操作函数集,这...原创 2019-03-14 23:07:57 · 1250 阅读 · 0 评论 -
SylixOS 任务调度源代码分析
在SylixOS 中退出中断和内核都会系统调度任务,任务调度底层切换上下文,底层实现参考链接在SyliOS默认优先级是0-255,数值越小优先级越高。在SylixOS 任务就绪队列是通过位图的方式去查找,如果当前优先级有任务则对应的位图位就会变成1。在查找到最后优先级后,从对应链表中取出任务控制块tcb,对比是否比当前任务优先级高,决定是否切换任务。在arm中支持硬件实现前导零计数,所以能...原创 2019-04-18 22:31:43 · 905 阅读 · 0 评论