赞
踩
原文链接:https://www.zhihu.com/question/464205608/answer/3358027187
嵌入式操作系统的一个重要特性是实时性。所谓实时性,就是在确定的时间范围内响应某个事件的特性。
著名的嵌入式操作系统有:VxWorks、Linux和Windows CE等。
1、Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。
2、强大的网络支持功能。Linux诞生于因特网时代并具有Unix的特性,保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。
3、Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。Linux也符合IEEE POSIX1标准,使应用程序具有较好的可移植性。
传统的嵌入式开发的程序调试和调试工具是用在线仿真器(ICE)实现的。它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试。
4、Linux具有广泛的硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器Linux都能运行。这意味着嵌入式Linux将具有更广泛的应用前景。
①硬件:嵌入式处理器、存储系统、(由IO连接)外设、时钟、复位、电源。
三大件全部集成:嵌入式微控制器(单片机);
三大件部分集成:嵌入式微处理器、IO集成在一个芯片内部,存储外置
②软件:嵌入式操作系统(可裁剪移植的、定制开发)、应用软件(专用性、固化)
嵌入式系统通常由嵌入式处理器、外围设备、嵌入式操作系统和应用软件等几大部分组成。
硬件层由嵌入式处理器、存储器系统、通用设备接口和I/O接口(如A/D、D/A、I/O等)组成。在一片嵌入式微处理器基础上增加电源电路、时钟电路和存储器电路(ROM和SDRAM等),就构成了七个嵌入式核心控制模块。其中,操作系统和应用程序都可以固化在ROM中。
中间层也称为硬件抽象层或板极支持包,它把系统软件与底层硬件部分隔离。板极支持包对上具有操作系统相关性,对下具有硬件相关性。设计一个完整的中间层需要完成两部分工作:
① 嵌入式系统的初始化,它包括片级初始化、板级初始化和系统级初始化。
② 设计硬件相关的设备驱动
软件层由多任务操作系统(OS)、文件系统、图形用户接口(GUI)、网络系统及通用组件模块组成。OS是嵌入式应用软件的基础和开发平台;是一段嵌入式目标代码中的程序,系统复位后首先执行,相当于用户的主程序,用户的其他应用程序都建立在OS之上;是一个标准的内核,它将CPU时钟、中断、I/O、定时器等资源都封装起来,留给用户的是一个标准的API函数接口。
功能层由基于OS开发的应用程序组成,用来完成对被控对象的控制功能。功能层是面向被控制对象和用户的,为方便用户操作,往往需要提供一个友好的人机界面。执行装置是指那些可以接受嵌入式计算机系统发出控制命令,执行所规定的操作或任务的设备和装置。在不同应用领域中,嵌入式系统的执行装置一般是不同的,应该根据具体的应用场合和系统所要求实现的功能选择不同的设备和执行装置。
原文链接:https://www.zhihu.com/question/464205608/answer/2336725208
linux开发一般是3个部分,最底层的是PCB绘制,也就是纯硬件,往上一点是驱动开发,最上层是应用开发。
首先你需要明白,“我只能做嵌入式Linux应用开发”本身就是错误的,你可以有很多的选择,因为嵌入式涉及的面积很广阔,你没办法只了解其中一部分,正如我上面所说一样,至少这3部分你都需要明白,然后去专精某一部分。
嵌入式应用开发,应当包含两部分,底层一点是linux驱动开发,比如公司有一块板子,设计成一半ARM,一半FPGA,那么你负责ARM这一块的开发的时候大多是底层性质的,你需要根据硬件来设计相应的驱动程序。驱动开发不仅仅需要C/C++的功底(尤其是C,还要一点汇编),还要学习linux内核的知识,以及uboot等等(所以计算机原理和操作系统这两门课很重要),你需要从一块没有任何东西的开发版中引导Linux,然后把自己写好的驱动程序加载进内核,保证整个系统的稳定运行。你写的东西最终会被上层的其他开发者调用,比如公司有一块CAN通信的板子,那么你就需要根据需求让linux识别这块板子,并且按照想要的功能留出API,以供上层调用。
另一部分就是应用层开发,应用层开发大多是C++。你需要调用驱动程序开放的接口来实现整个项目的功能,比如上面的CAN驱动已经有人写好了(大多是情况下是你写的,没错,只有公司很大或者项目很大的时候这二者是分开的,大部分都是你自己来写),需要没过10s发送一次数据,那么你就需要写一个定时器,让他10s调用一次CAN发送的接口,然后把数据发送出去,更甚至基本都是UI开发,用QT写一个上位机,然后调用接口。
最后,给你举个例子,我们做过一个温度测量的系统,需要嵌入在一个控制室里边,难度不是很大,首先需要一个ARM的芯片,身为驱动开发工程师,你需要在这块芯片上装一个linux,然后写好系统引导程序,保证开机成功引导系统,接着你需要写一个SPI驱动,让这个芯片能够以SPI通信的方式读取到温度传感器的数据。然后,应用层的开发工程师要写一个QT上位机,一大堆功能,其中一个就是调用SPI接口获取数据,然后呈现出来,最后什么数据导出了,绘图什么的。但是很遗憾,这些工作都是我一个人来干,就很离谱。这里边还有一些东西,比如开机之后,是不加载比如ubuntu那个界面的,是直接打开写好的QT上位机的界面。
所以就是说,不要认为linux应用开发是分离的,大部分情况下都需要一个人干,这点我也比较能理解,两人开发就API接口的对接来说肯定不如一个人写简单。而且,嵌入式本身就大杂烩,哪一点你都不能完全不知道。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。