如何学习嵌入式软件开发?

如何学习嵌入式软件开发?,第1张

建议你还是参加培训吧,学习嵌入式的周期3-5个月,门槛较高,自学的话更是需要较强的学习能力和专业功底。相当来说走培训这条路可以快速熟悉并进入嵌入式这一行业。我现在一同学就去了一个叫东方赛富的参加嵌入式培训,据说在北京口碑是最好的,建议你查查看看,另附上嵌入式系统学习步骤,希望对你有所帮助。。。。
1、Linux 基础
安装Linux *** 作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux *** 作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux *** 作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器
2、Shell 编程基础
Shell简介 认识后台程序Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本 *** 作 熟悉Emacs的基本 *** 作 比较不同shell的区别 编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell脚本程序
3、Linux 下的 C 编程基础
linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优化 熟悉Linux系统下的开发环境 熟悉Gcc编译器 熟悉Makefile规则编写Hello,World程序 使用 make命令编译程序 编写带有一个循环的程序 调试一个有问题的程序
4、嵌入式系统开发基础
嵌入式系统概述 交叉编译 配置TFTP服务 配置NFS服务 下载Bootloader和内核 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作cross_gcc工具链 编译并下载U-boot 编译并下载Linux内核 编译并下载Linux应用程序
4、嵌入式系统移植
Linux内核代码 平台相关代码分析 ARM平台介绍 平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念 能够移植Linux内核移植Linux26内核到 ARM9开发板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用 配置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序
6、嵌入式系统中多进程程序设计
Linux系统进程概述 嵌入式系统的进程特点 进程 *** 作 守护进程 相关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序 sleep系统调用任务管理、同步与通信 Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序
7、嵌入式系统中多线程程序设计
线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序
8、嵌入式 Linux 网络编程
网络基础知识 嵌入式Linux中TCP/IP网络结构 socket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 PPP协议 GPRS 了解嵌入式Linux网络体系结构 能够进行嵌入式Linux环境下的socket 编程 熟悉UDP协议、PPP协议 熟悉GPRS 使用socket 编写代理服务器 使用socket 编写路由器 编写许可证服务器 指出TCP和UDP的优缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器
9、GUI 程序开发
GUI基础 嵌入式系统GUI类型 编译QT 进行QT开发熟悉嵌入式系统常用的GUI 能够进行QT编程使用QT编写“Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件
10、Linux 字符设备驱动程序
设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构 加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构 能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动 编写I/O驱动 分析一个看门狗驱动程序 对比Linux26内核与24内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解Linux块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序 分析一个文件系统 对比Linux26内核与24内核中块设备驱动的不同
11、文件系统
虚拟文件系统 文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化 MTD块设备的读写 *** 作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为 ARM9开发板添加 MTD支持 移植JFFS2文件系统 通过proc文件系统修改 *** 作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统

