BSP 与 OS 内核
SylixOS 如何进行网络裁剪
Q: 项目不需要使用 SylixOS 自带的 lwip 协议栈, 但是又没有找到相关的裁剪宏, 该怎么解决? SylixOS 内部使用了很多开源的中间库(操作系统与相关库接口部分), 绝大多数库中都加入了配置宏 如: FAT, YAFFS 等, 但由于 lwip 文件过多, 这里没有使用配置宏进行裁剪. 推荐使用两种方法进行裁剪: 1、如果使用 IDE 环境, 直接将 lwip 协议栈(/net/lwip/src) 目录从工程中移除, 同时将LW_CFG_NET_EN宏 (net_cfg.h) ...
处理器包含多级中断系统,BSP部分该如何设计?
Q:处理器包含多级中断系统 (例如: 级联 8259),而 SylixOS 的中断向量仅为单级,BSP 部分该怎么设计? SylixOS 使用单级中断系统,可以通过编译配置来设置操作系统向量表的条目数(内核并不限制中断向量的个数), BSP 需要将硬件多级中断机制抽象为 SylixOS 系统的单级中断机制,从而使设备驱动程序编写变得更加容易可靠,平台无关性好. 更多扩展知识见: 参考文章:缺页中断后,系统被重启(任务被kill) 参考文章:系统遇到哪些异常时,会导致系统重启
龙芯 2K 与 3A 系列部分中断操作支持情况
Q:龙芯 2K 与 3A 系列部分中断操作支持情况是怎样的 1. Loonson2K 设置指定中断向量的优先级: 不支持(硬件不支持) 获取指定的中断向量的优先级 :不支持(硬件不支持) 中断绑核:支持 2. Loonson3A 设置指定中断向量的优先级:支持 32-64 获取指定的中断向量的优先级:支持 32-64 中断绑核:支持32-64
SylixOS 信号发送、接收机制
Q:SylixOS 信号发送、接收机制过程 SylixOS 可以通过 kill() 或 sigqueue() 向线程发送信号(向进程发送信号相当于发送给进程的主线程)。kill() 与 sigqueue() 的区别主要在发送信号的类型不一样,kill() 发送非排队信号,sigqueue() 发送排队信号。 kill() 中首先会调用 _doKill() 接口,在 _doKill() 中构建信号信息结构 struct siginfo 和 LW_CLASS_SIGPEND ...
在应用程序中注册 shell 命令执行会产生的后果
问:如果在应用程序中注册了shell命令,在shell中执行会产生什么后果? 在 SylixOS 中,shell命令逻辑上属于内核功能的扩展,APP 由于存在可能退出的问题,导致 shell 命令失效,影响内核安全性。 因此 APP 不建议添加。标准的做法是将相关的 shell 功能放到一个内核模块实现,在内核模块里面添加是可以的;另外,如果在 APP 应用层 A 里面实现的功能,导出到内核,提供给其他 APP 使用,也会存在诸多未知的潜在风险。 更多扩展知识见: 详见《SylixOS ...
SylixOS CPU 利用率统计机制
SylixOS CPU 利用率统计基于 TCB 中的两个变量,TCB_ulCPUUsageTicks 和 TCB_ulCPUUsageKernelTicks。用于记录规定时间内的 CPU 使用 TICK 计数与 Kernel 使用计数。 top 命令首先清空所有的 TCB 的计数统计,然后开启统计数据更新,等待规定时间后(默认 1s)关闭统计数据更新。此时 TCB_ulCPUUsageTicks 与 TCB_ulCPUUsageKernelTicks 变量中就存放了这段时间内的所有线程的执行 ...
sem_timedwait 等函数延时等待时间问题(内部)。
1问题描述: 我们在使用 sem_timedwait 等函数时会设置延时等待时间,例如设置为 30,即等待 30ms。 2. 测试结果: 而通过时间函数测量,具体的延时等待时间大概在 30.6~30.9ms 不等,以下为龙芯 2K1000,1000Hz、 Zynq7000,100Hz板卡上的测试结果: 下图为龙芯 2K 上测试结果: 以下为 Zynq7000 上测试结果: 3. 具体原因: 问题定位在系统默认使用的时间转换函数 __timespecTimeoutTick 会额外补偿 1 个 ...
设备树初识
一 设备树定义 设备树是一种描述硬件信息的数据结构,用于实现驱动代码与设备信息相分离(简单理解就是硬件配置信息文件)。 设备树是一种描述硬件的数据结构,它起源于 OpenFirmware。 Linux 内核从3.x 开始引入设备树的概念 二 设备树获取 设备树的获取途径如下: 根据 linux 源码中对设备树支持的情况,对平台设备树进行获取;(linux 源码) 设备提供的源码获取设备树; 自己写设备树文件(比较麻烦,需要一系列的定义标准和使用标准)。 三 设备树描述信息 ...
SylixOS下的GIC中断实现(基于T3)
GIC常用寄存器介绍 GICD_CTLR GICv2控制器将中断分为两组。配置对应寄存器可以控制这两组中断的使能与禁能。 GICD_ISENABLERn 中断向量使能寄存器,写入1使能对应的中断向量号,写0没有影响。读取数据表示对应中断向量号的使能状态。每32个中断向量使用一个寄存器位,后续中断向量放在接下来的寄存器地址上。 GICD_ICENABLERn ...
SylixOS 中是否支持中断底半部,如何使用?
1. 适用范围 本文档适用于对中断底半部有了解需求的开发人员。 2. 原理概述 在发生中断时,内核会记录哪个中断产生并把中断相应的处理函数加入一个处理队列里, 直到把所有同一时间发生的中断全部记录好后, 处理队列里的函数才会逐一得到调用。所以当一个中断处理函数处理过久时,就有可能影响它后面的中断处函数的执行时机。我们用的中断处 理函数是可以被中断信号打断的。 ...
BSP 初始化时,地址重定位 data 段被改写而导致的系统异常
问:BSP 初始化时,地址重定位 data 段被改写而导致的系统异常 1、 问题现象 SylixOS 系统启动进入了初始化阶段不应该走入的流程,对判断条件在bsp入口处打印,地址已被改写,因此推测data 段被踩。 2、问题原因 查询ld链接和.S启动脚本,分析可知TEXT和DATA段的对应关系如下: ...
SylixOS 下 DMA 操作带 Cache 地址时应如何保持数据一致性
DMA只操作物理内存,不会操作Cache,但CPU却先操作Cache,这样就会造成数据不一致的问题。因此,对于一块带Cache缓冲的地址要用DMA传输的话,需要经过特殊的处理。 Linux下可以通过dma_map_single、dma_unmap_single函数来得到对应的物理地址,并根据数据的方向判断是该回写Cache还是无效Cache。 ...