`
webcode
  • 浏览: 5930299 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

嵌入式开发总结

 
阅读更多

嵌入式开发知识总结

文/zollty

序:

读大学时学过计算机组成原理、操作系统、计算机网络等等课程,但是大学生都知道,上完那些课只是懂一点皮毛而已,打打酱油就过去了。虽然拿着奖学金,但那都是浮云。特别是对于软件工程师,一定要多实践、多思考才行。理论知识显得并没有搞硬件或者偏硬件开发的那么重要,因为软件的重点在于逻辑和算法。

我认为,在中、高级阶段,偏硬莫非就是一种知识活儿,而偏软莫非就是一种体力活儿……只有到达专家阶段才能够有所突破。对比一下培训机构的软件开发和硬件开发的培训费用就知道了,一般的软件培训(JAVA/C++/PHP/C#),收费大概是一个月3000,而嵌入式的培训费则是按天计算,1天大概500,由此可见,嵌入式的课程含金量很高。

如果你两者皆不了解,那么我推荐你选择偏硬件的方向,实惠很多。综合其他前辈的经验,我再次强调,嵌入式开发是个不错的工作,应该比公务员都还好,而且非常适合女生,但要学好大学里面的课程,比如数字逻辑、电路分析、微机原理、单片机等等,理论很重要。

而软件工程师就业也很容易,这些天很火爆的消息就是“CSDN等网站被黑”,接踵而至的就是“传智播客创始人、中关村黑马程序员总负责人张孝祥老师急病突发意外逝世,终年38岁”,张孝祥何许人也?你可能不知道,但是对我来说却是如雷贯耳。就我知道的情况,目前黑马程序员训练营3个多月培训出来的学生,平均薪资大概8000,这里面有高中生,有大学生,也有研究生,具体薪酬在4500~15000之间,而且千真万确。类似的培训机构还很多,尚观、达内、软通、安博、国信蓝点…………这个省略号还很长。软件开发的培训周期都在1~4个月之间,就业薪资至少都承诺3000以上,一般都在4000左右。

他们就业很容易,我理解。但是他们起薪就六、七千的,我就有些羡慕了。毕竟自己这么多个Offer,开价都没超过4500的。同学的5K就已经让人羡慕得要死……但是要淡定,一定要淡定,不要把工资看得那么重要。据我所知,传智播客的老师月薪2.5W以上,国信蓝点的老师也有1.2W,是否说明工资越多人就越幸福健康?作为传智播客的老板,张孝祥有钱吧,但是他却非常朴素、非常忙,曾经还跑去发传单……

境界。我静下心来看书、做项目,我发现有些东西确实可以在短短两、三个月内学通,即使说今年做Linux C/C++开发,明年做JavaEE、Android开发,后年去做硬件开发、驱动开发,那都是没问题的。问题是,你喜欢做什么?你想要达到哪种境界?

其实我也不知道我最喜欢什么——我喜欢软件开发(这个范围很大…)也喜欢组织策划、创意设计,我也很适合当老师或者医学家。

我想要达到哪种境界?——这还用说吗,肯定是专家境界;

但是专哪一行呢?——肯定是软件开发。

软件开发的哪一个领域呢?——软件客户端和服务器端开发。

基于哪个平台?——手机平台、平板电脑、嵌入式平台。

基于什么系统?——Windows、Linux、Android等

基于什么语言?——C语言,C++语言,Java语言等

技术范畴有哪些?——网络编程、数据库编程、图形界面编程等。

涉及哪些东西?——这个确实很多,比如Socket、MySQL、GTK+、Qt、Swing、Struts、Hebernate等。

有哪些实际的例子?——Linux下的媒体播放器、嵌入式系统中的人脸识别系统;Android手机上的赶集网客户端、连连看游戏;iPone上的阅读器,iPad上的3D网络游戏的服务器端程序等。

OK,跑题了,回到嵌入式开发的知识上来。下面是我做的笔记,把它整理出来了。

一、基础知识

目前流行的嵌入式操作系统有:Linux、uC/OS、WindowsCE、VxWorks、PalmOS和QNX。其中VxWorks实时性很强,最稳定、可靠,但价格昂贵,而其他的都有各自的优点。

ARM公司(原名Advanced RISC Machine),主要是研发ARM系列微处理器(出售IP,即知识产权),目前全世界有几十家著名的半导体公司都使用ARM公司的授权,包括Motorola、IBM、Intel、SONY、LG等。ARM微处理器已成为RISC标准。目前基于ARM核的处理器有以下几种:

ARM7/9 Thumb家族

ARM9/10E家族

ARM 11家族

ARM Cortex家族

SecurCore家族

OptimoDE Data Engine家族

MPCore Multiprocessors家族

Intel公司的StrongARM(相当于ARM8)和Xscale。

ARM7处理器采用了ARMV4T(冯诺依曼)体系结构。目前主流的ARM7内核是ARM7TDMI(最常用)、ARM7TDMI-S、ARM720T和ARM7EJ-S。T代表支持Thumb指令集,D代表支持片上调试,M代表内嵌硬件乘法器,I代表支持片上断点和调试点。

ARM9处理器采用改进型哈佛体系结构。采用五级流水处理及分离的Cache结构。常见的系列有:ARM920T、ARM922T和ARM940T。

Xscale是基于ARMv5TE体系结构,是一款性能全、性价比高、功耗低的处理器。支持16位的Thumb指令和DSP指令集。

Cortex,按传统的命名方法,Cortex可以看做ARM12。ARM公司推出了Cortex-A/R/M三个系列。

还有ARM9E、ARM11、MPCore、StrongARM等,略。

目前比较经典的是基于三星ARM9的S3C2440的开发板,这个系列的资料很多。最流行的是基于三星ARM11的S3C6410开发板,可以跑Android,尚观嵌入式学院都是用的这种板子。

ARM体系结构的变种

Thumb指令集(T变种)是将ARM指令集重新编码形成的一个子集。常见的ARMv5T使用v2版的Thumb指令集。

此外,还有长乘法指令(M变种),增强型DSP指令(E变种),Java加速器Jazelle(J变种)和ARM媒体功能扩展(SIMD变种)。

二、开发流程

不管系统多么复杂,一般都是以最小系统为基础,通过加入所需的功能模块构成的。最小系统大概包括电源电路、时钟电路、复位电路、外扩的存储系统和调试接口。

1、硬件设计

首先要进行实验板硬件资源规划,例如在最小系统的基础上扩充I2C存储器、串行接口、网络接口、USB接口、触摸屏接口,以及按键、蜂鸣器等。

然后设计硬件电路,包括电源电路、复位电路、时钟微处理器电路、外部存储器电路电路、网络接口电路等等,这一部分貌似比较有难度。许多公司也都是出售组装好的开发板。

PCB的设计,要考虑到抗高频干扰、信号完整性、差分布线等。焊接好元件之后还要调试电路。

2、软件的移植与开发

软件系统的移植主要包括Bootloader的移植、Linux操作系统的移植(包括内核和文件系统的移植)以及针对实验板的驱动程序的编写等。

1)准备交叉编译工具

2)引导加载程序的移植(例如vivi、U-Boot)

3)内核的移植

4)根文件系统的移植

5)驱动程序的编写

6)其他,例如JTAG测试。

三、移植Linux内核

基本步骤为:

1)获取某一版本的Linux内核源码,根据具体目标平台对内核源码进行必要的改写,主要是修改体系结构相关的部分。

PS:显然,对内核源码的修改很有难度,它既要求开发者对Linux内核结构非常熟悉,对目标平台的硬件结构也非常熟悉,而且要有良好的汇编基础。这一部分的工作一般都是目标平台提供商完成的,而且主要的东西是ARM公司的工程师来完成,由他们提供相关版本的Linux内核的补丁,然后把补丁打到我们所用的Linux内核上,经过必要的配置和交叉编译就行了。所以说,内核的定制和改写难度很大,一般的软件工程师和硬件工程师都很难胜任。

2)打补丁,然后配置内核,调出内核配置界面,选上某些选项或者去掉某些选项,配置选项非常多,而且某些选项之间有关联,所以说这一步比较有难度。下面列出一些配置项,每个配置项都可以选择Y(将该功能编译进内核)、N、M(编译成可以在需要时动态加载的模块)。

Code maturity level options(代码成熟度选项)

General setup(通用设置)

Networkong deveices(包括很多子选项dummy net driver support,PLIP support,SCSI device support等)

3)编译内核,用几个命令就可以编译内核了。#make clean,#make dep,#make zImage。

4)移植根文件系统,内核编译完之后,可以运行各种命令并支持各种功能的中央处理器,但是如果缺少了内存、硬盘等设备也不能正常运行。根文件系统中存放了Linux系统所需要得各种程序文件,没有这些文件内核无法正常工作。同样,要移植根文件系统需要清楚Linux的运行机制,比较麻烦。所以一般都使用Busybox这个工具。安装配置Busybox,向Busybox添加命令,构造根文件系统,制作根文件系统映像文件(形如initrd.gz)。

5)使用U-Boot制作、下载内核。U-Boot支持uImage格式的内核文件。启动内核,然后使用U-Boot加载根文件系统映像。

四、开发环境的建立

一般宿主机推荐用Red Hat9.0,需要宿主机在硬件上有标准串口、并口、网口;软件上具有目标板的Linux内核、ramdisk文件系统映像以及Bootloader。软件的更新通常使用串口或网口,最初的Bootloader烧写是通过JTAG进行的。

首先要在宿主机上建立交叉编译调试的开发环境,许多开发板配有光盘能实现自动安装。用minicom作为被开发目标板的终端,开发前要正确的配置minicom。然后配置TFTP(简单文件传输协议),用于在目标板和宿主机之间传输文件。配置NFS,以便终端机能共享宿主机的文件。

实验1 编译Bootloader

很简单。一种常见的Bootloader是PPCBoot,另一种是vivi。

实验2 编译Linux内核

用几个命令就可以编译内核文件,编译后就要配置,配置稍微繁琐一点。但是每个选项在网上都可以找到相应的配置方法。

实验3 制作文件系统及程序的烧写

实验4 烧写各部分到目标板

实验5 交叉编译并运行简单程序

打开minicom开启实验板电源,挂载实验板。编译C语言的命令形如:

/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -o HelloWorld HelloWorld.c

实验6 简单驱动程序的编写

编写一个简单字符设备的驱动程序。该程序非常简单,但是涉及到很多系统硬件的知识。if,for,switch,static,define这些关键字用得很多,也涉及到结构体,涉及到直接对地址的操作、位运算。涉及到物理设备,中断等一些知识。

其实,显而易见,驱动开发更靠近硬件一些,程序方面主要是熟练C语言就可以了。驱动开发的最大喜悦就是把物理设备给驱动起来的,并尽量使驱动不出问题,物理设备能够正常运行。

分享到:
评论

相关推荐

    嵌入式开发学习总结 嵌入式开发学习总结

    【目录】 一、shell命令 1、内建命令 2、外部命令 3、实用程序 4、用户程序 5、shell脚本 二、命令帮助文档 1、命令自身的帮助功能 2、man手册 3、在线帮助文档 三、分类介绍 (一)文件、目录操作...(九)其他命令

    嵌入式C 精华总结

    嵌入式C/C++ 精华总结!嵌入式程序员的面试宝典。宋宝华老师的精彩分析!

    嵌入式软件开发手册总结版

    嵌入式软件开发手册总结版 嵌入式开发语言学习的好资料 仅为自己收藏所用

    嵌入式技术开发总结及思考

    从事嵌入式开发一年了,有些感想跟大家谈谈。可能很多朋友会像我当初一样,为前途而烦恼,为不知道储备什么知识而苦恼,所以写点东西给这些朋友们提供参考。另外,也可鞭策自己,让自己看到自己的不足,认清以后的...

    怎样学习 ARM 嵌入式开发.ppt

    怎样学习 ARM 嵌入式开发?作者:李明。内容预览: 1)ARM 嵌入式开发领域包括什么,不包括什么 2)怎样学习 ARM 嵌入式开发 3)怎样进入一个陌生的村庄 4)专业词汇和所属主题领域 5)专业词汇举例 6)ARM 内核领域...

    嵌入式技术开发总结以及思考

    从事嵌入式开发一年了,有些感想跟大家谈谈。可能很多朋友会像我当初一样,为前途而烦恼,为不知道储备什么知识而苦恼,所以写点东西给这些朋友们提供参考。另外,也可鞭策自己,让自己看到自己的不足,认清以后的...

    嵌入式开发入门 ppt

    是专业教师多年开发的经验总结,很有学习和利于那个价值,特跟大家分享下,共同为我国的嵌入式事业贡献力量。

    常用嵌入式英文缩写总结

    ARM&Linux;嵌入式开发常用的一些英文缩写总结,希望能帮助到有需要的同学

    嵌入式基本知识总结

    嵌入式基本知识总结,用全国计算机三级嵌入式开发技术的考试

    嵌入式开发学习的十三大法则

    嵌入式开发学习是一个不断积累和总结的过程,来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的十三大法则,大家不妨参考一下。

    嵌入式课程设计 嵌入式开发技术

    程序设计任务:综合运用嵌入式开发技术,设计和开发基于多任务的时钟系统。在ARM开发板上,采用多种形式显示系统时间,在数码管显示系统时间,同时在文本框控件显示,在LCD显示屏动态地绘制时钟。此外,利用开发板的...

    嵌入式开发学习的十三法则

    嵌入式开发学习是一个不断积累和总结的过程,来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的十三法则,大家不妨参考一下

    几道常见的嵌入式开发C语言面试题

    总结几道常见的嵌入式开发C语言面试题,内部资料,非常有用。。总结几道常见的嵌入式开发C语言面试题,内部资料,非常有用

    嵌入式课堂总结

    西南交大软件工程嵌入式开发课程总结,考试利器,oye~

    嵌入式C开发经验总结

    全部整理软件出自于我的CSDN博客: http://blog.csdn.net/morixinguan

    Linux嵌入式开发+C语言+Makefile+网络编程+驱动开发+系统移植

    文档的框架部分内容已经填充完整,但是我总结好的并不是大家的,自己总结的才是真正属于自己的知识,所以另一部分需要大家在学习过程中填充完整,当你填充完整的时候,相信你已经是嵌入式开发的大神了,加油!

    dsp_arm嵌入式开发心得

    这是本人,在dsp和arm上编程时的一些心得体会和经验总结,具有一定的参考价值。

    学习嵌入式系统开发心得

    学习嵌入式系统开发心得,重点结合作者自身经验,谈嵌入式系统学习经验

    嵌入式经验总结

    嵌入式经验总结软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积功耗,严格要求的专用计算机系统。

    ubuntu Qt ARM 移值等的项目总结

    个人的嵌入式开发总结,平台ubuntu+QT+ok210开发板

Global site tag (gtag.js) - Google Analytics