嵌入式硬件开发流程一般分为8 个阶段:
嵌入式产品的硬件形态各异,CPU 从简单的4 位/8 位单片机到32 位的ARM 处理器,以及其他专用IC。另外,依据产品的不同需求,外围电路也各不相同。每一次硬件开发过程,都需要依据实际的需求,考虑多方面的因素,选择最合适的方案来。
硬件阶段
1:硬件产品需求 和普通的嵌入式产品需求一样。
阶段1:
产品需求。
硬件阶段2:
硬件总体设计方案
一个硬件开发项目,它的需求可能来自很多方面,比如市场产品的需要或性能提升的要求等,因此,作为一个硬件设计人员,我们需要主动去了解各个方面的需求并分析,根据系统所要完成的功能,选择最合适的硬件方案。
在这一阶段,我们需要分析整个系统设计的可行性,包括方案中主要器件的可采购性,产品开发投入,项目开发周期预计,开发风险评估等,并针对开发过程中可能遇到的问题,提前选择应对方案,保证硬件的顺利完成。
硬件阶段3:
硬件电路原理图设计
在系统方案确定后,我们即可以开展相关的设计工作,原理设计主要包括系统总体设计和详细设计,最终产生详细的设计文档和硬件原理图。
原理设计和PCB 设计是设计人员最主要的两个工作之一,在原理设计过程中,我们需要规划硬件内部资源,如系统存储空间,以及各个外围电路模块的实现。另外,对系统主要的外围电路,如电源、复位等也需要仔细的考虑,在一些高速设计或特殊应用场合,还需要考虑EMC/EMI 等。
电源是保证硬件系统正常工作的基础,设计中要详细的分析:系统能够提供的电源输入;单板需要产生的电源输出;各个电源需要提供的电流大小;电源电路效率;各个电源能够允许的波动范围;整个电源系统需要的上电顺序等等。
为了系统稳定可靠的工作,复位电路的设计也非常重要,如何保证系统不会在外界干扰的情况下异常复位,如何保证在系统运行异常的时候能够及时复位,以及如何合理的复位,才能保证系统完整的复位后,这些也都是我们在原理设计的时候需要考虑的。
同样的,时钟电路的设计也是非常重要的一个方面,一个不好的时钟电路设计,可能会引起通信产品的数据丢包,产生大的EMI,甚至导致系统不稳定。
编者按:原理图设计中要有“拿来主义”!现在的芯片厂家一般都可以提供参考设计的原理图,所以要尽量的借助这些资源,在充分理解参考设计的基础上,做一些自己的发挥。
硬件阶段4:
PCB图设计
PCB 设计阶段,即是将原理图设计转化为实际的可加工的PCB 线路板,目前主流的PCB 设计软件有PADS,Candence 和Protel 几种。
PCB 设计,尤其是高速PCB,需要考虑EMC/EMI,阻抗控制,信号质量等,对PCB 设计人员的要求比较高。为了验证设计的PCB 是否符合要求,有的还需要进行PCB 仿真。并依据仿真结果调整PCB 的布局布线,完成整个的设计。
硬件阶段5:
PCB加工文件制作与PCB打样
PCB 绘制完成以后,在这一阶段,需要生成加工厂可识别的加工文件,即常说的光绘文件,将其交给加工厂打样PCB 空板。一般1~4 层板可以在一周内完成打样。
硬件阶段6:
硬件产品的焊接与调试
在拿到加工厂打样会的 PCB 空板以后,接下来我们,需要检查PCB 空板是否和我们设计预期一样,是否存在明显的短路或断痕,检查通过后,则需要将前期采购的元器件和PCB 空板交由生产厂家进行焊接(如果PCB 电路不复杂,为了加快速度,也可以直接手工焊接元器件)。
当PCB 已经焊接完成后,在调试PCB 之前,一定要先认真检查是否有可见的短路和管脚搭锡等故障,检查是否有元器件型号放置错误,第一脚放置错误,漏装配等问题,然后用万用表测量各个电源到地的电阻,以检查是否有短路,这样可以避免贸然上电后损坏单板。调试的过程中要有平和的心态,遇见问题是非常正常的,要做的就是多做比较和分析,逐步的排除可能的原因,直致最终调试成功。
在硬件调试过程中,需要经常使用到的调试工具有万用表和示波器,逻辑分析仪等,用于测试和观察板内信号电压和信号质量,信号时序是否满足要求。
硬件阶段7:
硬件产品测试
当硬件产品调试通过以后,需要对照产品产品的需求说明,一项一项进行测试,确认是否符合预期的要求,如果达不到要求,则需要对硬件产品进行调试和修改,直到符合产品需求文明(一般都以需求说明文档作为评判的一句,当然明显的需求说明错误除外)。
硬件阶段8:
硬件产品
最终开发的硬件成功。一个完整的,完成符合产品需求的硬件产品还不能说明一个成功的产品开发过程,我们还需要按照预定计划,准时高质量的完成。才是一个成功的产品开发过程。

