嵌入式Linux开发从下到上分为:嵌入式硬件开发、嵌入式驱动开发、嵌入式系统开发、嵌入式软件开发。
一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟练掌握嵌入式硬件知识,熟悉硬件开发模式和设计模式,熟悉ARM32位处理器嵌入式硬件平台开发、并具备产品开发经验。精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般需要有4~8层高速PCB设计经验。
二、嵌入式驱动开发:熟练掌握Linux *** 作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM开发,至少掌握Linux字符驱动程序开发。具有单片机、ARM嵌入式处理器的移植开发能力,理解硬件原理图,能独立完成相关硬件驱动调试,具有扎实的硬件知识,能够根据芯片手册编写软件驱动程序。
三、嵌入式系统开发:掌握Linux系统配置,精通处理器体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程等方面的内容;掌握Linux文件系统制作,熟悉各种文件系统格式(YAFFS2、JAFFS2、RAMDISK等);熟悉嵌入式Linux启动流程,熟悉Linux配置文件的修改;掌握内核裁减、内核移植、交叉编译、内核调试、启动程序Bootloader编写、根文件系统制作和集成部署Linux系统等整个流程;、熟悉搭建Linux软件开发环境(库文件的交叉编译及环境配置等);
四、嵌入式软件开发:精通Linux *** 作系统的概念和安装方法、Linux下的基本命令、管理配置和编辑器,包括VI编辑器,GCC编译器,GDB调试器和Make项目管理工具等知识;精通C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容,包括链表、队列等;掌握面向对象编程的基本思想,以及C语言的基础内容;精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库;熟悉常用的图形库的编程,如QT、GTK、miniGUI、fltk、nano-x等。
所以如果你要做嵌入式软件开发的话,上面那些知识基本够用了。
MiniGUI是由北京飞漫软体技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨作业系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛套用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI 30。MiniGUI对中文的支持很友好。它支持GB2312与BIG5字元集,其他字元集也可以轻松加入。
基本介绍 中文名 :MiniGUI 创办商 :北京飞漫软体技术有限公司 属于 :开源Linux图形用户界面支持系统 套用范围 :通讯、医疗、工控、电子 简介,特点优势,技术特性,MiniGUI 的技术优势,MiniGUI V30,运行模式,MiniGUI-Threads,MiniGUI-Processes,MiniGUI-Standalone,软体架构,图形抽象层,输入抽象层,图形设备接口,讯息处理模组,多视窗处理模组和控制项,外观支持, 简介 MiniGUI 是一款面向嵌入式系统的高级视窗系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 年底开始开发。2002 年,魏永明先生创建北京飞漫软体技术有限公司,为 MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软体是中国地区为开源社区贡献代码最多的软体企业。最后一个采用 GPL 授权的 MiniGUI 版本是 1610,从 MiniGUI 204 开始 MiniGUI 被重写并使用商业授权。 历经十余年时间, MiniGUI 已经成为性能优良、功能丰富的跨作业系统嵌入式图形用户界面支持系统,支持Linux/uClinux、eCos、 uC/OS-II、VxWorks、ThreadX、Nucleus 、pSOS、OSE 等作业系统和数十种 SoC晶片,已验证的硬体平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等,广泛套用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用 MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、义大利、印度、以色列等国家和地区。 值得一提的是,在中国自主开发的 3G 通讯标准 TD-SCDMA中,约有 60% 获得入网许可证的 TD-SCDMA 手机使用 MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等 3G 套用软体的运行,其中有联想TD30t、海信 T68、中兴通讯 U85 等大家熟悉的 TD 手机型号。 在 MiniGUI 的基础上,飞漫软体研发了 mDolphin (基于开源的浏览器核心 WebKit 的嵌入式浏览器,满分通过 Acid3 的基准测试)、mPeer (为使用 Java 技术的嵌入式设备提供高效的 J2SE AWT/Swing 实现支持),并且开发了基于 Eclipse CDT 的可视化集成开发环境,为开发人员提供所见即所得(WYSIWYG)的界面设计环境。 2010年,飞漫软体把最新版的 MiniGUI、mDolphin、mPeer、mStudio 等系统整合在一起,推出了合璧作业系统(HybridOS)解决方案,是一整套专为嵌入式设备打造的快速开发平台,集成了飞漫软体10年的嵌入式行业研发经验和众多成熟的产品,使众多的希望在嵌入式设备上做开发的中小型企业,摆脱了“不稳定的核心以及驱动程式”、“交叉编译工具链、基础函式馆存在大量缺陷”、“不恰当的开源软体”、“高水平嵌入式开发工程师缺乏”等这些问题的困扰,从而能够在一个运行稳定、功能强大的小巧系统核心基础上,专注开发产品。合璧作业系统(HybridOS)采用新的商业授权模式,性价比颇高。 截止2010年9月,MiniGUI 的最新版本是3010, MiniGUI 将作为合璧作业系统(HybridOS)的一个组成部分而不断演进,推荐新老用户使用合璧作业系统(Hybridos)作为嵌入式开发平台,必将节省大量的开发成本和时间。 (概述内容来源:) 特点优势 MiniGUI 为嵌入式 Linux 系统提供了完整的图形系统支持,是全球针对嵌入式 Linux仅有的两个商用嵌入式GUI系统之一。MiniGUI为嵌入式Linux 系统提供了完整的多进程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三种运行模式运行。 技术特性 硬体适配性 : 可运行于各种含有 MMU(记忆体管理单元)的 32 位处理器架构之上,如 ix386、ARM、MIPS、PowerPC 等。 支持低端显示设备(比如单色 LCD)和高端显示设备(8 位色及以上显示设备)。通过 MiniGUI 的图形抽象层及图形引擎技术,还可以支持特殊的显示设备,比如 YUV 显示设备。对显示设备解析度无最大和最小限制。 副屏支持。当系统中有多个视频设备时,可将一个作为 MiniGUI 的主屏,实现完整的多视窗系统;而其它设备作为副屏,在其上通过 MiniGUI 的图形接口来实现文字渲染、图形显示等功能。 可支持各种输入设备,如 PC 键盘、PC 滑鼠、小键盘(Keypad)、触控萤幕、遥控器等等。 多种键盘布局的支持。MiniGUI 除支持常见的美式 PC 键盘布局之外,还支持法语、德语等西欧语种的键 盘布局。 资源消耗 : MiniGUI 的静态存储随配置选项的不同而不同,最少需占用 1MB 静态存储空间。 MiniGUI 启动后,初始占用 1MB 动态存储空间。建议系统记忆体为 8MB 以上。 作业系统适配性 : 支持 Linux 作业系统(非 uClinux 作业系统),可以 MiniGUI-Processes、MiniGUI-Threads 或者 MiniGUI-Standalone 三种运行模式运行。 内建资源支持。可以将 MiniGUI 所使用的资源,诸如点阵图、图示和字型等编译到函式馆中,该特性可提高 MiniGUI 的初始化速度,并且非常适合无档案系统支持的实时嵌入式作业系统。 针对嵌入式系统的特殊支持,包括一般性的 I/O 流 *** 作,位元组序相关函式等。 视窗子系统特性 : 完备的多视窗机制和讯息传递机制。使用 MiniGUI-Threads 运行模式时,可在不同执行绪中创建主视窗,并支持执行绪间的讯息传递;使用 MiniGUI-Processes 运行模式时,支持完整的多进程视窗系统。 对话框和讯息框支持。 提供常用的控制项类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、选单按钮、进度条、滑块、属性页、工具列、树型控制项、月历控制项、旋钮控制项、酷工具列、格线控制项、动画控制项等。 其它 GUI 元素,包括选单、加速键、插入符、定时器等。 图形子系统特性 : 提供有增强 GDI 函式,包括光栅 *** 作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函式。在提供有兼容于 C99 规范的数学库平台上,还提供有高级二维绘图函式,可设定线宽、线型以及填充模式等。通过 MiniGUI 的图形抽象层及图形引擎技术,也可以让上述高级 GDI 接口在低端显示屏上实现。 各种流行图像档案的支持,包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通过 libjpeg 及 libpng 函式馆提供)。 Windows 的资源档案支持,如点阵图、图示、游标等。 多字元集和多字型支持,目前支持 ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16编码)等字元集,支持等宽点阵字型、变宽点阵字型、Qt/Embedded 使用的嵌入式字型 QPF、TrueType矢量字型(对 TrueType 的支持通过 freetype 13 函式馆提供)。 输入法支持,用于提供各种可能的输入形式;内建有适合 PC 平台的汉字(GB2312)输入法支持,包括内码、全拼、智慧型拼音、五笔及自然码等。 MiniGUI 的技术优势 和其它针对嵌入式产品的图形系统相比,MiniGUI 在对系统的需求上具有如下几大优势: 可伸缩性强 。MiniGUI 丰富的功能和可配置特性,使得它既可运行于 CPU 主频只有 60MHz 的低端产品中,亦可运行于高端嵌入式设备中,并使用 MiniGUI 的高级控制项风格及皮肤界面等技术,创建华丽的用户界面。MiniGUI 的跨作业系统特性,使得 MiniGUI 可运行在最简单的嵌入式作业系统之上,如 uC/OS-II,也可以运行在具有现代作业系统特性的嵌入式作业系统之上,如 Linux,而且 MiniGUI 为嵌入式 Linux 系统提供了完整的多视窗图形环境。这些特性,使得 MiniGUI 具有非常强的可伸缩性。可伸缩性是 MiniGUI 从设计之初就考虑且不断完善而来的。这个特性使得 MiniGUI 可套用于简单的行业终端,也可套用于复杂的消费类电子产品。 轻型、占用资源少 。MiniGUI 是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬体情况,如 MiniGUI 库所占的空间最小可以裁剪到 500K 左右,对目前的嵌入式设备来说,满足这一条件是绰绰有余的。此外,测试结果表明,MiniGUI 能够在 CPU 主频为 30 MHz,仅有 4M RAM 的系统上正常运行(使用 uClinux 作业系统),这是其它针对嵌入式产品的图形系统所无法达到的。 高性能、高可靠性。 MiniGUI 良好的体系结构及最佳化的图形接口,可确保最快的图形绘制速度。在设计之初,就充分考虑到了实时嵌入式系统的特点,针对多视窗环境下的图形绘制开展了大量的研究及开发,最佳化了 MiniGUI 的图形绘制性能及资源占用。MiniGUI 在大量实际系统中的套用,尤其在工业控制系统的套用,证明 MiniGUI 具有非常好的性能。从 1999 年 MiniGUI 的第一个版本发布以来,就有许多产品和项目使用 MiniGUI,MiniGUI 也不断从这些产品或者项目当中获得发展动力和新的技术需求,逐渐提高了自身的可靠性和健壮性。有关 MiniGUI 的最新成功案例,您可以访问飞漫公司网站的典型案例部分。 可配置性 。为满足嵌入式系统各种各样的需求,必须要求 GUI 系统是可配置的。和 Linux 核心类似,MiniGUI 也实现了大量的编译配置选项,通过这些选项可指定 MiniGUI 库中包括哪些功能而同时不包括哪些功能。大体说来,可以在如下几个方面对 MiniGUI 进行定制配置: 指定 MiniGUI 要运行的硬体平台。 指定 MiniGUI 要运行的作业系统。 指定生成基于执行绪的 MiniGUI-Threads 运行模式还是基于进程的 MiniGUI-Processes 运行模式,或者只是最简单的 MiniGUI-Standalone 运行模式。 指定需要支持的 GAL 引擎和 IAL 引擎,以及引擎相关选项。 指定需要支持的字型类型。 指定需要支持的字元集。 指定需要支持的图像档案格式。 指定需要支持的控制项类。 指定控制项和视窗的整体风格,可以通过指定不同的渲染器完成。这些配置选项大大增强了 MiniGUI 的灵活性,对用户来讲,可针对具体的套用需求量体裁衣,开发最适合产品需求的套用软体。 总之,将现代视窗和图形技术带入到嵌入式设备的MiniGUI,是一个非常适合于实时嵌入式设备的高效、可靠、可定制、小巧灵活的图形用户界面支持系统,其主要优点可以总结如下: 支持多种嵌入式作业系统,具备优秀的可移植性; 可伸缩的系统架构,易于扩展; 功能丰富,可灵活剪裁; 小体积高性能间的最佳平衡; 广泛的套用领域。 MiniGUI V30 在以前版本的基础上新增了如下新特性: 主视窗双缓冲区 (Double Buffering Main Window) 当 MiniGUI 30 的主视窗具有双缓冲区时,可以在自定义缓冲区中获得整个主视窗的渲染结果。在此基础上,可以利用高级 2D 图形接口或者 3D 图形接口获得主视窗的各种特殊显示效果,如推拉切换、翻页切换、卷曲效果等等。 外观渲染器 (Look and Feel Renderer)支持。MiniGUI V30 改变了以往只支持三种控制项风格的方式,引入了渲染器(Look and Feel)这一全新的模式。渲染器是定义如何绘制视窗元素的渲染器,是在MiniGUI V20X的基础上继续完善的。视窗元素包括框线、标题栏、标题栏按钮、滚动条、选定项目、无效项目、高亮项目、突出项目、三维对象等;视窗元素的外观属性,包括视窗元素的颜色、尺寸、字型等信息;视窗元素渲染器是对视窗元素进行定制大小、颜色、图形、字型,便于用户设计个性化的外观显示风格。用户可以指定某个主视窗或某个控制项使用特定的渲染器,也可定制非客户区渲染器、视窗元素的尺寸、颜色、字型、图示,同时增强资源管理功能,从而获得更加华丽的图形界面。MiniGUI实现了几种默认整体显示风格:Classic 、Flat、Fashion 和Skin。用户可以在配置 MiniGUI 时指定相应的选项来将 MiniGUI 编译成特定的一种显示风格。 Classic: 这种风格的界面是标准的Window 95风格界面,也是最广泛使用的风格了。 Fashion: 此种风格的界面,采用 MiniGUI 30 组件 mGPlus 提供的颜色渐变填充技术,因此,可获得非常炫丽的界面效果; Flat: 此种风格的视窗界面,线条清晰,简洁,因此适用于单色或者灰度显示屏。因为绘制简单,因此该渲染器占用资源最少,运行速度最快; Skin: 上面三种外观渲染器基本上都是由代码绘制出来的,具有小巧灵活的特点。但是,在嵌入式套用领域,设备的差别非常大。有些设备,已经具备了非常高的运算性能。在这种情况下,可以考虑使用皮肤外观渲染器来美化界面。皮肤外观渲染器需要一整套和界面相关的,因此需要占用一些存储资源。皮肤外观渲染器的最大的特点是允许用户定制界面,用户可以使用自己设计的替换系统原有的,展现在用户面前的就将是你自己设计的界面效果。 双向文本(BIDI Text)的显示与输入 。大家知道,除了大家熟知的从左向右书写的文字(如英语、汉语等)之外,还有许多语言采用从右向左的书写习惯,如阿拉伯文和希伯来文等。为了支持这些语言,MiniGUI 30中增加了对这两种语言所属字元集的处理,并增加了阿拉伯和希伯来键盘布局的支持,从而实现了对双向文本的输入输出处理。阿拉伯文以及希伯来文的显示。 不规则视窗 。MiniGUI V30实现了不规则视窗与控制项,可满足用户对视窗外观各种不同的需求。不规则视窗通过一个Region数据结构来表示可见区域,或者通过8位MYBITMAP中的透明值形成不可见区域。 字型 。在 MiniGUI 30 中,飞漫软体发明了一种新的 UNICODE 字型档格式,称为“UPF”字型。这种字型的最大特点,是便于在多进程环境下使用,从而极大地节约了记忆体的使用。同时,飞漫软体增强了VBF字型格式,将VBF 字型升级到了30,扩大了其能适用的字元集范围,以便支持阿拉伯文等语言文字的显示。 其他增强 。MiniGUI 30实现了桌面的可定制。通过桌面的外部编程接口,用户可以在桌面放置图示并回响桌面事件,实现类似Windows桌面的界面效果。除此之外,MiniGUI 30 还增强了透明控制项的实现,使之效率更高,且不依赖于控制项的内部实现代码。MiniGUI 30 还提供独立的滚动条控制项,提供统一的虚拟帧缓冲区程式支持等等。另外最新的MiniGUI V30新增加了两个新的组件:mGUtils和mGPlus,把字型、点阵图、图示、游标等资源进行统一管理,资源的内嵌和非内嵌方式并不影响模组的组成,由此抽象出系统资源管理模组。 运行模式 和 Linux 这样的类 UNIX 作业系统相比,一般意义上的传统嵌入式作业系统具有一些特殊性。举例而言,诸如 uClinux、uC/OS-II、eCos 等作业系统,通常运行在没有 MMU(记忆体管理单元,用于提供虚拟记忆体支持)的 CPU 上;这时,往往就没有进程的概念,而只有执行绪或者任务的概念,这样,MiniGUI 的运行环境也就大相迳庭。因此,为了适合不同的作业系统环境,可将 MiniGUI 配置成三种不同的运行模式: MiniGUI-Threads 运行在 MiniGUI-Threads 上的程式可以在不同的执行绪中建立多个视窗,但所有的视窗在一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式作业系统,比如 VxWorks 、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。当然,在 Linux 和 uClinux 上,MiniGUI 也能以 MiniGUI-Threads 的模式运行。 MiniGUI-Processes 和 MiniGUI-Threads相反,MiniGUI-Processes 上的每个程式是单独的进程,每个进程也可以建立多个视窗,并且实现了多进程视窗系统。MiniGUI-Processes 适合于具有完整 UNIX 特性的嵌入式作业系统,比如嵌入式 Linux。该运行模式在 MiniGUI V20 中提供。 MiniGUI-Standalone 这种运行模式下,MiniGUI 可以以独立任务的方式运行,既不需要多执行绪也不需要多进程的支持,这种运行模式适合功能单一的套用场合。比如在一些使用 uClinux 的嵌入式产品中,因为各种原因而缺少执行绪支持,这时,就可以使用 MiniGUI-Standalone 来开发套用软体。 一般而言,MiniGUI-Standalone 模式的适应面最广,可以支持几乎所有的作业系统(目前只用来提供对 Linux/uClinux 作业系统的支持);MiniGUI-Threads 模式的适用面次之,可运行在支持多任务的实时嵌入式作业系统,或者具备完整 UNIX 特性的普通作业系统;MiniGUI-Processes 模式的适用面较小,它仅适合于具备完整 UNIX 特性的嵌入式作业系统,比如 Linux。但不论采用哪种运行模式,MiniGUI 为上层套用软体提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。 软体架构 MiniGUI 由如下几个模组组成:MiniGUI软体架构图 minigui软体架构图 图形抽象层 (Graphics Abstraction Layer,GAL)。图形抽象层将来自不同作业系统或设备的图形接口进行抽象,为 MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对 Linux FB 设备、eCos LCD 设备等的软体组成部分。这些软体组成部分通过调用底层设备的接口来实现具体的图形抽象层 *** 作,如打开设备、设定解析度及显示模式、关闭设备等。将这些用于适配图形抽象层接口的软体组成部分称为“引擎(engine)”,其概念和作业系统中的设备驱动程式类似。 输入抽象层 (Input Abstraction Layer,IAL)。和 GAL 类似,输入抽象层将 MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、滑鼠(mouse)、触控萤幕(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触控萤幕或者滑鼠接口,则通过为 IAL 编写不同的输入引擎实现。MiniGUI 通过 IAL 及其输入引擎,提供对 Linux 控制台(键盘及滑鼠)、触控萤幕、遥控器、小键盘等输入设备的支持。 图形设备接口 (Graphics Device Interfaces,GDI)。该模组基于图形抽象层为上层应用程式提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模组,如字型字元集(font and charset)支持、图像(image)支持等。 讯息处理模组 (Messaging Module)。该模组在输入抽象层基础上,实现了 MiniGUI 的讯息处理机制,为上层提供了完备的讯息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程式的运行,都依赖于讯息处理模组。 多视窗处理模组和控制项 (Windowing Module)和(Control 或 Widget)。基于图形设备接口和讯息处理模组,MiniGUI 实现了多视窗处理模组。该模组为上层应用程式提供了创建主视窗和控制项的基本接口,并负责维护控制项类。控制项类是用来实现控制项代码重用的重要概念,利用控制项类(control class),可以创建属于某个控制项类的多个控制项实例(instance),从而让这些控制项实例使用同一个控制项类的代码,这样,就实现了类似 C++ 那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软体的可维护性。MiniGUI 的控制项模组实现了常见的 GUI 控制项,如静态框、按钮、编辑框、列表框、下拉框等等。 外观支持 (Look and Feel)。这个模组是 MiniGUI V30 提供给上层应用程式的接口,可用来定制 MiniGUI 视窗、控制项的绘制。在 MiniGUI V30 之前的版本中,对主视窗和控制项的定制能力,还没有被抽离出来形成独立的模组,但仍然可以通过配置选项让 MiniGUI 的主视窗、控制项具有三种显示风格,分别是:类似 PC 的三维风格(PC3D )、平板风格(FLAT)、流行风格(FASHION)。在 MiniGUI 30 中,主视窗和控制项的外观可完全由应用程式自行定制,在创建主视窗或者控制项时,指定外观渲染器(renderer)的名称,就可以让主视窗或者控制项具有各自不同的外观。 在 MiniGUI 核心(Core)接口之上,还为应用程式提供若干组件,这些组件分别为应用程式提供某些特殊的功能特性: mGi 是 MiniGUI 的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架,并提供给用户管理输入法的容器,通过这个容器,用户还可以添加自定义的输入法。 mGp 是针对 MiniGUI 应用程式的一个列印组件,该组件使用户的 MiniGUI 程式具有列印输出功能,可以将 MiniGUI 程式中的点阵图或文字输出到印表机。 mG3d 是一个为 MiniGUI 的应用程式提供 3D 接口的组件,通过这些接口,用户可以给自己的应用程式添加三维图像、文字渲染、场景渲染等效果,从而可以具有三维效果的人机界面。 mGUtils 组件为用户提供了一些常用的对话框模板,有了这些模板,用户就不用为一些常用的功能编写重复代码了。本组件提供的功能模板有:普通档案对话框、颜色设定对话框、字型设定对话框、信息设定对话框等。 mGPlus 组件是对 MiniGUI 图形绘制接口的一个扩充和增强,主要提供对二维矢量图形和高级图形算法的支持,如路径、渐变填充和颜色组合等。 mGEff 组件提供常规的页面特效支持。
原文链接:网页链接
嵌入式Linux学习路线图我是1999年上的大学,物理专业。在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么。你当下的经历、当下的学习,在未来的一天肯定会影响到你。毕业后我们也各自找到了自己的职业:出国深造转行做金融、留校任教做科研、设计芯片、写程序、创办公司等等,这一切都离不开在校时学到的基础技能(数学、IT、电子电路)、受过煅炼的自学能力。
所以,各位正在迷茫的在校生,各位正在尝试转行的程序员,未来一定有你的位置,是好是坏取决于你当下的努力与积累。
我不能预言几年后什么行业会热门,也不能保证你照着本文学习可以发财。我只是一个有十几年经验的程序员,给对编程有兴趣的你,提供一些建议。
1程序员的三大方向程序员的方向,一般可以分为3类:专业领域、业务领域、 *** 作系统领域。你了解它们后,按兴趣选择吧。
对于专业领域,我提供不了建议。
业务,也就是应用程序,它跟 *** 作系统并不是截然分开的:
①开发实体产品时,应用程序写得好的人,有时候需要 *** 作系统的知识,比如调度优先级的设置、知道某些函数可能会令进程休眠。
②写应用程序的人进阶为系统工程师时,他需要从上到下都了解,这时候就需要有 *** 作系统领域的知识了,否则,你怎么设计整个系统的方案呢?
③做应用程序的人,需要了解行业的需求,理解业务的逻辑。所以,当领导的人,多是做应用的。一旦钻入了某个行业,很难换行业。
④而 *** 作系统领域,做好了这是通杀各行业:他只负责底层系统,在上面开发什么业务跟他没关系。这行很多是技术宅,行业专家。
⑤ *** 作系统和业务之间并没有一个界线。有 *** 作系统经验,再去做应用,你会对系统知根知底,碰到问题时都有解决思路。有了业务经验,你再了解一下 *** 作系统,很快就可以组成一个团队自立门户,至少做个CTO没问题。
11 专业领域它又可以分为下面2类。
111 学术研究
比如语音、图像处理、人工智能,这类工作需要你有比较强的理论知识,我倾向于认为这类人是“科学家”,他们钻研多年,很多时候是在做学术研究。
在嵌入式领域,需要把他们的成果用某种算法表达出来,针对某种芯片进行优化,这部分工作也许有专人来做。
112 工程实现
也有这样一类人,他们懂得这些专业领域的概念,但是没有深入钻研。可以使用各类开源资料实现某个目标,做出产品。比如图像处理,他懂得用opencv里几百个复杂函数来实现头像识别。有时候还可以根据具体芯片来优化这些函数。
“专业领域”不是我的菜,如果你要做这一块,我想最好的入门方法是在学校学习研究生、博士课程。
12 业务领域换句话说,就是应用程序,这又可以分为下面2类。
121 界面显示
做产品当然需要好的界面,但是,不是说它不重要,是没什么发展后劲。
现在的热门词是Android APP和IOS APP开发。你不要被Android、IOS两个词骗了,它们跟以前的VC、VB是同一路货色,只是、仅仅是一套GUI控件的实现。
希望没有冒犯到你,我有理由。
一个程序需要有GUI界面,但是程序的内在逻辑才是核心。Android、IOS的开发工具给我们简化了GUI的开发,并提供了这些控件的交互机制,封装并提供了一些服务(比如网络传输)。但是程序内部的业务逻辑、对视频图像声音的处理等等,这才是核心。另外别忘了服务器那边的后台程序:怎样更安全地保存数据、保护客户的隐私,怎样处理成千上万上百万的并发访问,等等,这也是核心。
但是,从Android、IOS APP入门入行,这很快!如果你是大四,急于找到一份工作,那么花上1、2个月去学习Android或IOS,应该容易找到工作,毕竟APP的需求永远是最大的,现在这两门技术还算热门。在2011、2012年左右,Android程序员的起薪挺高,然后开始下滑。Android APP的入门基本只要1个月,所以懂的人也越来越多。2013、2014年,IOS开发的工资明显比Android高了,于是各类IOS培训也火曝起来。中华大地向来不缺速成人才,估计再过一阵子IOS工程师也是白菜价了。
会Android、IOS只是基本要求,不信去51job搜搜Android或IOS,职位要求里肯定其他要求。
122 业务逻辑
举个简单例子,做一个打卡软件,你需要考虑这些东西:
①正常流程是上班下班时都要打卡
②有人忘记了怎么办?作为异常记录在案,推送给管理员
③请假时怎么处理?
④加班怎么处理?
对于更复杂的例子,视频会议系统里,各个模块怎么对接,各类协议怎么兼容,你不深入这个行业,你根本搞不清楚。
应用开发的职位永远是最多的,入门门槛也低。基本上只要你会C语言,面试时表现比较得体,一般公司都会给你机会。因为:
①你进公司后,还需要重新培训你:熟悉它们的业务逻辑。
②你要做的,基本也就是一个个模块,框架都有人给你定好了,你去填代码就可以了。
说点让你高兴的事:软件公司里,做领导的基本都是写应用程序的(当然还有做市场的)。写应用程序的人,对外可以研究市场接待客户,对内可以管理程序员完成开发,不让他做领导让谁做?
如果你的志向是写应用程序,那么我建议你先练好基本功:数据结构、算法是必备,然后凭兴趣选择数据库、网络编程等等进行深入钻研。
最后,选择你看好的、感兴趣的行业深耕个10年吧。做应用开发的人选择了某个行业,后面是很难换行业的,选行很重要!
13 *** 作系统领域UCOS太简单,VxWorks太贵太专业,Windows不玩嵌入式了,IOS不开源,所以对于 *** 作系统领域我们也只能玩Linux了。
在嵌入式领域Linux一家独大!
Android呢?Android跟QT一样,都是一套GUI系统。只是Google的实力太强了,现在Android无处不在,所以很多时候Linux+Android成了标配。注意,在这里我们关心的是Android的整个系统、里面的机制,而不是学习几个API然后开发界面程序。 *** 作系统领域所包含的内容,简单地说,就是制作出一台装好系统的专用“电脑”,可以分为:
①为产品规划硬件:
按需求、性能、成本选择主芯片,搭配周边外设,交由硬件开发人员设计。
②给单板制作、安装 *** 作系统、编写驱动
③定制维护、升级等系统方案
④还可能要配置、安装Android等GUI系统:
⑤为应用开发人员配置开发环境
⑥从系统角度解决疑难问题
这个领域,通常被称为“底层系统”或是“驱动开发”。
先解决2个常见误区:
①这份工作是写驱动程序吗?
看看上面罗列的6点,应该说,它包含驱动开发,但远远不只有驱动开发。
②我们还需要写驱动吗?不是有原厂吗?或者只需要改改就可以?
经常有人说,芯片原厂都做好驱动了,拿过来改改就可以了。如果,你的硬件跟原厂的公板完全一样,原厂源码毫无BUG,不想优化性能、削减成本,不想做一些有特色的产品,那这话是正确的。
但是在这个不创新就是找死的年代,可能吗?!原因有二:
①即使只是修改代码,能修改的前提是能理解;能理解的最好煅炼方法是从零写出若干驱动程序。
②很多时候,需要你深度定制系统。
以前做联发科手机只需要改改界面就可以出货了,现在山寨厂一批批倒下。大家都使用原厂的方案而不加修改时,最后只能拼成本。
举个例子,深圳有2家做交通摄像头、监控摄像头的厂家,他们曾经找我做过4个项目:
①改进厂家给的SD卡驱动性能,使用DMA。
②换了Flash型号后,系统经常出问题,需要修改驱动BUG。
③触摸屏点击不准,找原因,后来发现是旁路电容导致的。
④裁减成本,把4片DDR换为2片DDR,需要改bootloader对DDR的初始化。
这些项目都很急,搞不定就无法出货,这时候找原厂?除非你是中兴华为等大客户,否则谁理你?
我在中兴公司上班时,写驱动的时间其实是很少的,大部分时间是调试:系统调优,上帮APP工程师、下帮硬件工程师查找问题。我们从厂家、网上得到的源码,很多都是标准的,当然可以直接用。但是在你的产品上也许优化一下更好。比如我们可以把摄像头驱动和DMA驱动揉合起来,让摄像头的数据直接通过DMA发到DSP去。我们可以在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题。
当硬件、软件应用出现问题,他们解决不了时,从底层软件角度给他们出主意,给他们提供工具。再比如方案选择:芯片性能能否达标、可用的BSP是否完善等等,这只能由负责整个方案的人来考虑,他必须懂底层。
在 *** 作系统领域,对知识的要求很多:
①懂硬件知识才能看懂电路图
②英文好会看芯片手册
③有编写、移植驱动程序的能力
④对 *** 作系统本身有一定的理解,才能解决各类疑难问题
⑤理解Android内部机制
⑥懂汇编、C语言、C++、JAVA
它绝对是一个大坑,没有兴趣、没有毅力的人慎选。
①这行的入门,绝对需要半年以上,即使全天学习也要半年。
②它的职位,绝对比APP的职位少
③并且你没有1、2年经验,招你到公司后一开始你做的还是APP。
优点就是:
①学好后,行业通杀,想换行就换行;想自己做产品就自己做产品。
②相比做应用程序的人,不会被经常变动的需求搞得天天加班。
③门槛高,当然薪水相对就高。
*** 作系统领域,我认为适合于这些人:
①硬件工程师想转软件工程师,从底层软件入门会比较好
②单片机工程师,想升级一下。会Linux底层的人肯定会单片机,会单片机的人不一定会Linux。
③时间充足的学生:如果你正读大二大三,那么花上半年学习嵌入式Linux底层多有益处。
④想掌握整个系统的人,比如你正在公司里写APP,但是想升为系统工程师,那么底层不得不学。
⑤想自己创业做实体产品的工程师,你有钱的话什么技术都不用学,但是如果没钱又想做产品,那么Linux底层不得不学。
⑥做Linux APP的人,没错,他们也要学习。
这部分人不需要深入,了解个大概就可以:bootloader是用来启动内核,Linux的文件系统(第1个程序是什么、做什么、各目录干嘛用)、APP跟驱动程序的调用关系、工具链,有这些概念就可以了
本文中,就把 *** 作系统默认为Linux,讲讲怎么学习嵌入式Linux+Android系统。
14 嵌入式Linux+Android系统包含哪些内容嵌入式Linux系统包含哪些东西?不要急,举一个例子你就知道了。
①电脑一开机,那些界面是谁显示的?
是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。
类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。
②启动windows的目的是什么?
当然运行应用程序以便上网、聊天什么的了。
这些上网程序、聊天程序在哪?
在C盘、D盘上。
所以,windows要先识别出C盘、D盘。在Linux下我们称之为根文件系统。
③windows能识别出C盘、D盘,那么肯定有读写硬盘的能力。
这个能力我们称之为驱动程序。当然不仅仅是 *** 作硬盘,还有网卡、USB等等其他硬件。嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。
简单地说,嵌入式LINUX系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android。
所以,嵌入式Linux+Android系统包含以下6部分内容:
①bootloader
②Linux内核
③驱动程序
④使用C/C++编写的应用程序
⑤Android系统本身
⑥Android应用程序
Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux *** 作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。
2 怎么学习嵌入式Linux *** 作系统本文假设您是零基础,以实用为主,用最快的时间让你入门;后面也会附上想深入学习时可以参考的资料。
在实际工作中,我们从事的是“ *** 作系统”周边的开发,并不会太深入学习、修改 *** 作系统本身。
① *** 作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序
②学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程序后,也会加深对 *** 作系统其他部分的理解
③Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成
但是,要成为该领域的高手,一定要深入理解Linux *** 作系统本身,要去研读它的源代码。
在忙完工作,闲暇之余,可以看看这些书:
①赵炯的《linux内核完全注释》,这本比较薄,推荐这本。他后来又出了《Linux 内核完全剖析》,太厚了,搞不好看了后面就忘记前面了。
②毛德 *** 、胡希明的《LINUX核心源代码情景分析》,此书分上下册,巨厚无比。当作字典看即可:想深入理解某方面的知识,就去看某章节。
③其他好书还有很多,我没怎么看,没有更多建议
基于快速入门,上手工作的目的,您先不用看上面的书,先按本文学习。
21 入门路线图假设您是零基础,我们规划了如下入门路线图。前面的知识,是后面知识的基础,建议按顺序学习。每一部分,不一定需要学得很深入透彻,下面分章节描述。
22 学习驱动程序之前的基础知识221 C语言
只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的,一上机就傻了,我怀疑他们都没在电脑上写过程序。
理论再好,没有实践不能干活的话,公司招你去干嘛?
反过来,实践出真知,学习C语言,必须练练练、写写写!
当你掌握基本语法后,就可以在电脑上练习一些C语言习题了;
当你写过几个C程序后,就可以进入下一阶段的裸机开发了。
①不需要太深入
作为快速入门,只要你会编写“Hello, world!”,会写冒泡排序,会一些基础的语法 *** 作,暂时就够了。
指针 *** 作是重点,多练习;
不需要去学习过多的数据结构知识,只需要掌握链表 *** 作,其他不用学习,比如:队列、二叉树等等都不用学;不需要去学习任何的函数使用,比如文件 *** 作、多线程编程、网络编程等等;这些知识,在编写Linux应用程序时会用,但是在 *** 作系统特别是驱动学习时,用不着!
永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习。
在后续的“裸机开发”中,会让你继续练习C语言,那会更实战化。
C语言是在写代码中精进的。
②可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令,我们暂时没有提供C语言的教程,找一本C语言书,网上找找免费的C语言视频(主要看怎么搭建环境),就可以自学了。
222 PC Linux基本 *** 作:
对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便。
我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。为了提高工作效率,我们通常使用命令行来 *** 作Ubuntu。
不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单,我干脆列出它们:
①cd : Change Directory(改变目录)
cd 目录名 // 进入某个目录cd // cd “两个点”:返回上一级目录cd - // cd “短横”:返回上一次所在目录
②pwd : Print Work Directory(打印当前目录 显示出当前工作目录的绝对路径)
③mkdir : Make Directory(创建目录)
mkdir abc // 创建文件夹abcmkdir -p a/b/c // 创建文件夹a,再a下创建文件夹b,再在b下创建文件夹c
④rm : Remove(删除目录或文件)
rm file // 删除名为file的文件rm -rf dir // 删除名为dir的目录
⑤ls : List(列出目录内容)
⑥mount : 挂载
mount -t nfs -o nolock,vers=2 1921681123:/work/nfs_root /mntmount -t yaffs /dev/mtdblock3 /mnt
⑦chown : Change owner(改变文件的属主,即拥有者)
chown book:book /work -R //对/work目录及其下所有内容,属主改为book用户,组改为book
⑧chmod : Change mode(改变权限),下面的例子很简单粗暴
chmod 777 /work -R // 对/work目录及其下所有内容,权限改为可读、可写、可执行
⑨vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。
要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。
223 硬件知识
我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。
对于正统的方法,你应该这样学习:
①学习《微机原理》,理解一个计算机的组成及各个部件的交互原理。
②学习《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。
③《模拟电路》?好吧,这个不用学,至少我在工作中基本用不到它,现在全忘光了。
就我个人经验来说,这些课程是有用的,但是:
①原理有用,实战性不强。
比如《微机原理》是基于x86系统,跟ARM板子有很大差别,当然原理相通。
我是在接触嵌入式编程后,才理解了这些课程。
②每本书都那么厚,内容都很多,学习时间过长,自学有难度。
针对这些校园教材的不足,并结合实际开发过程中要用到的知识点,我们推出了《学前班_怎么看原理图》的系列视频:
学前班第1课第1节___怎么看原理图之GPIO和门电路wmv
学前班第1课第21节_怎么看原理图之协议类接口之UARTwmv
学前班第1课第22节_怎么看原理图之协议类接口之I2Cwmv
学前班第1课第23节_怎么看原理图之协议类接口之SPIwmv
学前班第1课第24节_怎么看原理图之协议类接口之NAND Flashwmv
学前班第1课第25节_怎么看原理图之协议类接口之LCDwmv
学前班第1课第3节___怎么看原理图之内存类接口wmv
学前班第1课第41节_怎么看原理图之分析S3C2410开发板wmv
学前班第1课第42节_怎么看原理图之分析S3C2440开发板wmv
学前班第1课第43节_怎么看原理图之分析S3C6410开发板wmv
即使你只具备初中物理课的电路知识,我也希望能通过这些视频,让你可以看懂原理图,理解一些常见的通信协议;如果你想掌握更多的硬件知识,这些视频也可以起个索引作用,让你知道缺乏什么知识。
这些视频所讲到的硬件知识,将在《裸板开发》系列视频中用到,到时可以相互对照着看,加深理解。
224 要不要专门学习Windows下的单片机开发
很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。
问题来了,要不要专门学习Windows下的单片机开发?
①如果这是你们专业的必修课,那就学吧
②如果你的专业跟单片机密切相关,比如机械控制等,那就学吧
③如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows下学习单片机吧!
理由如下:
①Windows下的单片机学习,深度不够
Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。
它们封装了很多技术细节,比如:
你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;
你可以编写中断处理函数,但是却不知道它是怎么被调用的;
你不知道程序怎么从Flash上被读入内存;
也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;
当你想裁剪程序降低对Flash、内存的使用时,你无从下手;
当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂;
等等等。
②基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。
在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。
一切从零编写代码、管理代码,可以让我们学习到更多知识:
你需要了解芯片的上电启动过程,知道第1条代码如何运行;
你需要掌握怎么把程序从Flash上读入内存;
需要理解内存怎么规划使用,比如栈在哪,堆在哪;
需要理解代码重定位;
需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;
你会知道,main函数不是我们编写的第1个函数;
你会知道,芯片从上电开始,程序是怎么被搬运执行的;
你会知道,函数调用过程中,参数是如何传递的;
你会知道,中断发生时,每一个寄存器的值都要小心对待;
等等等。
你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。
驱动程序=Linux驱动程序软件框架+ARM开发板硬件 *** 作,我们可以从简单的裸机开发入手,先掌握硬件 *** 作,并且还可以:
①掌握如何在PC Linux下编译程序、把程序烧录到板子上并运行它
②为学习bootloader打基础:掌握了各种硬件 *** 作后,后面一组合就是一个bootloader
225 为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?
有一个错误的概念:S3C2440过时了、ARM9过时了。
这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。
一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去 *** 作那些片上设备。
所以:差别在于片上设备,不在于CPU核;差别在于寄存器 *** 作不一样。
因为我们写驱动并不涉及CPU的核心,只是 *** 作CPU之外的设备,只是读写这些设备的寄存器。
之所以推荐S3C2440,是因为它的Linux学习资料最丰富,并有配套的第1、2期视频。
226 怎么学习ARM+Linux的裸机开发
学习裸机开发的目的有两个:
①掌握裸机程序的结构,为后续的u-boot作准备
②练习硬件知识,即:怎么看原理图、芯片手册,怎么写代码来 *** 作硬件
后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。
后续的驱动开发,也涉及硬件 *** 作,你可以在裸机开发中学习硬件知识。
注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。在后面的驱动视频中,我们也会重新讲解所涉及的硬件知识。
推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。后者也许是国内第1本涉及在PC Linux环境下开发的ARM裸机程序的书,如果我说错了,请原谅我书读得少。
对于裸机开发,我们提供有2部分视频:
①环境搭建
第0课第1节_刚接触开发板之接口接线wmv
第0课第2节_刚接触开发板之烧写裸板程序wmv
第0课第3节_刚接触开发板之重烧整个系统wmv
第0课第4节_刚接触开发板之使用vmwae和预先做好的ubuntuwmv
第0课第5节_刚接触开发板之u-boot打补丁编译使用及建sourceinsight工程wmv
第0课第6节_刚接触开发板之内核u-boot打补丁编译使用及建sourceinsight工程wmv
第0课第7节_刚接触开发板之制作根文件系统及初试驱动wmv
第0课第8节_在TQ2440,MINI2440上搭建视频所用系统wmv
第0课第9节_win7下不能使用dnw烧写的替代方法wmv
原文链接:网页链接
嵌入式系统开发现在用的是什么平台?
常见的嵌入式系统开发,分硬体和软体平台。硬体可以分为嵌入式CPU,比如微控制器,ARM, MIPS, powerPC, X86,软体一般跑嵌入式作业系统,比如linux, vxwork或QNX ,ucosII,也可以跑裸机,开发工具可以选用keil ,ADS等。还有DSP和FPGA,也可以属于嵌入式范畴,不同厂商有不同的产品线,开发平台也有由于厂商不同的而有不同的开发工具。
嵌入式系统开发难点有哪些 嵌入式系统开发存在的问题1、对目标系统的观察和控制
由于嵌入式硬体系统千差万别,软体模组和系统资源也多种多样,要使系统能正常工作,软体开发者必须要对目标系统具有完全的观察和控制能力,例如硬体的各种暂存器、记忆体空间,作业系统的讯号量、讯息伫列、任务、堆叠等。
2、涉及多种 CPU及多种 OS
嵌入式的CPU或处理器可谓多种多样,这包括了 Pentium、MIPS、PPC、ARM,XScale 等,而且应用都很广,在其上执行的作业系统也有不少,如 VxWorks、Linux、 Nuclears、WinCE等等,即使在一个公司之内,也会同时使用好几种处理器,甚至几种嵌入式作业系统。如果需要同时除错多种型别的板子,每个板子上又执行着多个任务或程序,那复杂性是可想而知的。
3、开发工具种类繁多
不仅各种作业系统有各自的开发工具,在同一系统下开发的不同阶段也有不同的开发工具。如在使用者的目标板开发初期,需要硬体模拟器来除错硬体系统和基本的驱动程式,在除错应用程式阶段可以使用互动式的开发环境进行软体除错,在测试阶段需要一些专门的测试工具软体进行功能和效能的测试,在生产阶段需要固化程式及出厂检测等等。一般每一种工具都要从不同的供应商处购买,都要单独去学习和掌握,这无疑增加了整个公司的支出和管理的难度。
此外,嵌入式系统变化更新比较快,对开发时间要求比较紧,尤其是消费类产品更是如此,如果有一套功能强大的嵌入式软体整合开发工具可以满足嵌入式软体开发各个阶段的需求,同时又使用方便,介面友好,那是最理想不过了。
有的嵌入式系统的处理能力和储存能力较弱,不能在它上面安装开发软体;有的嵌入式系统的处理器结构特殊,没有可以在上面执行的开发工具。所以,在开发嵌入式系统时,通常需要采取交叉开发的方式进行。
如何理解嵌入式系统开发平台硬体设计平台
硬体平台由基本系统(包括CPU和储存器)加上外围介面电路模组构成。基本系统为作业系统核心提供一个最小的除错和执行环境,外围介面模组包括目前应用较为广泛的多种硬体介面电路,如LCD液晶显示模组、触控式萤幕模组、CF卡模组、USB模组、乙太网模组、IC卡模组等,可以方便地根据开发者的需求进行选择使用。
目前,硬体平台基于摩托罗拉公司的DragonBall EZ328(16MHz)微处理器,主要配置包括8MB EDO DRAM、4MB FLASH、320×240画素单色LCD、6个输入按键、一路RS232介面、一路10M乙太网介面等。EZ328是一款得到了广泛应用的32位嵌入式微处理器,内部集成了大量的功能模组,并且具有较强的扩充套件能力。EZ328取消了记忆体管理单元(MMU),降低了硬体成本及执行功耗。EZ328所支援的引导模式也极大地方便了系统的除错。在我们的开发板上,只要驱动EZ328的EMUBRK引脚为低电平并执行系统复位,就可使EZ328进入引导模式,其内建的载入程式就会开始执行,初始化晶片上整合的UART控制器并准备接收资料。这样开发者就可以通过UART控制器写暂存器来初始化开发板,然后下载程式到开发板的RAM和FLASH中执行除错。同时,硬体平台CPU可方便地升级到VZ328(主频33MHz,EZ328的后续产品)。而且,在EZ328硬体平台上开发的软体几乎不需要修改就能使用在VZ328和ColdFire系列微处理器上,具有很广的适用面。ColdFire微处理器主要应用于网际网路装置、LAN电话技术、低端网路控制、工业控制、影象和储存等等。软体开发平台
软体平台由嵌入式Linux作业系统、嵌入式图形使用者介面(GUI)、GNU交叉编译除错工具组成。其中嵌入式Linux作业系统包括嵌入式Linux核心,ROM/RAM档案系统。选用Linux是因为Linux高度模组化,容易定制,具有很高的可移植性。
软体平台所实现的嵌入式Linux系统核心是在mCLinux系统的基础上移植而来的。它是专门面向没有MMU的CPU的Linux作业系统,并且专为嵌入式系统做了许多小型化的工作,得到了广泛的应用,新型的蓝芽网路装置也采用了mClinux作业系统。mCLinux作为一个高度优化的、程式码紧凑的嵌入式Linux,虽然体积很小,但仍然保留了Linux的大多数优点:稳定、良好的移植性,优秀的网路功能,完备的对各种档案系统的支援,以及标准丰富的API。在我们的开发平台上,移植的作业系统核心大小约400KB,提供了通用Linux API和完整的TCP/IP 协议栈,实现了对NFS、ext2、ROMfs、JFFS档案系统的支援。
GUI采用了MicroWindows,具有中文字地化支援,包括GB2312 等字符集的支援,中文输入法等等。在其上又开发了基于FLTK的嵌入式GUI图形包,提供了比较完善的图形功能,如对选单、按钮、滚动条等多种GUI控制元件的支援。
采用这种图形包,我们已开发出大小仅1MB的嵌入式中文Web浏览器,并且正在整合清华文通的中文手写输入软体。
交叉编译除错工具采用通用的Linux开发套件—GNU开发套件,包括了一系列的开发除错工具。主要元件有:
● G—编译器,可以做成交叉编译的形式,即在宿主机上开发编译目标板上可执行的二进位制档案。
● Binutils—辅助工具,包括objdump(可以反编译二进位制档案),as(汇编编译器),ld(联结器)等等。
● Gdb—侦错程式,可使用多种交叉除错方式,包括使用串列埠和乙太网除错。
开发环境
本嵌入式系统开发平台的GNU开发套件运行于桌面Linux作业系统。开发者首先使用G和Gdb编译和除错bootloader程式;再通过串列埠将宿主机和目标板连线起来,使EZ328进入引导模式,通过一个简单的perl程式将除错好的Bootloader程式下载到目标板的RAM中,作为monitor监控程式,同时在宿主机上启动mini和它进行串列埠通讯,对Linux核心及驱动进行下载和除错;一旦Linux核心在目标板上执行并初始化乙太网介面,再由网线将宿主机和目标板连线起来(如图2所示)。通过乙太网,开发者可以使用NFS档案系统安装上宿主机的硬碟,这样目标板就可以通过乙太网对宿主机的硬碟直接进行 *** 作,不需下载即可除错程式;若Linux核心启动了远端登入服务,开发者还可以登入到目标板上除错应用程式。
其是要求你在Linux作业系统环境下进行嵌入式系统的程式设计与设计。你可以自己在电脑中装个Linux系统,常见的有Ubuntu,红帽,Debian等,个人感觉Ubuntu简单易学。
嵌入式系统开发怎样入门?专科生可以从事嵌入式系统开发吗?专科生没问题的!只要认真努力!遇到不会的知识就去学!
嵌入式系统开发需要的基础知识相对较多,不过要看你的方向是什么,是硬体还是软体,硬体比如是板级开发,系统硬体设计软体比如linux,wince,不过建议先找本计算机作业系统的书籍好好看一下,这会很有帮助!另外有一款好的开发板也会事半功倍的!祝你好运!
嵌入式系统开发与软体开发的区别,到底怎么学习嵌入式系统开发?这个你得搞清楚嵌入式软体开发是什么,其实它也还是开发软体,只是它开发的是基于嵌入式系统的软体,所以叫做嵌入式软体开发,无论怎么学习,多看下行业资讯和资讯很有必要的,他的微信公众号:嵌入式资讯精选
嵌入式系统开发环境常用的有Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive
个人感觉Linux、uClinux、WinCE、uCOS-II比较多,但是比例最多的应该是Linux吧~
嵌入式系统开发技术是什么?嵌入式系统开发就是对于除了电脑之外的所有电子装置上作业系统的开发,开发物件有手机,掌上电脑,机电系统等。
嵌入式系统是用来控制或者监视机器、装置、工厂等大规模装置的系统。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬体可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
嵌入式系统的核心是由一个或几个预先程式设计好以用来执行少数几项任务的微处理器或者微控制器组成。与通用计算机能够执行使用者选择的软体不同,嵌入式系统上的软体通常是暂时不变的;所以经常称为"韧体"。
嵌入式系统开发与软体开发嵌入式开发就是指在嵌入式作业系统下进行开发,一般常用的系统有WinCE,linux,android等。另外,用c,c++或汇编开发;用高阶处理器,arm7,arm9,arm11,powerpc,mips,mipsel等,或加上作业系统也属于嵌入式的开发。
………………………………
看你问的问题,应该是对嵌入式很感兴趣,其实你可以自学嵌入式。关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。
退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。
一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关资讯,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
后来,我在百度知道看到一篇让我很鼓舞的文章,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视讯,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。
主意一定,我就去搜索嵌入式的视讯,虽然零星找到一些嵌入式的视讯,但是都不系统,我是想找一个能够告诉我该怎么学的视讯,一套从入门到精通的视讯,一个比较完整的资料,最好能有老师教,不懂可以请教的。
后来我又找到一份很好的视讯,是在IT学习联盟网站推出的一份视讯《零基础嵌入式就业班》(喜欢《零基础嵌入式就业班》的可以复制 sinalt/qKh 贴上浏览器位址列按回车键即开启)。里面的教程还不错,很完整,可以让我从基础的开始学起。视讯比较便宜。
下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
收到他们寄过来的光碟后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视讯教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机器上都有做练习,敲linux的基本命令,写简单的C语言程式码,差不多也就三个礼拜。我每天都在不停的写一些简单的程式码,这样一月后我基本掌握了C和linux的基本 *** 作。
接下来我就去学习了人家的视讯的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。
这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。
最后的一个月,我就去看关于实践部分的内容,了解嵌入式专案具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视讯,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右
我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的专案经验,所以我没有被选中。
后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
……………………………………
嵌入式系统开发的基础是什么嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬体可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬体装置、嵌入式作业系统以及使用者的应用程式等四个部分组成,用于实现对其他装置的控制、监视或管理等功能。
嵌入式系统一般指非PC系统,它包括硬体和软体两部分。硬体包括处理器/微处理器、储存器及外设器件和I/O埠、图形控制器等。软体部分包括作业系统软体(OS)(要求实时和多工 *** 作)和应用程式程式设计。有时设计人员把这两种软体组合在一起。应用程式控制着系统的运作和行为;而作业系统控制着应用程式程式设计与硬体的互动作用。
嵌入式系统是计算机软件和硬件的综合体,岗位包括:ESE(嵌入式软件工程师);ADE(嵌入式应用开发工程师);FWE(嵌入式底层开发工程师);FEC(嵌入式固件开发工程师)。
课程内容主要包括:
①C,Java核心编程:c语言核心编程,Java核心编程;
②Linux核心 *** 作与算法:Linux系统使用,Linux-c编程核心技术,精品数据结构,Linux-c编程精髓;
③核心 *** 作与算法:Linux系统编程,Linux网络编程核心技术,UI编程,Java核心编程,安卓核心技术;
④ARM+Linux底层开发:数字电路,ARM编程核心,Linux系统开发,嵌入式Linux驱动开发;
⑤大型项目实践:每期安排各类型真实的项目,详细可以找我要资料。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
以上就是关于嵌入式linux系统开发详解_嵌入式linux系统介绍全部的内容,包括:嵌入式linux系统开发详解_嵌入式linux系统介绍、MiniGUI详细资料大全、适合初学者学习的嵌入式教程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)