SylixOS

基于SylixOS 对 Goahead 进行配置使用 OpenSSL

落爺英雄遲暮 提交于 2020-03-02 18:37:39
1. 编译并部署OpenSSL SylixOS支持OpenSSL,git地址为:http://git.sylixos.com/repo/openssl.git 获取OpenSSL工程源码后,导入RealEvo-IDE中编译,编译完成后生成动态库文件和openssl可执行文件,如下图所示。 配置设备IP地址并部署openssl和动态库到设备端。终端命令行输入openssl version可查看openssl版本号,如下图所示。 2. 配置GoAhead-WebServer GoAhead-WebServer默认不开启SSL,可通过修改相关文件启用SSL。 2.1 启动SSL相关宏定义 SSL相关宏定义位于bit.h头文件中,bit.h的路径如下图所示。 打开bit.h文件,默认情况下,SSL相关宏定义如下图所示。 可以看到,GoAhead-WebServer支持EST、MATRIXSSL、NANOSSL及OPENSSL四种SSL,由于SylixOS支持OpenSSL,因此这里需要设置使能OpenSSL,并禁用其他三种SSL。 BIT_PACK_SSL宏是控制GoAhead-WebServer是否使用SSL的,因此这里需要设置BIT_PACK_SSL为1。修改后的bit.h文件内容如下图所示。 2.2 配置libgoahead.mk 在启用OpenSSL后

SylixOS任务调度分析

瘦欲@ 提交于 2020-01-02 19:10:12
1. 任务调度相关链表 SylixOS将任务控制块加入到不同的任务调度链表进行管理,创建一个任务就会把新创建的任务加入到优先级就绪表,等待被调度执行。根据不同的任务阻塞原因会被加入到不同的阻塞表中。 1.1 优先级就绪表 图 1.1 任务优先级就绪表 SylixOS系统启动的过程会初始化一个任务优先级就绪表,当创建新任务时,根据任务的优先级加入到对应的优先级就绪表中,如图 1.1所示。系统启动过程创建一个优先级最低的IDLE任务。 1.2 任务控制块地址表 图 1.2 任务TCB地址表 创建新任务添加到就绪表的同时加入到任务控制块地址表。当调用任务挂起函数API_ThreadSuspend时,把任务控制块从优先级队列中取出,更新TCB地址表中的任务状态。当调用任务恢复函数API_ThreadResume时,从TCB地址表中获取到任务控制块更新到优先级就绪表,等待执行。 1.3 延时阻塞表 图 1.3 任务延时阻塞表 调用任务休眠函数API_TimeSleep时,任务被加入到延时阻塞表,等待任务延时时间到,从延时阻塞表中取出加入到就绪表中。 1.4 事件阻塞表 图 1.4 事件阻塞表 如图 1.4所示,以信号量阻塞为例,创建信号量时获取一个事件控制块,当获取信号量被阻塞就被加入到事件控制块的阻塞表中,如果设置了等待时间同时会被加入到延时阻塞表。当获取到信号量或是等待超时

SylixOS 启动浅析

耗尽温柔 提交于 2019-12-15 05:14:43
1、SylixOS启动概述 每个操作系统的启动都是多种多样,各有不同,SylixOS亦是如此,本文将浅析SylixOS启动层次和启动步骤两大方面。 2、SylixOS启动层次 在专用的嵌入式开发板上运行嵌入式操作系统(如SylixOS、Linux等)已经变得越来越流行,通常从一个嵌入式操作系统的软件角度来看,引导加载程序和操作系统内核便是两个重要的层次,下面就简单介绍关于SylixOS这两大层次的关键点。 2.1 层次一:Boot过程 一个裸机可执行程序的运行方法有两种: 1、 将程序代码入口放在处理器复位向量地址处,处理器上电可直接运行; 2、 使用bootloader将程序装载到指定的运行地址,再将cpu控制权交给需要运行的程序。 SylixOS支持以上任意一种的启动方法,两种方法区别如表 21所示。 表 21 启动方法 方法 第一种 第二种 优点 启动速度快(系统上电后,操作系统立即就开始初始化并运行); 灵活性强(bootloader可初始化基础性部件,根据配置以不同顺序启动系统); 缺点 灵活性不够(系统稍有动,就需要重新固化代码); 代码执行速度慢; 启动速度稍慢; SylixOS推荐使用第二种方法启动系统,虽然SylixOS经过裁剪后也可以作为bootloader,但是为了移植的通用性和兼容性,故推荐使用u-boot这一类标准的bootloader。

