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

个人认为,在中、高级阶段,偏硬莫非就是一种知识活儿,而偏软莫非就是一种体力活儿……只有到达专家阶段才能够有所突破。对比一下培训机构的软件开发和硬件开发的培训费用就知道了,一般的软件培训(Java/C++/PHP/C#),收费大概是一个月3000,强调是“一个月”,一般的培训都是2~6个月,所以总费用少则几千,多则上万。而嵌入式的培训费则是按天计算,1天大概500,强调是“1天”,一般的培训是一周,也有培训半年的,但是费用也相当高!由此可见,嵌入式的课程含金量很高。软件开发,特别是网站开发,比嵌入式辛苦多了。

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

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

嵌入式开发总结

一、基础知识

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

ARM公司(原名Advanced RISC Machine),主要是研发ARM系列微处理器(出售IP,即知识产权),目前全世界有几十家著名的半导体公司都使用ARM公司的授权,包括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语言就可以了。驱动开发的最大喜悦就是把物理设备给驱动起来的,并尽量使驱动不出问题,物理设备能够正常运行。

ARM嵌入式开发总结相关推荐

  1. ARM嵌入式开发板推荐

    arm嵌入式主板具有低成本.高性能.低功耗的特点,是一个嵌入在设备里面做控制.数据处理使用的CPU板,承担着"大脑"的角色,主要是作为工控主板使用.短短几年,ARM嵌入式的异军突起 ...

  2. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

  3. ARM嵌入式开发学习,粤嵌提出合理的学习方向

    学习ARM嵌入式有很多途径,一部分人通过自学,还有一部分人通过参加相关ARM嵌入式培训班学习.下面是粤嵌主要针对自学人群提出的关于学习ARM嵌入式开发的一点建议,希望对大家有所帮助! 学习ARM,从硬 ...

  4. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

  5. CooCox工具简介——免费和开源的ARM嵌入式开发工具

    CooCox成立于2009年初,致力于为ARM开发者提供免费和开源的嵌入式开发工具.CooCox开发了大量基于网络的组件,让嵌入式开发如搭积木般简单.CooCox希望能和所有ARM爱好者一起搭建一个贡 ...

  6. ARM嵌入式开发板学习路线指引

    如何入门嵌入式?嵌入式开发学习方法步骤  如何入门嵌入式?嵌入式开发学习路线指引  嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android.  平台:Cortex-A9 ...

  7. 构建ARM嵌入式开发环境

    工程目标:在KeilMDK环境下开发AMR嵌入式系统 主机环境:window 7 一,安装KeilMDK v4.20 [1]下载keiMDK v4.20,解压 先安装mdk420.exe,在mkd42 ...

  8. ARM嵌入式开发1:keil软件安装

    1 keil简介 Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商.Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的 ...

  9. 移植shellinabox到ARM嵌入式开发板

    一 下载源代码,代码链接 http://shellinabox.googlecode.com/files/shellinabox-2.14.tar.gz 或者 https://download.csd ...

最新文章

  1. 资源 | 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)
  2. MacOS运行多个实例
  3. 中国船级社船舶设计审核云平台
  4. MYSQL重置ROOT密码
  5. linux 函数 文件校验,Linux中的文件效验命令
  6. 安徽省2018计算机一级9月报名,2018年9月份全国计算机等级考试安徽财经大学考点报名通知...
  7. JavaScript学习(三十九)—对象中内容的操作
  8. axios使用post请求服务端不能获取参数的解决方法
  9. 树莓派python编程小车_树莓派小车教程(三)——软件代码
  10. java jdbc mysql util_Java,Scala:JDBCUtil,MySqlUtil,PhoenixJDBC
  11. ruby DBI安装使用指南
  12. 活动回顾 |阿里云MVP Tech Show 第九期宁波站— 物联网一站式开发
  13. HP-EVA4400故障导致的oracle数据库丢失的恢复过程
  14. android apktool使用教程,Apktool 使用教程
  15. python成语接龙代码_实现成语接龙(Python)
  16. 有利可图的NFT,NA公链(Nirvana Chain)NAC公链怎么面对高额Gas费的?
  17. (原创) EXCEL集成工具箱V8.0 闪亮登场 (EXCEL插件)
  18. 查询邮件传输日志(exchange2016)
  19. 如何用word制作英语答题卡_最新初中英语考试答题卡(可编辑WORD版)教程文件
  20. 背部肌群介绍:肌肉图示和英文名称

热门文章

  1. 网管型工业交换机冗余功能介绍
  2. JAVA 实现《五子棋》游戏|CSDN创作打卡
  3. 观察力训练(福尔摩斯演绎法)
  4. 了解公司企业:Intuit
  5. 管理驾驶舱 or 领导驾驶舱
  6. 如何将ubuntu配置为路由器
  7. 我的世界手机版虚拟人生服务器,我的世界大型虚拟人生整合包
  8. 电路设计_光耦的主要参数
  9. html编辑器渗透,渗透测试之编辑器漏洞与旁注、跨目录、跨库、CDN绕过
  10. componentWillReceiveProps为什么deprecated