1、打开控制面板,选择并进入“程序”,双击“打开或关闭Windows服务”,在d出的窗口中选择“Internet信息服务”下面所有地选项,点击确定后,开始更新服务。

2、更新完成后,打开浏览器,输入“>

3、当web服务器搭建成功后,我们下一步所要做的就是把我们开发的网站安装到Web服务器的目录中。一般情况下,当Web服务器安装完成后,会创建路径“%系统根目录%inetpub/>

4、设置防火墙,让局域网当其它计算机也能访问本地网站资源。具体方法:打开控制面板,选择“系统和安全”,点击“允许程序通过Windows防火墙”,在d出的对话框中勾选“万维网服务>

5、在局域网中其它计算机上,打开浏览器,输入 “>

扩展资料:

入门级服务器所连的终端比较有限(通常为20台左右),况且在稳定性、可扩展性以及容错冗余性能较差,仅适用于没有大型数据库数据交换、日常工作网络流量不大,无需长期不间断开机的小型企业。

不过要说明的一点就是目前有的比较大型的服务器开发、生产厂商在后面我们要讲的企业级服务器中也划分出几个档次,其中最低档的一个企业级服务器档次就是称之为"入门级企业级服务器",这里所讲的入门级并不是与我们上面所讲的"入门级"具有相同的含义,不过这种划分的还是比较少。

还有一点就是,这种服务器一般采用Intel的专用服务器CPU芯片,是基于Intel架构(俗称"IA结构")的,当然这并不是一种硬性的标准规定,而是由于服务器的应用层次需要和价位的限制。

成为嵌入式高手的技能清单和升级线路图
第一部分:Linux平台搭建与环境熟悉
了解linux系统;区分各种版本的Linux系统,以便于拓展 Linux视野。
1、Linux 简介;
2、Linux 系统的主要特点;
3、Linux 的组成;
4、主要的 Linux 版本;
5、嵌入式 Linux简介与发展
第二部分虚拟机安装和LINUX系统安装
1、虚拟机安装;
2、Linux系统的安装;
3、Linux系统的常用软件的安装;
4、Linux快速入门
5、 熟悉运用 Linux环境下,常用命令的 *** 作与系统设置,如常用的 Shell;掌握基本的 Shell 应用
第三部分:嵌入式LINUX环境搭建
1、 建立嵌入式 Linux开发环境
2、 熟悉嵌入式开发平台
3、 嵌入式 Linux开发工具
4、 Linux下的调试技巧
5、 MAKE工程管理器
6、 硬件环境的搭建;arm-linux-gcc与 gcc安装配置
第四部分:U-Boot
了解 U-Boot 的作用及工作流程;了解Bootloader 的代码结构、编译过程;移植U-Boot;掌握常用的U-Boot命令。
1、 Bootloader介绍
2、 u-boot工程介绍
3、 u-boot的编译使用
4、 u-boot源码分析
5、 u-boot资源分配
6、 配置编译u-boot
7、 u-boot移植过程
8、 u-boot常用命令 *** 作
9、 添加u-boot新命令
10、设置u-boot环境变量
11、 u-boot驱动添加如网卡:DM9000
第五部分:LINUX内核移植
熟悉内核的原码结构和kbuild Makefile语法;掌握和内核、驱动模块编译相关的原理及方法。
1、Linux内核介绍
2、Linux内核特点
3、Linux内核源代码结构
4、Linux内核选项解析
5、Linux内核编译链接
6、内核模块编译、使用方法