setjmp和longjmp简介

寵の児 提交于 2019-12-05 18:59:36
setjmp和longjmp简介 1 setjmp和longjmp简介   与刺激的abort函数和exit函数相比,goto语句看起来是处理异常的更可行方案。但是goto是本地的,它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。 为了解决这个限制,C函数库提供了setjmp函数和longjmp函数,它们分别承担非局部标号和goto作用。头文件申明了这些函数及同时所需的jmp buf数据类型。   原理非常简单:   1. setjmp(j)设置“jump”点,用正确的程序上下文填充jmp buf对象j。这个上下文包括程序存放位置、栈和框架指针,其它重要的寄存器和内存数据。当初始化完jump的上下文,setjmp函数返回0值。      2.以后调用longjmp(j,r)的效果就是一个非局部的goto或“长跳转”到由j描述的上下文处(也就是到那原来设置j的setjmp函数处)。当作为长跳转的目标而被调用时,setjmp()返回r或1(如果r设为0的话)。(记住,setjmp函数不能在这种情况时返回0。)   通过有两类返回值,setjmp函数让你知道它正在被怎么使用。当设置j时,setjmp函数如你期望地执行;但当作为长跳转的目标时,setjmp函数就从外面“唤醒”它的上下文。你可以用longjmp函数来终止异常

SylixOS中AARCH64跳转表实现原理

你。 提交于 2019-12-04 21:20:11
1. 跳转表存在的意义 1.1 内核模块反汇编 如下的程序清单,为一个内核模块的源码。 #define __SYLIXOS_KERNEL #include <SylixOS.h> #include <module.h> /* * SylixOS call module_init() and module_exit() automatically. */ int module_init (void) { printk("hello_module init!\n"); return 0; } void module_exit (void) { } 反汇编之后的内容如下所示。 kmTest.ko: file format elf64-littleaarch64 Disassembly of section .text: 0000000000000000 <module_init>: /* * SylixOS call module_init() and module_exit() automatically. */ int module_init (void) { 0: a9bf7bfd stp x29, x30, [sp, #-16]! 4: 910003fd mov x29, sp printk("hello_module init!\n"); 8: 90000000 adrp x0

SylixOS free命令实现过程

∥☆過路亽.° 提交于 2019-12-03 20:32:33
SylixOS free 命令 在 SylixOS 系统下敲下 free 命令,会出现如下如图 1.1 所示: 图 1.1 启核操作大致流程 kersys :显示的是内核堆信息 vmm physical zone show :zone 1和zone 2 映射信息,分别显示映射的起始地址、所占内存大小、虚拟页大小、PGD表项入口、空闲页面个数、页面属性; ALL-Physical memory size :整个系统可用的实际物理内存上的大小。 VMM-Physical memory size:所有zone映射的物理内存大小即为上述(VMM size 之和) 十六进制(8000000+30100000); VMM-Physical memory free:空闲页面大小((30796+196864)<< 12)/(1024*1024); free 命令实现 free 命令是SylixOS系统下的一条shell 命令,在SylixOS下它的实现遵循SylixOS shell实现规则,具体实现如下: 使用API_TShellKeywordAdd("free", __tshellSysCmdFree) 增加系统下free 命令,当敲入 free 时,调用 tshellSysCmdFree 函数。 在 tshellSysCmdFree 函数中分别调用 API_RegionShow(0)、 API

SylixOS在ZYNQ7000上划分CACHE

