RTEMS
文章平均质量分 68
hahachenchen789
后台开发,专注容器、k8s、云原生。
展开
-
实现RTEMS Beaglebone Black I2C驱动
RTEMS的beaglebone black BSP并不包含I2C的驱动,而很多传感器模块的通信方式都只支持I2C,因此限制了RTEMS在IOT物联网方面的应用。本文对I2C驱动的实现思想进行详细描述。参考代码是RTEMS源码中ATSAM的i2C实现。首先要知道,RTEMS中I2C bus的代码已经存在,因此我们只关心具体实现代码即可,也就是BSP部分的i2C驱动部分/原创 2017-03-30 00:16:07 · 1055 阅读 · 0 评论 -
添加WEP 加密WiFi支持 for RTEMS-libbsd on BBB BSP
在实现USB WiFi 芯片 rtl8188eu驱动后,接下来开始实现加密WiFi: WEP,目前rtems的GitHub上的master 已经merge了本人贡献的WEP代码,可以自行前去下载。1.Add the WEP module suppport in nexus-devices.h我们需要加密算法模块的支持,因此在nexus-devices.h中添加wlan_we原创 2017-08-13 14:17:53 · 641 阅读 · 0 评论 -
RTEMS USB support for BBB 文档
本文档是本博主这段时间工作的一个小总结,主要针对RTEMS for BBB BSP 的USB支持。由于要和RTEMS公司进行交流,因此文档大部分使用英文进行撰写。转载请说明出处。1. 如何build RSB(RTEMS source builder)1. 新建文件夹sandbox="$PWD/sandbox"mkdir sandboxcd "$sandbox"原创 2017-08-13 12:11:03 · 782 阅读 · 0 评论 -
ubuntu16.04安装rtems4.11工具链
rtems是一个开源的实施操作系统,如果想要将其安装在嵌入式芯片上就必须要进行x86-arm交叉编译,而这个编译过程可以在主机上进行,windows和linux上都可以进行编译。网上的关于ubuntu的编译环境的构造文章中,大部分都是安装在低版本的ubuntu上比如12.04和10.04以及14.04上。本文描述了将toolchain安装在ubuntu16.04上的详细步骤。首先是新建安装原创 2016-09-19 14:50:03 · 2889 阅读 · 3 评论 -
RTEMS-libbsd实现FDT support for BBB
上篇博文描述了如何在RTEMS上实现FDT,这篇文章将展示如何在RTEMS-libbsd上实现FDT support。rtems-libbsd 管理总线的实现在nexus-devices.h文件中,也就是: rtemsbsd/include/bsp/nexus-devices.h/* * Copyright (c) 2013-2015 embedded brains GmbH.原创 2017-07-04 16:19:53 · 886 阅读 · 0 评论 -
RTEMS实现FDT support for Beaglebone
RTEMS目前多数采用nexus总线进行设备管理,但这是一种较老的方法,目前linux和FreeBSD都改为采用FDT(Flatten Device Tree)进行设备管理,无论是ARM还是PowerPC等。接下来讲讲如何在RTEMS上实现FDT,以BBB为例:FDT需要dtb文件支持,该文件是二进制文件,包含了设备树,Linux和FreeBSD都可以自动生成该文件,通过dts文件生成原创 2017-07-04 15:46:27 · 817 阅读 · 0 评论 -
RTEMS-libbsd 实现beaglebone black USB驱动
libbsd是移植Freebsd的代码库,因此包含了USB的协议栈部分,因此我们要做的就是移植USB底层驱动程序。Beaglebone black 的AM335x处理器采用的是musb otg的设备管理模式,因此需要musb的驱动程序。下图是Freebsd关于AM335x的驱动程序源文件:对于USB驱动有关的就是am335x_musb.c以及am335x_usbss.c文件原创 2017-06-21 16:36:45 · 1154 阅读 · 0 评论 -
RTEMS-libbsd 生成驱动设备firmware
最近在为rtems-libbsd添加无线网卡驱动,需要添加网卡的固件文件,本人所用的网卡芯片是rtl8188eu,接下来讲讲如何在rtems-libbsd中生成固件文件。首先固件文件生成是采用make-build system(吐槽一下,目前rtems-libbsd包含waf的python脚本编译和一部分的make脚本编译,实在不忍直视,不过rtems也说了会在将来全部采用waf作为唯原创 2017-06-20 20:08:22 · 1600 阅读 · 0 评论 -
RTEMS中断不可使用printf-printf()为什么有重入和性能上的问题?
这个概念在嵌入式操作系统中比较重要,由于存在任务的调度,它实时系统,可剥夺型内核中是危险的,如同一个安静的水雷。可能会被触发,也可能安然无恙。由于它运行结果的不可预期性,会使系统带来隐患。printf()经常有重入解释不可重入函数不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。因为中断可能在任何时候发生,例如在printf执行过转载 2017-05-15 15:44:27 · 533 阅读 · 0 评论 -
RTEMS 源文件coding conventions
RTEMS 源文件编写规则:1. 参考Doxygen 编写规则,这个比较复杂,会另写一篇博文进行解释。2. 开头每个文件的简要说明,然后是许可证,参考如下:/** * @file * * @ingroup TheGroupForThisFile * * @brief Short "Table of Contents" Description of File C原创 2017-05-14 23:18:27 · 343 阅读 · 0 评论 -
RTEMS创造并提交patch
前两篇博文大致介绍了向rtems提交patch的方法和途径,接下来详细介绍如何创造patch并通过git提交至rtems devel:在这里全部采用git进行diff比对和提交,不建议采用linux自带的diff命令,因为本人一开始采用linux的diff命令提交后,被rtems公司的大牛说了一通。。。。,因为linux自带的diff命令没有版本信息和作者信息,给管理带来很大不便,只适用于自身原创 2017-03-15 13:56:32 · 537 阅读 · 0 评论 -
Add Copy headers support for RTEMS-libbsd
在移植OpenSSL库的过程中,碰到了问题:当我从FreeBSD import 文件并port to RTEMS时,被include的头文件的文件路径和其实际的文件路径不同时,会造成编译错误,因为编译器waf找不到头文件。一个例子就是:the . The source for this file is in freebsd/crypto/openssl/crypto/opensslv.h.原创 2017-08-13 14:35:24 · 434 阅读 · 0 评论 -
添加OpenSSL库支持for WPA on RTEMS-libbsd
WPA加密WiFi需要OpenSSL库的支持,因此我们需要从FreeBSD中import该库。RTEMS git 的master branch已经merge该部分的本人贡献的代码。可前往自行下载。1. Add openssl lib files in libbsd.py+# /crypto/openssl +# +def crypto_openssl(mm): +原创 2017-08-13 14:55:55 · 539 阅读 · 0 评论 -
RTEMS-libbsd 解决无法使用中断问题
RTEMS-libbsd 是利用RTEMS内核,将freebsd作为一个库的系统。因此更加方便移植各种bsp支持,比如驱动等。但是在使用中断时,对于某些bsp,会出现中断无法使用的情况。比如本人在为beaglebone black移植USB驱动时,需要安装usb中断,但是程序运行至interrupt install 函数处会出现终止, 也就是_Terminate。通过gdb进行原创 2017-06-18 15:04:30 · 1252 阅读 · 0 评论 -
RTEMS中断调用和初始化
以beagle为例:在初始化阶段,boot_card函数中,会调用bsp_start():void boot_card( const char *cmdline){ rtems_interrupt_level bsp_isr_level; /* * Make sure interrupts are disabled. */ (void) bsp_i原创 2018-01-25 14:28:40 · 596 阅读 · 0 评论 -
RTEMS同步互斥与优先级处理算法
对于各个task线程之间需要同步互斥的情况,RTEMS提供信号量(semaphore)、自旋锁(SpinLock)、读写锁(RWLock)等互斥机制。信号量:RTEMS支持二值信号量和计数信号量。二值信号量只能取0和1两个值,当值为0时,表示信号量不可用,当值为1,表示可以使用。而计数信号量的取值可以是任何非负的整数,当值大于0时,表示信号量可以使用。二值信号量用于控制单个资源的互斥访问,原创 2018-01-24 22:32:32 · 779 阅读 · 0 评论 -
RTEMS初始化线程(task)运行
RTEMS是如何运行第一个任务的?又是怎么样新建任务并进行切换的?这要从RTEMS运行到boot_card开始说起,boot_card之前的初始化过程可参考之前的博文:http://blog.csdn.net/hahachenchen789/article/details/52929513boot_card函数位于c/src/lib/libbsp/shared/boot原创 2018-01-24 14:05:20 · 1044 阅读 · 0 评论 -
RTEMS线程调度算法(RMS)详解
RTEMS是以线程为基本调度单位的,调度算法基于优先级的抢占式线程调度,支持256个线程优先级。当然RTEMS值hi创建同等优先级线程,相同优先级的线程采用时间片轮转调度。调度器寻找下一个最高优先级就绪线程的时间是o(1),这是实时性得到保障的一个关键机制。为了增强对用户应用需求的可扩展性,rtems实现了基于线程的任务扩展机制,可在创建任务、上下文切换或者删除任务等系统事件发生时插入用户指定原创 2018-01-24 17:43:51 · 2486 阅读 · 0 评论 -
RTEMS与通用操作系统的不同点总结
RTEMS基于典型的实时操作系统涉及思路,与典型的通用操作系统(UNIX,windows)等差别很大。一、系统调用方面系统调用是应用程序访问操作系统的接口,通用操作系统中,操作系统与应用程序处于两个不同的CPU特权态,操作系统处于核心态,应用程序处于用户态,核心态可执行CPU特权指令,用户态不行。这保证了系统整体的安全。而RTEMS没有用户态和核心态,其内核与应用程序是简单的调用关系,且应原创 2018-01-24 11:17:12 · 1004 阅读 · 0 评论 -
ION-DTN在RTEMS上的移植
ION-DTN是DTN协议栈的具体实现,广泛应用在深空通信等恶劣环境下,RTEMS作为星载操作系统之一,若能在RTEMS上实现DTN协议栈,能够为RTEMS的提供更为广泛的应用。接下来详细描述如何将ION-DTN移植到RTEMS上。ION-DTN的3.5.0版本中有关于RTEMS移植的一个模板,而不知为何,在最新的3.6.0中却删除了该模板。因此选用3.5.0进行移植。ION源码中RT原创 2017-10-25 17:04:13 · 725 阅读 · 0 评论 -
Add wpa_supplicant_fork command on RTEMS-libbsd
在将wpa_supplicant移植到RTEMS上后,我们能在shell command中使用该命令,但是存在一个BUG,当我们通过命令wpa_supplciant配置WPA时,我们不嫩使用其他命令,或者其他thread。因此我们要创建一个新的thread让wpa_supplicant运行。本文是从本人的英文博客中翻译过来,因此大部分是英文。1. Add wpa_supplicant_原创 2017-08-13 16:05:22 · 452 阅读 · 0 评论 -
Port WPA supplicant to RTEMS-libbsd
上篇博文详细描述了import wpa_supplicant from FreeBSD。 这篇博客将描述如何将wpa supplicant 在RTEMS环境下编译。1.RTEMS doesn't support the PID and daemonize, so we need modify the os_unix.c.a). Add the unistd.h原创 2017-08-13 15:54:45 · 539 阅读 · 0 评论 -
Import WPA from FreeBSD
对于WPA 加密WiFi,我们需要的是wpa_supplicant 软件,该软件广泛应用于BSD, Linux, Windows等操作系统,主要功能是WiFi管理功能,多用于WPA/WPA2协议的加密WiFi。因此需要从FreeBSD中移植该软件到RTEMS上。注意:该文章是从我的英文博客中翻译过来,因此多数是英文。We can get the wpa source code from the原创 2017-08-13 15:06:15 · 377 阅读 · 0 评论 -
rtems源码贡献步骤
要想成为rtems的源码贡献者,需要以下几个步骤:1. 申请加入rtems的mail list:申请链接:https://lists.rtems.org/mailman/listinfo/devel申请界面如下图所示:按照网页上提示进行注册。2.制作patch,官网说明链接:https://devel.rtems.org/wiki/Developer/G原创 2017-03-13 23:18:39 · 1052 阅读 · 0 评论 -
rtems源码补丁贡献要求(官网解析)
首先rtems公司强烈鼓励开发者进行代码贡献,错误修复,优化,新功能,文档更新和任何其他有用的更改。所有的贡献都必须满足一些法律要求和编码公约。比如代码编写语言,编译器等。详见链接:https://devel.rtems.org/wiki/Developer/Coding/Conventions法律公约:在纯GPL下发布的代码与RTEMS许可证不兼容,因此不应被添加到RTE原创 2017-03-13 15:03:43 · 694 阅读 · 0 评论 -
RTEMS移植USB无线网卡的设想
上个阶段本人把有线网卡驱动成功移植到RTEMS上,接下来开始移植无线网卡。这部分工作难度相比有线网卡要更大,因为牵扯到USB的驱动以及无线网络协议栈,还有总线的各种兼容。而USB驱动也是包括协议等很多细节工作。一步一步慢慢来吧,相信通过移植无线网卡的工作,自己会受益匪浅。移植的主要参考是Freebsd的驱动,应该能够方便移植到rtems-libbsd上,基本的系统库都是一样的。包括原创 2017-02-21 20:24:25 · 821 阅读 · 1 评论 -
rtems开发注意事项
1.无内存保护:对于x86体系架构和其他cpu架构,rtems没有采用虚拟内存管理,也没用分段保护机制,所以rtems是没有提供内存保护机制,这样的好处在于实现简单,当然也存在很大的安全问题,应用程序中的一个错误内存操作都可能使得整个系统崩溃,但是考虑到嵌入式系统运行的程序相对确定,所以缺点还是没有那么致命。2.基于优先级的调度:rtems是一个完全基于优先级调度的实施操作系统,一共有原创 2016-09-27 13:03:42 · 2759 阅读 · 0 评论 -
rtems源码树结构
首先看看一级目录的大致内容:/aclocal:该目录存放了autoconf使用的M4宏,这些宏在定制rtems,为不同硬件体系产生不同目标文件过程中起着重要作用/c:文件正对不同的主板、cpu和芯片的代码,保证了可移植性/cpukit:是rtems的库文件,比如tcp/ip的协议栈libnetworking,以及与硬件无关的操作系统核心代码。/doc:存放各种文档/make:m原创 2016-09-27 11:20:21 · 1463 阅读 · 0 评论 -
bbb上rtems的tcp/ip协议移植的想法
rtems目前还没有将bbb板上的bsp中的网络部分加上。因此需要移植网络协议,在这里主要考虑两点。首先是底层驱动,最重要的也就是底层,因为上层的协议是比较好移植的,关键是接口层的driver,也就是要让AM335处理器和以太网芯片通信.bbb上的以太网芯片是SMSC LAN8710,要做的就是driver的撰写,并且和上层协议结合。虽然官方给出的rtems bsp上没有关于网卡的驱动原创 2016-09-25 22:12:45 · 1067 阅读 · 0 评论 -
基于beaglebone的rtems4.12源码编译生成image镜像并烧入sd卡
在上一篇博文中,讲述了如何通过编译好的toolchain编译rtems源码,接下来讲讲如何讲编译好的源码制作成image镜像文件,然后烧写到sd卡中。编译好的源码是放在/image文件夹下,制作image文件在这里用到的是之前git到的rtems源码中的脚本工具sdcard.sh。是国外某个大神的杰作,文件放在rtems-src/c/src/lib/libbsp/arm/beagle/si原创 2016-09-22 10:52:46 · 3266 阅读 · 0 评论 -
rtems bbb板uart驱动编写
进行串口驱动编写,主要参考源码中的console-config.c文件以下是代码:void beagle_console_init(void){if(init_needed){const uint32_t div = UART_CLOCK / 16 / CONSOLE_BAUD;CONSOLE_SYSC = 2;while ((CONSOLE_SYSS & 1) == 0);原创 2016-09-23 23:24:34 · 1109 阅读 · 0 评论 -
bbb板运行rtems-编写led底层驱动
在上盘博文中,成功将rtems移植到了bbb板上,在shell终端,输入hello,返回如下信息:表明命令运行成功接下来写一个bbb板上4个led的驱动程序,使得在shell下输入led命令,可以使得led 闪烁首先要知道寄存器的内存地址,在这里需要查询处理器的说明手册:AM335X Technical Reference Manual.pdf查到外设储存器映射原创 2016-09-23 15:03:56 · 1438 阅读 · 0 评论 -
对于beaglebone black板的BSP的rtems编译
在上篇文章中介绍了在ubuntu16.04上安装toolchain的方法,安装好后就要进行rtems源码的交叉编译,这一步非常重要,其成功与否关系到rtems能否正确移植到bbb板上。首先要设置环境变量:cd $HOME/development/rtemsexport PATH=$HOME/development/rtems/4.12/bin:$PATH接下来就是git到rte原创 2016-09-20 16:01:44 · 2246 阅读 · 0 评论 -
uubntu16.04安装rtems beaglebone toolchain工具链
基本方法和步骤和本人上一篇博文:安装rtems4.11 toolchain 类似有几个需要改动的地方:1.rtems的bsp源码包地址改为:https://github.com/bengras/rtems-source-builder.git也就是在git bsp源码时命令应改为:git clone -b beagle https://github.com/bengra原创 2016-09-20 16:01:29 · 1156 阅读 · 0 评论 -
RTEMS设计思想
RTEMS 实时操作系统按照功能组件来组织整个内核, 采用了面向构件和面向对象的设计思想。所谓面向对象,就是任务、消息队列、互斥量等都是以对象形式存在,提供统一接口函数表来动态的创建、删除、操作预定义的对象类型,屏蔽不同对象底层的细节差异。所谓面向构件,就是操作系统通常不直接访问组件的数据结构,而是利用一系列的接口来访问和修改相应组件的数据结构。 虽然RTEMS 采用面向对象和构件的设计思路原创 2016-09-13 22:29:13 · 765 阅读 · 0 评论 -
rtems总体设计思路
与典型的通用操作系统差别很大的是,rtems是基于扁平内存管理的层次型单体内核,应用程序与内核形成一个基于函数调用形式的整体功能单元,在一个地址空间下协同完成特定的功能,而对于普通的操作系统而言,应用程序和操作系统是处于不同的特权状态和地址空间。系统调用是应用程序访问操作系统的接口,在接口上,通用操作系统和应用程序是处于两个不同的cpu特权态,操作系统处于核心态,应用程序处于用户态,r原创 2016-09-27 18:31:06 · 2011 阅读 · 0 评论 -
rtems初始化过程分析
上电后一般执行引导加载程序,这个程序可以初始化硬件设备,建立吸引的内存空间映射图,对于PC386体系,就是BIOS,嵌入式一般没有这个固化软件,直接由boot loader完成,bios进行完自检后,选择一个启动设备(软盘、硬盘、cd等),取得该设备的第一扇区(启动扇区)到内存的一个特定地址,至此BIOS完成,然后进行boot loader,嵌入式一般是grub。以hello world rt原创 2016-09-27 20:39:39 · 1830 阅读 · 0 评论 -
DTN-ION协议栈结构介绍
ION(Interplanetary Overlay Network)是DTN(Delay-Tolerant Networking)网络协议栈的一种实现应用。DTN模仿因特网的IP层为BP层,用来覆盖internet协议。DTN协议栈如下图所示:BP层就类似于IP层,包含了数据流动。多个BP endpoint可以驻留在一个计算机上,称为结点,就像多个套接字可以驻留在因特网中的同原创 2016-12-30 23:55:08 · 3444 阅读 · 1 评论 -
rtems实时性的实现思想
总体设计思路:rtems是一种基于扁平化内存管理的层次型单体内核,应用程序和rtems内核形成基于函数调用形式的整体功能单元,在一个地址空间下协同完成功能。而在通用的分时操作系统,应用程序和操作系统处于不同的地址空间,应用程序无直接访问系统硬件和操作系统中的系统数据。系统调用是应用程序访问系统的接口,在系统调用接口上,通用操作系统和应用程序处于两个不同的cpu特权态,操作系统处于和心态,应原创 2016-12-21 22:55:59 · 1228 阅读 · 0 评论 -
rtems网络移植-实现网卡驱动
经过两周的调试,终于初步实现网卡的发送功能。在这里参考了uboot的beaglebone网卡驱动和《tcp/ip详解卷二》1、在前几篇博文中,讲解了网卡的mdio初始化过程,那么网卡lan8710a是如何与am335x处理器通信的呢?首先看一张连接图:我们都知道osi七层协议,最底下的是物理层和数据链路层,也就是mac和phy。有一部分处理器是自带mac层,也就是只原创 2016-11-26 00:21:41 · 4932 阅读 · 2 评论