第六部分:LINUX根文件系统
1、busybox 包移植、编译
2、Linux跟文件系统制作过程
3、根文件系统介绍
4 nfs文件服务器系统搭建
第七部分:LINUX驱动开发
驱动开发是嵌入式Linux开发难度最高的内容,也是目前嵌入式行业最紧缺的人才之一。本课程介绍嵌入式Linux驱动开发相关概念及开发流程,了解驱动开发的关键技术点,重点讲解嵌入式Linux下常用接口驱动的编写方法,包括:
1、字符型LED驱动开发(GPIO口驱动)
2、按键驱动开发(中断驱动,在驱动中中断程序的编写,消息队列的应用
3、ADC驱动开发
4、网卡驱动开发
5、串口驱动开发
6、液晶屏(TFT彩屏驱动开发
7、触摸屏驱动+tslib(中间插件移植与设置),
8、USB驱动开发+USB无线网卡移植
9、IIS驱动开发+maplay移植与应用(mp3播放)+mplayer移植与应用(视频播放Mp4/广告机等播放)
10、SD驱动开发
11、RTC驱动开发
12、电源管理方法
第八部分:LINUX应用学习
嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。主要目标是精通嵌入式Linux下的程序设计,熟练掌握嵌入式Linux的开发环境、系统编程以及网络编程,熟悉C++、QT编程并且深刻体会整个嵌入式Linux项目开发流程,强化学员对Linux应用开发的能力。
1、Linux系统中的进程的概念,在应用程序中线程与父子进程的创建与应用
2、线程之间、进程之间的通信
3、进程间通信基本概念
4、管道(PIPE)
5、信号(SIGNAL)
6、内存映射(MAPPED MEMORY)
7、消息队列(MESSAGE QUEUE)
8、信号量(SEMAPHORE)
9、共享内存(SHARE MEMORY)@
10、tcPip协议在应用程序中的编程开发(SOCKET套接字编程开发)
101 ISO/OSI七层协议模型与IP网络四层模式
102TCP/IP协议簇
103 基于嵌入式Linux的TCP/IP网络结构
104 基于嵌入式Linux的SOCKET编程
105UDP与TCP的区别
106 UDP SERVER-CLIENT关系程
11、文件读写与存储
第九部分:QT移植与开发
了解嵌入式Linux下的几种常见GUI及其特点,重点能掌握QT的有关内容,具备QT程序设计能力。了解嵌入式数据库的配置与开发:
1 、嵌入式Linux GUI介绍
2、嵌入式QT开发包移植
3、QT介绍及其信号插槽机制
4、 QT图形界面编程技术
5、QT应用程序与Linux驱动的衔接
6、 QT在实际项目中具体应用
第十部分:无线通讯应用
1、无线wifi模块应用
2、3G模块应用
第十一分布:嵌入式系统应用程序,驱动程序调试
1、Linux基本工具调试使用。GDB,insight调试等
2、Linux应用程序的编程
3、嵌入式产品程序打包与发布
第十二部分:嵌入式项目综合调试,产品发布
了解真实项目的开发流程,掌握如何将所学知识应用到项目开发中。将模拟真实项目的管理过程,培养学员项目团队协同开发能力,项目文档编写能力和新知识的学习能力,为下一步就业做好知识上和心理上的充分准备。
嵌入式LININX开发第一学习阶段,主要打好基础,学好C编程,Linux系统编程。
1、C语言编程基础
2、嵌入式开发基础:Linux概述安装,shell命令,vim编辑器,GCC,GDB,Makefile,交叉开发环境构建
3、嵌入式Linux系统编程:shell编程,文件编程,串口编程,进程编程,线程编程,网络编程
4、嵌入式项目开发:数据采集控制系统,串口服务器
嵌入式LININX开发第二学习阶段,掌握ARM汇编程序设计,驱动程序设计。
1、ARM体系结构:ARM体系,ARM指令,Thumb指令,汇编程序设计,逻辑程序开发
2、Linux内核移植:bootloader,内核配置,文件系统
3、驱动程序开发:驱动架构模型,字符设备驱动,块设备驱动,网络驱动
4、嵌入式项目开发:智能家居系统,视频监控系统
嵌入式LININX开发第三学习阶段,掌握C++面向对象程序设计,Qt编程。
1、C++语言编程基础
2、QT编程开发:QT开发基础,QT布局与控件,QT绘图,QT事件,QT网络通信,QT数据库,QT移植
3、嵌入式项目开发:车载监控管理系统,工业能源管理系统

很多同学接触Linux不多,对Linux平台的开发更是一无所知。 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员,  掌握Linux是一种很重要的谋生资源与手段。

下来我将会结合自己的几年的个人开发经验,及对 Linux,更是类UNIX系统,及开源软件文化, 谈谈Linux的学习方法与学习中应该注意的一些事。

就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是一无所知。  所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进入入门的学习。

Linux入门是很简单的,问题是你是否有耐心,是否爱折腾,是否不排斥重装一类的大修。  没折腾可以说是学不好Linux的,鸟哥说过,要真正了解Linux的分区机制,对LVM使用相当熟练,  没有20次以上的Linux装机经验是积累不起来的,所以一定不要怕折腾。

由于大家之前都使用Windows,所以我也尽可能照顾这些“菜鸟”。 我的推荐,如果你第一次接触Linux,那么首先在虚拟机中尝试它。  
虚拟机我推荐Virtual Box,我并不主张使用VM,原因是VM是闭源的,并且是收费的,我不希望推动盗版。  
当然如果你的Money足够多,可以尝试VM,但我要说的是即使是VM,不一定就一定好。

付费的软件不一定好。

首先,Virtual  Box很小巧,Windows平台下安装包在80MB左右,而VM动辄600MB,虽然功能强大,但资源消耗也多,何况你的需求Virtual Box完全能够满足。  所以,还是自己选。学Linux必读-Linux学习之路

如何使用虚拟机,是你的事,这个我不教你,因为很简单,不会的话Google或Baidu都可以, 英文好的可以直接看官方文档。  现在介绍Linux发行版的知识。

正如你所见,Linux发行版并非Linux,Linux仅是指 *** 作系统的内核,作为科班出生的你不要让我解释, 我也没时间。

我推荐的发行版如下:

UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新应用,相对来说不太喜欢折腾的开发者。

Debian,相对UBUNTU难很多的发行版,突出特点是稳定与容易使用的包管理系统,缺点是企业支持不足,为社区开发驱动。

Arch,追逐时尚的开发者的首选,优点是包更新相当快,无缝升级,一次安装基本可以一直运作下去,没有如UBUNTU那样的版本概念,说的专业点叫滚动升级,保持你的系统一定是最新的。缺点显然易见,不稳定。同时安装配置相对Debian再麻烦点。

Gentoo,相对Arch再难点,考验使用者的综合水平,从系统安装到微调,内核编译都亲历亲为,是高手及黑客显示自己技术手段,按需配置符合自己要求的系统的首选。

Slackware与Gentoo类似。

CentOS,社区维护的RedHat的复刻版本,完全使用RedHat的源码重新编译生成,与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器,如网络管理,架站,那么CentOS是你的选择。

LFS,终极黑客显摆工具,完全从源代码安装,编译系统。安装前你得到的只有一份文档,你要做的就是照文档你的说明,一步步,一条条命令,一个个软件包的去构建你的Linux,完全由你自己控制,想要什么就是什么。如果你做出了LFS,证明你的Linux功底已经相当不错,如果你能拿LFS文档活学活用,再将Linux从源代码开始移植到嵌入式系统,我敢说中国的企业你可以混的很好。

1、Linux基础

你得挑一个适合你的系统,然后在虚拟机安装它,开始使用它。 如果你想快速学会Linux,我有一个建议就是忘记图形界面,不要想图形界面能不能提供你问题的答案,  而是满世界的去找,去问,如何用命令行解决你的问题。

在这个过程中,你最好能将Linux的命令掌握的不错,起码常用的命令得知道,同时建立了自己的知识库, 里面是你积累的各项知识。

2、Linux平台的C/C++开发,同时还有Bash脚本编程[JAVA]

再下个阶段,你需要学习的是Linux平台的C/C++开发,同时还有Bash脚本编程,如果你对Java兴趣很深还有Java。  
同样,建议你抛弃掉图形界面的IDE,从VIM开始,为什么是VIM,而不是Emacs,  
我无意挑起编辑器大战,但我觉得VIM适合初学者,适合手比较笨,脑袋比较慢的开发者。  
Emacs的键位太多,太复杂,我很畏惧。然后是GCC,Make,Eclipse(Java,C++或者)。

虽然将C++列在了Eclipse中,但我并不推荐用IDE开发C++,因为这不是Linux的文化, 容易让你忽略一些你应该注意的问题。  
IDE让你变懒,懒得跟猪一样。如果你对程序调试,测试工作很感兴趣,GDB也得学的很好,  
如果不是GDB也是必修课。这是开发的第一步,注意我并没有提过一句Linux系统API的内容,  
这个阶段也不要关心这个。你要做的就是积累经验,在Linux平台的开发经验。

我推荐的书如下:C语言程序设计。 C语言,白皮书当然更好。 C++推荐 C++ Primer Plus,  
Java我不喜欢,就不推荐了,附一个别人的书单:java 入门书籍。  
工具方面推荐VIM的官方手册,GCC中文文档,GDB中文文档,GNU开源软件开发指导(电子书),  
汇编语言程序设计(让你对库,链接,内嵌汇编,编译器优化选项有初步了解,不必深度)。

如果你这个阶段过不了就不必往下做了,这是底线,最基础的基础,否则离开,不要霍霍Linux开发。  不专业的Linux开发者作出的程序是与Linux文化或UNIX文化相背的,程序是走不远的, 不可能像Bash,VIM这些神品一样。 所以做不好干脆离开。

3、UNIX环境高级编程(作者英年早逝,第3版即将出版,稍等)

UNIX环境高级编程堪称神作,经典中的经典。

接下来进入Linux系统编程,不二选择,APUE,UNIX环境高级编程,一遍一遍的看,  看10遍都嫌少,如果你可以在大学将这本书翻烂,里面的内容都实践过,有作品,你口头表达能力够强, 你可以在面试时说服所有的考官。

(可能有点夸张,但APUE绝对是圣经一般的读物,即使是Windows程序员也从其中汲取养分, Google创始人的案头书籍,扎尔伯克的床头读物。)

这本书看完后你会对Linux系统编程有相当的了解,知道Linux与Windows平台间开发的差异在哪  
它们的优缺点在哪我的总结如下:做Windows平台开发,很苦,微软的系统API总在扩容,
想使用最新潮,最高效的功能,最适合当前流行系统的功能你必须时刻学习。  
Linux不是,Linux系统的核心API就100来个,记忆力好完全可以背下来。
而且经久不变,为什么不变,因为要同UNIX兼容,符合POSIX标准。  所以Linux平台的开发大多是专注于底层的或服务器编程。

这是其优点,当然图形是Linux的软肋,但我站在一个开发者的角度,我无所谓,因为命令行我也可以适应,  
如果有更好的图形界面我就当作恩赐吧。另外,Windows闭源,系统做了什么你更本不知道,  
永远被微软牵着鼻子跑,想想如果微软说Win8不支持QQ,那腾讯不得哭死。 而Linux完全开源,你不喜欢,可以自己改,只要你技术够。

另外,Windows虽然使用的人多,但使用场合单一,专注与桌面。 而Linux在各个方面都有发展,尤其在云计算,服务器软件,嵌入式领域,
 企业级应用上有广大前景,而且兼容性一流,由于支持POSIX可以无缝的运行在UNIX系统之上,
不管是苹果的Mac还是IBM的AS400系列,都是完全支持的。  
另外,Linux的开发环境支持也绝对是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就连C#也支持。而微软除Visual
 Stdio套件以外,都不怎么友好,不是吗

如果你看完APUE的感触有很多,希望验证你的某些想法或经验,推荐UNIX程序设计艺术, 世界顶级黑客将同你分享他的看法。

4、选择方向:网络,图形,嵌入式,设备驱动

网络方向:服务器软件编写及高性能的并发程序编写

现在是时候做分流了。 大体上我分为四个方向:网络,图形,嵌入式,设备驱动。

如果选择网络,再细分,我对其他的不是他熟悉,只说服务器软件编写及高性能的并发程序编写吧。 相对来说这是网络编程中技术含量最高的,也是底层的。  需要很多的经验,看很多的书,做很多的项目。

我的看法是以下面的顺序来看书:

APUE再深读 – 尤其是进程,线程,IPC,套接字

多核程序设计 - Pthread一定得吃透了,你很NB

UNIX网络编程 – 卷一,卷二

TCP/IP网络详解 – 卷一 再看上面两本书时就该看了

5TCP/IP 网络详解 – 卷二 我觉得看到卷二就差不多了,当然卷三看了更好,努力,争取看了

6Lig>

7Nginx源代码 –  相较于Apache,Nginx的源码较少,如果能看个大致,很NB。看源代码主要是要学习里面的套接字编程及并发控制,想想都激动。如果你有这些本事,可以试着往暴雪投简历,为他们写服务器后台,想一想全球的魔兽都运行在你的服务器软件上。

Linux内核 TCP/IP协议栈 – 深入了解TCP/IP的实现

如果你还喜欢驱动程序设计,可以看看更底层的协议,如链路层的,写什么路由器,网卡, 网络设备的驱动及嵌入式系统软件应该也不成问题了。

当然一般的网络公司,就算百度级别的也该毫不犹豫的雇用你。 只是看后面这些书需要时间与经验,所以35岁以前办到吧!跳槽到给你未来的地方!

图形方向,我觉得图形方向也是很有前途的,以下几个方面。

Opengl的工业及游戏开发,国外较成熟。

影视动画特效,如皮克斯,也是国外较成熟。

GPU计算技术,可以应用在浏览器网页渲染上,GPU计算资源利用上,由于开源的原因,有很多的文档程序可以参考。如果能进火狐开发,或google做浏览器开发,应该会很好  。

嵌入式方向:嵌入式方向没说的,Linux很重要。

掌握多个架构,不仅X86的,ARM的,单片机什么的也必须得懂。 硬件不懂我预见你会死在半路上,我也想走嵌入式方向,但我觉得就学校教授嵌入式的方法,  我连学电子的那帮学生都竞争不过。 奉劝大家,一定得懂硬件再去做,如果走到嵌入式应用开发,只能祝你好运,  不要碰上像Nokia,Hp这样的公司,否则你会很惨的。

驱动程序设计:软件开发周期是很长的,硬件不同,很快。 每个月诞生那么多的新硬件,如何让他们在Linux上工作起来,这是你的工作。  
由于Linux的兼容性很好,如果不是太低层的驱动,基本C语言就可以搞定,系统架构的影响不大,
因为有系统支持,你可能做些许更改就可以在ARM上使用PC的硬件了,  所以做硬件驱动开发不像嵌入式,对硬件知识的要求很高。

可以从事的方向也很多,如家电啊,特别是如索尼,日立,希捷,富士康这样的厂子,很稀缺的。

集成电路是芯片开发的基础,芯片就是由许多集成电路组成的,通过集成电路的运算,芯片才有处理数据的功能,而嵌入式系统是专门安装在芯片上用于人机交互的 *** 作界面,可以说,嵌入式系统能够让芯片的功能更好的为我们进行服务

能否部署tomcat取决于 *** 作系统,不取决于arm处理器。 *** 作系统必须能够安装java-jdk才行。所以如果arm处理器的机器,运行的自此完整java的 *** 作系统,如linux、window,那么肯定能够安装tomcat,如果有些嵌入式系统用的精简的linux,就不支持java,当然就不能运行tomcat。常见的嵌入式服务器有lig>

一个系统设计完成以后,它不应该仅仅是一些源代码,还应该包括各种各样的开发文档

这对以后自己对系统的维护和升级都有很好的参考作用

一个系统开发完成,它究竟应该包含那些文档,这些文档一般是怎么完成的,应该包含哪些内容?这就是系统开发的规范化问题

系统开发的规范化不仅有利于自己,也有利于公司,更有利于新手

规范化的设计让工程师工作更高效,这已经是不用争论的事实

现在在大型软件工程开发方面,这已经做得相当好

但在单片机和嵌入式系统的开发方面,规范化的工作却有待我们共同探讨

在国内,一些公司的研发人员也有一种误导——快写代码,快让我看见功能,不要你做其他的,完成功能就好

这些都把我们的设计导入一种误区:大部分时间都在写代码,改代码

嵌入式实时系统复杂度的提高,设计工程师在定义和分析系统初始要求时必须认真考虑软硬件的协同关系

通常设计工程师还必须权衡系统的灵活性、速度、成本、计划和可用工具之间的关系

本文打算描述嵌入式系统和实时系统的关键特性,并探讨在选择或开发硬件和软件组件的基础上开发高效嵌入式系统的解决方案,同时详细说明嵌入式系统和实时系统开发所特有的关键工艺技术

我所知的realtime-uml的设计软件:TNI公司的Embedded,Rational:RoseRTiLogix::Artisan:Tau

TNI公司的Embedded全流程解决方案,涵盖了整个嵌入式控制软件设计的全部过程:从用户需求、规格说明、设计、代码生成、仿真校验直到验收

在设计的最初阶段使用可执行的(形式化的)、可视化的规格说明书和用户进行沟通,消除设计人员和用户之间的歧义

利用仿真对设计进行校验测试,并在整个设计过程中进行递进式的校验,在设备安装之前发现可能存在的大量设计错误和问题,大大缩短现场调试的时间支持功能性设计,图形化IEC61131-3语言,符合EN50128安全标准重复使用设计自动生成设计文档容易使用,快速建模为各种软、硬件平台自动生成C代ROSE进行分析设计RoseRT是Rational在收购objecttime以后的推出的,该工具主要是基于一个叫做ROOM的模式,所有可执行

其好坏我也感受不抬出来

(ilogix的道先生对ROOM不太赞同)RoseRT的界面感觉比较复杂,代码生成也可以,但效率无法评价

仅提供了系统的动态和静态模型文档

Rhapsody目前国外好多大公司都是用Rhapsody进行嵌入系统的建模,进行软件设计的

Rhapsody是一个模型驱动的开发环境,它以UML2

0为基础,使大小不同的项目都能够通过可视化建模的方法分析、设计、实现和测试自己的工作,构建和配置实时嵌入式应用

Rhapsody专为嵌入式市场的特殊需求设计和优化,包括实时系统的行为语义,实时 *** 作系统的支持,无 *** 作系统的实时应用支持,遗产代码的逆向工程、设计级的调试、高效的代码自动生成(C、C、Ada、Java)和文档自动生成等

很不错的工具,可以把UML图直接转换成C或C代码

但它也会在系统中引入它的一个程序框架,用以支持顺序图、状态图的运行、调式和仿真

它带来的好处显而易见,但同时,它对很多嵌入式应用又形成阻力

例如,如果你新增功能是在原来的已有的过程式软件包上打个补丁,新的框架和原系统的怎么配合?那么你得真正消化和吸收这个附加的框架,这个难度应该不底于探索MFC结构

对于一个完全新的项目,Rhapsody很不错

对于扩功能打补丁的项目,三思呀

不知道RoseReal-Time在这方面的表显如何?Rhapsody有很多diagrams,设计人员直接通过画图,codegeneration就生成优质代码,很有意思

Rhapsody真正把开发人员与设计人员区别开来,这就要求设计人员完全按照软件工程思想来实施,这对项目无疑是个很好的维护可以有N多的OSadapter,方便移植

总的来说对于开发上层应用的项目来说


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/13245865.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存