匿名 (未验证) 提交于 2019-12-03 00:21:02
原文: http://blog.51cto.com/12558129/2045531 范围 本文档介绍了SylixOS在Xilinx Zynq-7000开发板上如何进行L2 Cache划分。 在AMP模式中,core 0与core 1共用512K L2 Cache,这势必会引起两个核的Cache竞争问题。 用处 core 0的内存访问操作可能会清除core 1所使用的L2缓存内容,从而使core 1的软件性能有不确定性。 尤其是架构为AMP时。 如图 2.1、图 2.2为SMP与AMP架构图。 图 2.1 SMP架构图 图 2.2 AMP架构图 原理 这让用户可以将L2 Cache的功能保留在特定的core上。 Cache way是分区的宽度,Zynq的L2 Cache有8 Cache ways。 如图 3.1所示,在Zynq 7000中,Cortex-A9 MP核的64个AXI被分为8个可以锁定的组。 图 3.1分组 配置 具体寄存器说明参照Xilinx 官方数据手册UG585。 配置1:通常情况(L2 Cache 被core 0和core 1共享)。 Reg9_d_lockdown0 = 0x0; Reg9_1_lockdown0 = 0x0; Reg9_d_lockdown1 = 0x0; Reg9_1_lockdown1 = 0x0; reg9_d_lockdown0 =

SylixOS I/Oϵͳ

匿名 (未验证) 提交于 2019-12-02 22:56:40
概述 I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。 SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件记录锁等功能。图1.1为两种驱动结构的对比图。 图1.1 ORIG驱动结构和NEW_1驱动结构对比图 关键结构体 程序清单2.1 文件节点 typedef struct { LW_LIST_LINE FDNODE_lineManage; / 同一设备 fd_node 链表 / LW_OBJECT_HANDLE FDNODE_ulSem; / 内部操作锁 / dev_t FDNODE_dev; / 设备 / ino64_t FDNODE_inode64; / inode (64bit 为了兼容性) / mode_t FDNODE_mode; / 文件 mode / uid_t FDNODE_uid; / 文件所属用户信息 / gid_t FDNODE_gid; off_t FDNODE_oftSize; / 当前文件大小 / struct __fd_lockf FDNODE

SylixOS线程创建的流程分析

倖福魔咒の 提交于 2019-12-02 16:44:30
概述 本文档的主要内容是分析SylixOS线程创建的流程,详细介绍了SylixOS的线程创建函数API_ThreadCreate。 环境和参数检查 在SylixOS中,线程的创建函数不能在中断中调用。且在线程的创建时,系统会对线程的堆栈大小、优先级和名字等参数做有效性检查,一旦参数出错,则线程创建失败。当参数有效性检查完毕后,系统调用_Allocate_Tcb_Object函数,从空闲TCB控件池中取出一个空闲的TCB资源(TCB是线程控制块)。具体的代码实现如程序清单 2-1所示。 程序清单 2-1线程创建的环境和参数检查 /********************************************************************************************************* ** 函数名称: API_ThreadCreate ** 功能描述: 建立一个线程 ** 输 入 : pcName 线程名 ** pfuncThread 指线程代码段起始地址 ** pthreadattr 线程属性集合指针 ** pulId 线程生成的ID指针 可以为 NULL ** 输 出 : pulId 线程句柄 同 ID 一个概念 *********************************************************

VxWorks驱动移植至SylixOS总结

霸气de小男生 提交于 2019-12-02 16:43:58
本文档描述了将VxWorks中的驱动源码快速移植至SylixOS中的方法,使用时需要结合SylixOS中的VxWorks兼容层实现。 1. 驱动注册与初始化 1.1 VxWorks中驱动注册与初始化 1.1.1 初始化函数 VxWorks中大部分函数使用了VxWorks的VxBus结构,对于基于VxBus的驱动结构,通常都定义了如下所示的结构体。 LOCAL struct drvBusFuncs xxxDrvFuncs = { xxxInstInit, /* devInstanceInit */ xxxInstInit2, /* devInstanceInit2 */ xxxInstConnect /* devConnect */ }; devInstanceInit在Kernel初始化前被调用,若设备或其一部分被Kernel使用,则相关的初始化实现在该函数中完成。 devInstanceInit2在Kernel初始化后被调用,若无特别要求,初始化都应在此函数中实现。 devInstanceConnect用于设备的连接,通常可以不使用,但如果它依赖于其他设备,则启动代码在其中实现。 1.1.2 中断连接 VxWorks的中断连接在系统配置相关c文件中统一实现。 1.2 SylixOS中驱动注册与初始化 1.2.1 初始化函数 SylixOS中驱动的初始化入口在bspInit