发布时间:2024-09-14
浏览次数:0
嵌入式系统是一个很宽泛的定义,从技术角度可以分为硬件层、驱动层、系统层、应用层。常用的嵌入式操作系统有Linux、WIN CE、、QNX、OSE等。目前Linux的资料最多,所以下面以Linux为例。
01.安装虚拟机及Linux系统
大多数人的电脑都会安装操作系统,如果想在上面运行其他系统sublime text ubuntu,就得安装虚拟机了。目前主流的虚拟机有、、、等,随便选一个安装即可。然后去官网下载个人版Linux镜像(.iso文件),在虚拟机里安装。下面是主流Linux系统的官网链接:、、、、、suse。如果你没用过Linux,建议使用。因为是收费的,而且改名为RHEL,这里就不介绍了。
02. 学习使用常见的Linux命令
这里要改掉点鼠标的习惯,在Linux下做事情都要用命令行。另外在Linux下下载软件的时候,不用百度下载,用Linux自带的包管理工具(如:apt-get、dnf、rpm等),如果用的话要修改软件源(下载软件的网站),因为国外的源比较慢,百度有详细的使用说明。接下来要学会最基本的命令,如:ls、cd、find、grep、ps、diff、fdisk等,照着教材多操作几遍,就能学会了。不需要很深的理论知识,不需要掌握所有的命令,也不需要记住所有的命令选项,用到的时候查查就行,有时间的话可以去社区或者Linux公社看看。
03.学习使用常见的Linux工具
1.编辑器(写代码必备)。有gedit,vim,emacs等,建议学习vim。
2. gcc 和 gdb。gcc 是一个编译器,而 gdb 是一个代码调试器。
3.这个不像VC++6.0,点一下鼠标就能帮你编译,在Linux下,必须用make和make工具才能编译,make和make可以自动生成。
4. ssh、tftp。如果你的ARM开发板上有web服务器,可以使用这些工具来访问。其中,建议使用ssh工具或者。
5、Samba.如果你想要使用Linux来交换数据,也可以搭建Samba服务器。
6.版本控制器。有svn,cvs,git等。建议学习git。有了git,就不用手动备份代码了。
04.学习编写shell脚本
实际工作中sublime text ubuntu,复杂的系统管理操作并不是一行一行敲命令就能搞定的,而是使用脚本(命令是基础)。脚本也是一种编程语言,只不过是解释型语言,相对于C/C++、C#、JAVA等高级语言来说,脚本要容易学得多(因为加入了语法糖)。Linux下,shell有很多种,比如bsh、bash、csh、tcsh、ksh、zsh等,一般学完bash,再学其他的也不迟,因为都差不多。另外bash语法比较奇特,很多符号(如:$#、$0、$?等)比较难记,不过也没必要刻意去死记硬背,留个印象就行,需要用的时候再查手册就行。这里重点说一下掌握正则表达式,如果有时间,建议再学一下脚本。它的语法比 bash 更简单,用途也更广泛。
05.学习Linux下的C编程
虽然学了bash能干很多事,但是驱动和内核开发还是用C语言,因为那时候系统还没起来,还不能用bash。另外C语言的执行效率比bash高,网络编程也经常用C语言开发。这里要掌握基本的文件操作,进程/线程控制等。我推荐《Linux环境C编程》、《UNIX环境高级编程》、《UNIX网络编程卷一》、《UNIX网络编程卷二》。这些教材可能有点难,但是请不要钻牛角尖,暂时不懂的就跳过,学完下一阶段的理论再回来看,之前不懂的就变得容易了。
06. 加强理论知识
因为有些人冒充嵌入式硬件工程师,但其实嵌入式硬件就是普通硬件工程师干的活,我们这里讨论的是软件,嵌入式就是以软件为主(薪资差别很大)。
1.单片机。如果不想学单片机,可以学计算机组成原理。
2.数据结构。主要掌握表和树,其中链表用于操作系统的调度算法。
3.操作系统。都很重要,必须深入学习,才能更全面地了解Linux。
4. 编译器原理。有时间的话,最好多看一看。没时间的话,也学一下。对提高编程水平很有帮助。
5. 数据库。除了基本的数据库理论之外,你还必须掌握或。
6. ARM架构。本章主要介绍ARM的架构和指令集,在移植uboot和驱动的时候会用到。如果不做这两项工作的话,可以不用学。
7、计算机网络基础。开发中用到的TCP、UDP、SSH、TFTP、HTTP、RTP都会涉及到网络相关的知识,也就是编程。
8、接口应用。如:串口、IIC、SPI、1-wire、USB、HDMI、CAN、IIS、PCIE、蓝牙、陀螺仪等。
在学习完上面的理论之后,再回顾一下Linux下的C编程,你会收获更多。
后面的第七、八、九阶段,大家使用开发板自带的就可以了,暂时不用研究。
07.文件系统
在学习操作系统原理的时候,文件系统已经介绍过了,没必要深究文件系统的具体算法,只要了解它的特性,然后学会使用它就行了。例如:NFS、FAT32、NTFS、ext4、ZFS等。
08. 内核修剪
一般对于初学者来说,可以先掌握内核裁剪(具体工作就是填写几个选项)。裁剪只是将内核不必要的功能移除,以减少代码大小。这里只需要熟悉内核的所有功能选项即可。如果裁剪还是不能满足要求,那就得阅读内核源码,修改内核了。我推荐《Linux入门》和《Linux阅读内核源码》,推荐还是。
09. 驱动程序开发
由于系统还没起来,驱动能用的API还不多(部分是内核API,如:等),很多函数还是要自己写。其中临界资源会经常被访问,所以自旋锁、睡眠锁一定要掌握。另外,驱动出了问题,整个系统就挂了,所以还必须掌握各种调试驱动的方法,如:goto语句、日志系统、KDB等。接下来还要熟悉字符设备和块设备的驱动。推荐《小白的博客》和《Linux》(中文版不推荐)。
10.移植
单片机也有,keil C下的.a51,主要用于初始化。嗯,ARM上功能也差不多,也不是那么重要,所以放在最后。常用的有vivi和uboot。一般学习uboot主要还是掌握uboot的启动流程和移植。经过前面的学习,uboot对你来说会非常轻松。一般你只需要学会如何使用uboot或者使用已经移植好的uboot,不需要深入研究。建议看uboot自带的帮助文档和《深入理解》。阅读uboot源码,推荐还是。
11.图形界面开发
常用的GUI图形库有:GTK++、QT、JAVA、等。如果有C++基础,建议学QT,如果不懂C++,建议学JAVA。GUI开发初期不需要用开发板,2440跑QT就很合适。如果要跑JAVA或者,建议换开发板,可以考虑换开发板,另外也可以用自带的开发板来开发图形界面。
因为系统在Linux基础上封装了一层API,所以如果要开发驱动,必须掌握Linux(上面前十个阶段)。如果只是开发 App,只需要使用或者配合模拟器(最好是手机),不需要学习Linux或者开发板。
在你做过几个GUI项目之后,学习UML和设计模式,这将大大提升你的代码架构能力。
12. Web 开发
有时候需要在ARM板上搭建一个网页服务器,这里就得学习HTML、CSS、XML、Ajax、PHP等,看上去内容很多,其实也不多,因为这些语言都好用。初学者用Adobe做开发就可以了,入门之后,一本带浏览器的文本就够了(还要学习MVC模式)。另外还要会用bash或者写CGI程序,这样才能在网页上调用底层的C语言接口。我推荐《疯狂HTML 5/CSS3/讲义》。
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码