我读的是通信工程专业,现在想学习Linux、但是没有一点基础,该如何去

嵌入式小弟我该怎么继续,请大家进来看看,指点一下
&来源:读书人网&【读书人网():综合教育门户网站】
嵌入式我该如何继续,请大家进来看看,指点一下学习了4个月,这段时间的学习伴随着无数的困惑与迷茫,走的非常
嵌入式我该如何继续,请大家进来看看,指点一下学习了4个月,这段时间的学习伴随着无数的困惑与迷茫,走的非常艰难且缓慢,所以现在有许多问题想请教一下各位前辈,请大家一定要帮帮我&&&&&首先说一下这5个月的学习吧。&&&&1.对于arm,对于linux,都是从零开始,这样自学起来真的很辛苦,也很慢。买了一块arm11的板子后,学了gpio,然后是中断,定时器,再串口。按照那些培训学校的课程安排,接下来应该是触摸屏,我没有接触过,也没什么资料,所以对于裸机这块就停这了。&&&&2.看了一下《arm体系结构与编程》,收获不大,熟悉了arm汇编,也写了几个小程序,不过现在又忘的差不多了。&&&&3.然后我直接跳到linux了,花了一段时间熟悉了基本命令,操作,shell。然后,粗略看了一下《linux程序设计》,没有写过什么综合性的程序,也感觉收获不大&&&&&4.看了《linux设备驱动程序》前半,会点字符驱动,中断之类的,依然收获不大。&&&&&5.看了一下《深入理解linux内核》,迷迷糊糊,谈不上收获&&&&&&总之,这5个月我感觉没学什么东西,学习有点凌乱,各方面都是了解了一点皮毛,没有深入,学了这块,那里又忘了,唉&&现在我在做以及准备做的:&&&&&&1.正在看《Unix环境高级编程》,讲的还是那些东西,只是细化了很多,但是我不知道怎么样深入学习。&我感觉这样学下来还是不能实用,没有把知识点综合起来,但我不知道怎样去做。&&&&&2.然后我准备继续看《linux设备驱动程序》(但是看起来很慢,很多东西不懂)&&&&&3.我还想复习一下模电,数电,感觉上课没学什么&&&&&4.对于c语言,现在基本的程序没问题,但是没做过什么项目,也不知道该怎么深入了,我有没有必要再学一下数据结构与算法,我现在写的程序这些用的很少,看了一下,感觉有点难,估计会很费时间&&&&&5.想自己移植一下uboot,可是完全不知改怎么下手,照着别人的做感觉没什么用&&&&&6.然后我不知道什么时候才能顺畅一点的学习linux内核&以上这些都要做的话,我感觉时间安排不过来了,我也不知道该怎么安排,孰轻孰重,有点分辨不清而且学习进度好慢,感觉自己像个单核cpu,这么多线程调度不过来,似乎要阻塞了种种疑问,还需要前辈们给点指示啊&&另外,开学后两个月就要实习了,我这水平能做什么&[解决办法]哥们,我也是自学的,是国嵌的视频,电驴上有,可以下载看看[解决办法]刚开始都是挺难的&慢慢来&啃一下内核代码吧&结合官方资料理解下[解决办法]有说要从上而下,先从应用程序开始入手。你玩的太多了。[解决办法]以前看到一个前辈写的,可能有用------------------------------------------------------------------------------------------------------------------------------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,chi&dazzle,World程序&使用&make命令编译程序&编写带有一个循环的程序&调试一个有问题的程序&4、嵌入式系统开发基础&嵌入式系统概述&交叉编译&配置TFTP服务&配置NFS服务&下载Bootloader和内核&嵌入式Linux应用流程熟悉嵌入式系统概念以及开发流程&建立嵌入式系统开发环境制作cross_gcc工具链&编译并下载U-boot&编译并下载Linux内核&编译并下载Linux应用程序&4、嵌入式系统移植&Linux内核代码&平台相关代码分析&ARM平台介绍&平台移植的关键技术&移植Linux内核到&ARM平台&了解移植的概念&能够移植Linux内核移植Linux2.6内核到&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驱动&分析一个看门狗驱动程序&对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux&块设备驱动程序块设备驱动程序工作原理&典型的块设备驱动程序分析&块设备的读写请求队列了解Linux块设备驱动程序结构&能够编写简单的块设备驱动程序比较字符设备与块设备的异同&编写MMC卡驱动程序&分析一个文件系统&对比Linux2.6内核与2.4内核中块设备驱动的不同&11、文件系统&虚拟文件系统&文件系统的建立&ramfs内存文件系统&proc文件系统&devfs&文件系统&MTD技术简介&MTD块设备初始化&MTD块设备的读写操作了解Linux系统的文件系统&了解嵌入式Linux的文件系统&了解MTD技术&能够编写简单的文件系统为&ARM9开发板添加&MTD支持&移植JFFS2文件系统&通过proc文件系统修改操作系统参数&分析romfs&文件系统源代码&创建一个cramfs&文件系统&&&二&&学习掌握嵌入&Linux&的开发与移植&现在非常流行。&&&各种学习文章与培训班,充斥书店&街头。&&&&笔者&也上了路,经历漫长的摸索,终于一日开窍,但的确&糟蹋了&很多&金钱与时间。&作为穷人,现写下自己的感受,供&好学寒士&参考。第一要点:&实验重于看书&(多编码,少翻书)一定首先搭建x86实验环境。用旧(周末电脑城抛售存货,有新的),搭建一套&实验环境。host主机:&一台PC机(能够跑redhat&linux,看问档&就可以了,配网卡与软驱)。target目标机:&一块旧PC主板,配一张网卡和一个软驱,电源。附件:&交*网线&,交*串口线够了,不会超过3千元(已经很满足了)。全部到&电脑城/网站&下载。先不管什么arm&ppc&mips,&以后看看文档吧。第二重点:GNU&C编译在PC&上安装&redhat&linux&包括&开发工具。熟悉linux&的配置命令。练习&linux&的&C&语言编程,多个程序的编译工程制作。无聊的话,将C语言的例程,编译十几个,熟悉GNU&编译器。www.gnu.org包括gcc&make&ld&objdump&ar&等&GNU&toolkit第三重点:realtime&linux&内核编程/加载到目标板运行。1。&下载&rt-linux&,或uclinux&或什么&非&redhat的linux&源码,一定&是包括,编译工程makefile,&并且for&x86&PC的。2。修改和配置程序,将&rtlinux的&标准&console口&改为串口,不是vga与键盘。&3。在redhat&linux&环境下,编译&这个&embedded&linux内核。用mkboot的这样程序(或按代码中工具,)&将编译好的内核执行文件&拷贝定位软盘引导区。4。用这张软盘引导在目标PC主板&。在PC主机的&串口终端上配置&PC主板目标机。&效果同&redhat&linux&terminal&console一样。以后越来月难,坚持。第四个重点&编译跑通网卡的驱动程序下载编译&你的网卡驱动源码跑通&主机与目标机的&网络通讯。不要太动头想,&ping&通就是了。第五个重点&用tftp&下载执行文件从&PC主机&到&目标机运行。第六个重点&GNU&GDB&远程在线调试(网口调试)第七个重点&实时内核学习/修改照文章/书&分析调试/破坏&内核的源码。主要是&调度/消息/存储/文件/进程/线程/互斥&等单独跑跑,&了解内核功能就是了。第八个重点&TCP/IP的学习下载一个&简单的web&server&(http&server)学习理解,并编译加载运行。将&PC主板目标机&看作网站服务器,然后在PC主机的网络浏难器中&访问这个&web&server.&有兴趣,把你的照片加载到目标机的&html网页中。www.zebra.org第九个重点&网卡驱动程序分析了解&PCI总线原理,尝试独立写点网卡驱动程序,过滤以太报文的处理。&跟踪处理&特殊的报文。第十个重点USB和&FLASH文件系统练习。(可以跳过)可以分析修改&USB与FLASH文件系统源码。一定要分析源码,上网查&FLASH的型号。第十一个重点&路由器实验。分析zebra方面的源码,再买一张网卡。尝试分析&NAT&RIP等协议,将你的PC板目标机,变成一台简单的路由器。以后的实验&需要根据&行业来,例如,mini-GUI&(图形编程),或&DVR&(硬盘录象机),或IP&Vedio&WebTV&服务器。可以玩好几年,当然最好找工作前,有针对地做实验。
一句话,动手修改编码,不要只看看。&&三&嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用开发目标:&(1)&掌握主流嵌入式微处理器的结构与原理(初步定为arm9)&(2)&必须掌握一个嵌入式操作系统&(初步定为uclinux或linux,版本待定)&(3)&必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。&从事嵌入式软件开发的好处是:&(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。&(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。&(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。&(4)兴趣所在,这是最主要的。&从事嵌入式软件开发的缺点是:&(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。&(2)这方面的企业数量要远少于企业计算类企业。&(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。&(4)平台依托强,换平台比较辛苦。&兴趣的由来:&1、成功观念不同,不虚度此生,就是我的成功。&2、喜欢思考,挑战。&3、喜欢C&C是一种能发挥思维极限的语言。关于C的精神的一些方面可以被概述成短句如下:&相信程序员。&不要阻止程序员做那些需要去做的。&保持语言短小精干。&一种方法做一个操作。&使得它运行的够快,尽管它并不能保证将是可移植的。&4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。&5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。&方法步骤:&1、基础知识:&目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。&科目:数字电路、组成原理、嵌入式微处理器结构。&汇编语言、C/C++、编译原理、离散数学。&数据结构和算法、操作系统、软件工程、网络、。&方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。&主攻书籍:the&c++&programming&language(一直没时间读)、数据结构-C2。&2、学习linux:&目的:深入掌握linux系统。&   方法:使用linux―〉linxu系统编程开发―〉驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。&主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。&3、学习嵌入式linux:&目的:掌握嵌入式处理器其及系统。&方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。&   (2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。&   (3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。&   主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。&4、深入学习:&   A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。&   B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。&   C、网络与信息:如加密技术,数字证书CA等。&   D、DSP技术:Digital&Signal&Process,DSP处理器通过硬件实现数字信号处理算法。&   说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。&   注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的。一定要理论结合实践。&   不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,、游戏、科幻电影。还有一些不愿意做但必须要做的!&   技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。&   嵌入式书籍推荐&   Linux基础&   1、《Linux与Unix&Shell&编程指南》&   C语言基础&   1、《C&Primer&Plus,5th&Edition》【美】Stephen&Prata着&   2、《The&C&Programming&Language,&2nd&Edition》【美】Brian&W.&Kernighan&David&M.&Rithie(K&&&R)着&   3、《Advanced&Programming&in&the&UNIX&Environment,2nd&Edition》(APUE)&   4、《嵌入式Linux应用程序开发详解》&   Linux内核&   1、《深入理解Linux内核》(第三版)&   2、《Linux内核源代码情景分析》毛德操&胡希明著&   研发方向&   1、《UNIX&Network&Programming》(UNP)&   2、《TCP/IP详解》&   3、《Linux内核编程》&   4、《Linux设备驱动开发》(LDD) &   5、《Linux高级程序设计》&杨宗德著   硬件基础&   1、《ARM体系结构与编程》杜春雷着&   2、S3C2410&Datasheet&   英语基础&   1、《计算机与通信专业英语》&   系统&   1、《嵌入式系统DD体系结构、编程与设计》&   2、《嵌入式系统DD采用公开源代码和StrongARM/Xscale处理器》毛德操&胡希明着&   3、《Building&Embedded&Linux&Systems》      4、《嵌入式ARM系统原理与实例开发》&杨宗德著   理论基础&   1、《算法导论》&   2、《数据结构(C语言版)》&   3、《计算机组织与体系结构?性能分析》&
   4、《深入理解计算机系统》【美】Randal&E.&Bryant&David&O''Hallaron着&   5、《操作系统:精髓与设计原理》&   6、《编译原理》&   7、《数据通信与》&   8、《数据压缩原理与应用》&   C语言书籍推荐&   1.&The&C&programming&language&《C程序设计语言》&   2.&Pointers&on&C&《C和指针》&   3.&C&traps&and&pitfalls&《C陷阱与缺陷》&   4.&Expert&C&Lanuage&《专家C编程》&   5.&Writing&Clean&Code&-----Microsoft&Techiniques&for&Developing&Bug-free&C&Programs&   《编程精粹--Microsoft&编写优质无错C程序秘诀》&   6.&Programming&Embedded&Systems&in&C&and&C++&《嵌入式系统编程》&   7.《C语言嵌入式系统编程修炼》&   8.《高质量C++/C编程指南》林锐&   尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。&&这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!!&四&嵌入式Linux学习的基本的原则是通学+专长。&&&&&&&通学,即了解该方向的相关领域,但是“通”不等于“泛”,对待学习应该举一反三,把握事物的本质。如果能用通用的思想去解决问题,那么才算学有小成。比如,五一学习Mark&Balch的《COMPLETE&DIGITAL&DESIGN》后,对嵌入式系统在上电之后,软硬件如何配合工作有了更深入的理解。虽然这本书不是介绍嵌入式系统,但是很多技术是通用的。有开放的思维,把握自己研究的中心,把其他领域的方法思想吸收过来为我所用,这样可以对研究中心有更为深入的认识。&&&&&&&专长,即研究中心。通学的目的在于打好基础,融会贯通。但是仅仅如此是不够的。因为通学不可能把每个方向都研究精深,人的精力毕竟是有限的嘛,所以要有自己感兴趣的方向,以此作为研究中心,深入深入再深入,成为该方向的专家。以通促专,提炼自己的思想,以开放的思维谋求最大的提升!&&&&&&&我选择的研究领域是嵌入式系统(ARM+Linux),在该领域有四种类型的工作:&&&&&1、系统设计&&&&&2、硬件设计&&&&&3、驱动开发及内核移植&&&&&4、应用开发&&&&&&&基于我目前的认识,研究中心是驱动开发及内核移植,争取以后做系统设计,成为嵌入式系统设计工程师。&&&&&&&嵌入式Linux学习分为三个阶段:&&&&&第一阶段:建立嵌入式Linux知识体系框架。&&&&&第二阶段:深入学习嵌入式Linux的基本技术。&&&&&第三阶段:精深专长。&&&&&&&这三个阶段可以交叉。第一阶段通过2006年暑假两个月的强化学习,已经完成。现在正在进行第二阶段的学习。这个阶段关注嵌入式Linux软件开发的基本技术,包括:JTAG的工作原理及其实现(以JFlash为主)、bootloader的原理及实现(以U-boot为主)、kernel移植与开发(尝试2.4.18、2.6.X)、FS制作(尝试ramdisk、cromfs等)、应用程序的移植(基本掌握开发)、调试和诊断技术。在这个阶段,同时打好硬件基础(掌握S3C2410)和软件基础(bash、C和基本的开发工具)。第三个阶段在读研期间,以研究OS原理和Linux内核源代码为主,与第二阶段交叉进行。&&&&&&&其实,每天进步一点点,把这一点点所学加到已经建立的知识体系框架中,日积月累,思想认识必定会有所提升。虽然都认可宁可断其一指,不可伤其十指,但是应该承认人的认识是有局限性的。比如学习A时,因缺乏实践等各方面原因,可能认识不深入,也许在学习B时突然认识到了。所以一定要举一反三,而且要反复学习。记住基础的技术,努力学习先进技术,不停止前进的脚步。&&五&【序】学习Linux开发近一年,由于我是实验室第一个从事这方面开发的,学习过程中遇到了很多问题,可是总是求师无门,只能一个人自己摸索,同时也充分利用了网络,参考了广大CSDN博友及相关论坛的帖子,在此表示感谢!&&嵌入式Linux的学习涵盖的范围比较广,下从bootloader,到内核移植、文件系统,中间的驱动开发,到上层的应用程序调试、开发环境等,变化莫测,经常是别人的能用自己的就有问题。&由于缺乏他人适当指点,自己在学习过程中也走了很多弯路,整个开发环境的搭建整了N久,更搞笑的是经常听说模块加载insmod,可连这个命令在主机还是ARM上用都没搞明白,那叫一个汗啊!大家勿笑,嵌入式Linux的初学者确实对交叉环境比较不懂,我是其一啊。&现在适逢好友小布丁要学习嵌入式Linux,就将近一年来的学习体会总结下,整理了一个总体的学习计划,希望给那些曾经像我一样彷徨的人一些帮助。后续将完善此文档,上传到个人空间上,先贴出目录。本人水平有限,不当之处,还请大家指正!&小布丁同学曾在我处于困境时一如既往的理解我支持我,给我信心给我鼓励,谢谢你,美丽开怀的小布丁,希望你能happy&and&fascinating&forever!&谨以此文献给我们永远可爱迷人的小布丁!&Sailor_foreverSeptember&3,&2007&*****************************************************************************&&&[解决办法]第一篇&Linux主机开发环境(15天)&1.1&Vmvare下Linux的安装(优先)1.2&Windows下从硬盘安装Linux(可选)1.3&Linux的基本命令及使用1.4&Linux的文件系统及与windows的文件共享1.5&GCC开发工具1.6&GDB调试1.7&Makefile编写1.8&主机端的模块编程1.9&简单应用程序&第二篇&ARM+Linux开发环境(7天)
&2.1&交叉开发环境介绍2.2&交叉编译器cross-tool2.3&配置主机开发环境2.3.1&配置超级终端minicom或hyperterminal或DNW2.3.2&配置TFTP网络服务2.3.3&配置NFS主机端网络服务&2.4&建立交叉开发环境&&&&&&&2.4.1配置NFS&ARM端网络服务&&&&&&&2.4.2&编译ARM-gdb&2.5&交叉调试应用程序2.6&ARM上的简单模块编程&第三篇&Linux系统bootlaoder移植(7天)3.1&Bootloader介绍3.2&u-boot命令及环境变量3.3&u-boot的编译配置3.4&u-boot源码分析3.5&u-boot移植过程&第四篇&Linux的内核移植(15天)4.1&配置编译Linux内核4.1.1&Linux内核源代码结构4.1.2&Linux内核编译选项解析4.1.3&&Linux内核编译链接4.2&&Linux启动过程源代码分析4.3&&Linux内核移植平台相关代码分析&第五篇&Linux的驱动编程(15天)5.1&Linux的设备管理5.2&Linux的驱动程序结构5.3&简单的字符设备驱动程序5.4&Linux内核模块的加载卸载5.5&Linux的打印调试方法5.6&字符设备的高级属性-中断5.6&常见的串口网口驱动分析&第六篇&文件系统制作(5天)6.1&Linux文件系统制作6.2&文件系统和存储设备的选择6.3&部署Ramdisk文件系统的过程&第七篇&Linux的高级应用编程(5天)[解决办法]先从应用学起吧,应用更易入门,也更容易找到成就感,一步步来![解决办法]如果你想做得好,可以普遍了解+重点突破基本了解电路计算机原理&&操作系统&软件数据结果编译原理&&&这些是基础,起指导作用结合自己的特长和项目,重点掌握你现在实际作的东西,有时间自己注意一下相关的东西。这样有重点,有目的的渐进发展。&都精通当然好,但一个人的精力毕竟有现。[解决办法]重质而不是量,学精一方面其他的自然会融汇贯通。[解决办法]楼主过于急于求成,一步步来吧,先从容易的入手,找着成就感就有信心了。通信工程专业是做什么的?对这个专业很迷茫?
通信工程专业是做什么的?对这个专业很迷茫?
(图片与本文无关)作者:李宇链接:/question//answer/来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。通信党路过,现身说法。介绍一下,本科时候985学校的通信工程,到现在工作满4年,在武汉一私企,14K月薪,这水平在很多北上广的程序猿眼中可能不算什么,但在武汉这个互联网二线城市里拿这个价我已经很满足了。当时选专业的时候觉得这名字蛮叼,通信工程,communication engineering,卧槽,带你装逼带你飞,毫不犹豫的跳坑了。结果四年下来,最大的感受就是,尼玛学的东西太多了,但是然并卵。。。我敢说,通信工程是所有工科学科中要学科目最多的一种,金工实习马列主义思想通识这些扯蛋的课就不说了,高等数学概率论线性代数这些理工科最基本的基础也不提了,但是我们尼玛还学化学!没错!大!学!化!学!你敢说这不是然并卵系列?!好在这门课趣味性强,考试也不难。但是大学物理就坑的一逼了。你可能会说大学物理也是基础呀,没错,是基础,但是以后的专业课基本用不到啊,而且巨尼玛难啊,什么动能角动量谐波热力学电场磁场光学电磁波,想想就头疼,而且要学整整两个学期,反正当时身边的同学们上课基本都是玩手机,是的,这就是985大学上物理课的风景。结果到考试的时候老师又在报复社会,班上基本一半以上都要补考,答主当年人品爆发,清晰的记得大物第一学期63,第二学期61,是不是很叼。大二的时候学了好多数学科目,复变函数、积分变换、离散数学等等,不得不说,这几门课还真得好好学,如果你想做通信理论,复变和积分必须学好,这是信号系统的基础,如果以后想搞软件,离散数学就必须扎实,问问现在CS的同学,算法才是优秀程序员与一般程序员的分水岭。答主也是毕业一两年后才悟出的,当年没重视这些,搞得现在还天天学数学,学弟学妹们吸取教训啊。到了大二下学期,专业课来了,尼玛又是巨多坑,硬件软件理论学了个遍,软件方面有C、C++、MFC、数据结构,硬件方面模电、数电、高频电路、EDA、DSP、单片机、通信电路、计算机组成原理、PCB电路板焊接,理论方面计算机网络、通信原理、信号与系统、离散信号处理、电磁场与电磁波(真正虐心)、数字图像处理数字语音处理(这两门好像是选修)。是的,你没看错!不要四年!不要三年!也不要两年!只要一年半的时间就能上这么多课程!还在犹豫什么,赶快拿起电话报名吧!冷静冷静,嗯。。这么多课程就压缩到一年半的时间学完,你觉得能学到什么?很多都是走马观花的上一遍,到了考试又要求老师指点江山,考完之后发觉只领略到了一点皮毛。现在是不是觉得然并卵?不过可以理解,通信工程本来就是一个很大的学科,是很多学科交叉的重灾区,是一个理论与实践紧密结合的典型科目,里面每一个方面都是可以独成一面的大学问,本科生也就只能这样走马观花似的教学了,不可能面面深入。这样做的好处是通信工程学生的接触面都很广,而且这样能帮助你发现自己的兴趣点,到底自己是适合软件,适合硬件,还是适合搞理论。毕业后我大部分同学都直接工作了,到现在做什么的都有(刚毕业那会还有成天玩六合彩赚了不少钱的人),但是真正搞技术的貌似不多了,销售、技术支持、跑工程的比较多,所以想要搞技术还必须得耐得住性子。工作的话看你自己擅长什么,就我自己的经历而言给学弟学妹们提供一些经验,能帮一些是一些吧,毕竟江湖险恶人心叵测社会不好混啊。如果你喜欢软件,可以选择以下方面:嵌入式软件,BSP驱动,通信协议,上层应用软件。简单的嵌入式软件的话就是单片机之类的,像什么51、STM32、AVR,一般都是做工业控制,搞这一类就必须对单片机的具体功能和实现特别熟悉,什么USART、I2C、PWM、DMA之类的都要信手拈来,而且要对芯片寄存器很熟悉,知道哪个功能配哪个寄存器,像SMT32这种提供外围设备驱动的还要对提供的固件库函数熟悉,运气好的话会碰到让你用单片机实现算法之类。但是这一类的话技术含量不是太高,因为毕竟知识点只有那么多,所以薪水不会太可观(当然特别厉害的除外),在武汉的话一般就是5K左右。所以一般搞单片机的都要往更深层次发展,就是裸板上跑跑操作系统,比如Linux或者VxWorks。只要上了操作系统,那内容可就多了,拿Linux来说,命令行要会用吧,系统编程要会写吧,网络编程要熟悉吧,GCC要会耍吧,Vim要会玩吧,操作系统的基础知识要熟悉吧,兴致来了兴许还要跑跑shell或者python之类的脚本文件,高级点的就要玩玩内核和驱动。个人建议通信工程的学生其实可以往驱动方面走,因为软硬件都懂,恰好驱动就是软硬结合的一个方面,而且一个产品中驱动如果做成熟之后就不用经常变了,我现在的项目组里面那几个做BSP的哥们儿就是立项之后那一段时间忙死,但是现在都是让我们羡慕嫉妒恨的对象,每天准时乐呵乐呵下班。但是驱动这条路学习曲线很陡,操作系统知识必须烂熟于心,内核代码也要好好研究,相关的硬件也要懂(数电必须懂,模电的话看个人造化),还时不时来个芯片让你驱动,那就还要去研究相干芯片的datasheet。但是学出来就好了,因为底层的知识变化不会那么快,所以做驱动的不会像做手机软件的整天加班成狗。如果VxWorks功底好,那工资不是一般的高。通信协议,咩哈哈,答主感触颇深,因为就是靠这个薪水基本一年翻一番。可能是运气好,当时毕业的时候进了MPLS协议组(不懂的同学可以查下),这个协议很重要,现在电信联通的核心网里都用,但是做的人比较少,市场供不应求,恰好几年来工作的时候都是做这方面的协议,什么LDP、RSVP、L2 VPN、OAM之类的都懂,因此找工作可以放心跟别人谈价钱。这是我的经历,但是还有很多协议啊,像什么OSPF、ISIS、BGP等等,这些协议的RFC文档都是一百多页,光把协议看懂都要花不少时间(RFC文档都是全英文,所以英文必须要好,切记切记!),更不用说编码实现了。不过还好,现在大公司里基本上都会买别人成熟的代码,只会让你维护,不会从头开始写。这些协议只要精通其中某一个,你都会成为通信市场上抢手的人才,因为实在是太重要了。但是搞协议有很多短处,其中最大的一个就是方向面特窄,到最后只会这一个协议,对整个产品的架构能力不会提高,而且都是买的成熟代码,编码能力不会得到很大的提升,所以你如果以后想自己创业的话就最好不要选协议,或者就要在业余时间多下点功夫学东西。上层应用软件的话就不多说了,iOS,安卓,做好了工资高得离谱,但是数学必须要好,数据结构算法什么的必须烂熟于心。看看那些BAT的面试不都是问算法题么。硬件方面不太懂,不做这一块,如果想做硬件的话,最基本的像模拟电路、数字电路、PCB布线等等必须要好。现在不是开源硬件挺火的么,想做硬件的同学们可以去看看。理论的话可就深了,信号与系统、离散信号处理、数字图像处理、数字语音处理、通信系统集成等等,这些都是高大上的理论知识,研究透了成了大牛了基本不缺银子,而且市场需求比较广,比如美图的图像处理、微信的摇一摇歌曲识别功能,这里面就多少信号与系统的知识。想从事理论的话最好去读研读博,同时基础数学必须要好,复变函数、积分变换、微积分、概率论、模式识别这一类的课程很重要。同时也要加强自己的编程能力,因为光会理论不行,还要理论与实践相结合,C语言要会,MATLAB要会玩,C++最好也要会,因为老外喜欢用C++封装功能。发现写了好多。。。不过这都是一个通信工程过来人的感受,如果能给学弟学妹们有所帮助我就已经感激涕零了。是的,我们要学的课程是很多,但是只要你认真学,并且在某一个方面研究的有深度,你就是一个通信市场的人才,而且是跨市场的人才,我们不仅可以做硬件,还能做软件,学CS的是不是羡嫉恨?嘿嘿。但是,学习是无止境的,刚毕业后你会发现学校里的东西太不够用了,因此必须不断的学习,不断的充实,这样才能保持自己不仅是在在通信市场,而且是在整个IT市场的竞争力。always stay hungry stay foolish,这是一个通信人应有的工作和生活态度。----------------------追加------------------看来知乎的通信子弟还不少嘛,来来来,挨个握个爪很多同学问到以后的就业方向,那我就我所经历和看到的情况给大家列出一些通信行业常见而且吃得香的岗位,还没毕业的同学可以参考下。软件方面:1、嵌入式软件工程师。这算是最大的一个种类了,常见的就是基于SoC系统来实现某些具体功能,常见的芯片有51、ARM9、基于Cortex-M、基于MIPS的SoC系列等等,基本上都是基于硬件工程师设计的板子上进行系统开发工作,这里面的种类太多了,只要是负责编码的都属于这一块。一般用C,有些可能还会用到C++,所以想从事这方面工作的同学C语言功底一定要扎实。2、驱动工程师。这是一个需要付出大量努力进行学习的工种,但是学好了一定吃得香。驱动,顾名思义就是要通过软件来让板子上的硬件跑起来,简单的驱动就是基于裸奔的单片机通过各种外设让相关硬件工作,更复杂的就是通过操作系统来驱动。简单的基于单片机的驱动比较好学习,只要把相关单片机的功能寄存器弄明白,按照相关硬件功能需求,编码实现就可以了。但是只要上了操作系统,那就是另一个世界了,要深入内核进行学习,所以建议想从事驱动的同学一定要学好C、操作系统和数电方面的知识。3、应用层软件工程师。这里说的应用层是指基于操作系统的应用层,现在通信行业主流的操作系统有uCos、Linux和VxWorks。这方面主要是对OS的各种系统调用API要熟悉,同时要有很好的编程功底,要懂得进程、线程、IPC、死锁等等操作系统方面的知识,编程来实现各种功能。这里面还要懂网络编程,要熟悉五层模型、主流的二层三层协议(ARP、PPP、ICMP、FTP、TCP、UDP等等等,参考TCP/IP详解卷一),知道Linux系统的网络调用相关函数,懂得基本的网络编程模型(阻塞、多进程、多线程、select和epoll的IO复用),最好还去研究一下linux的内核,看看里面究竟是怎样实现网络的各种功能的。这编程能力就毋庸置疑了,C++也要熟悉,数据结构算法也挺重要。4、协议软件工程师。咳咳,答主的行业。简单的说,就是编码实现各种通信协议。说道协议,那可就多了TCP/IP协议栈里就有一大堆的协议,通信设备上的协议也不少,一些主流路由协议像RIP、OSPF、ISIS等几百页的RFC文档就会让你头疼,好在大部分通信公司都是买成熟代码,编码苦手们的福音。这一方面主要是对交换机路由器的功能要熟悉,什么MAC地址、VLAN转发表、IP路由相关的概念要懂,再就是要对具体的协议很熟悉,这里的协议主要指比较大型的协议,比如OSPF、ISIS、BGP、MPLS、LDP、RSVP、L2 VPN、L3 VPN等等,这些个协议有些公司一个协议就要十几号人负责,每个协议的状态机、协议报文、实现算法都要熟悉。从事这个行业C语言要好,网络编程要熟悉,同时英语也很重要,不然几百页的RFC文档会让你吐血。但是短处我也提到过,就是方向性太窄,不适合什么都懂的技术宅。5、FAE。Field Application Engineer,通俗点说就是技术支持工程师。从事这岗位的人一般都是从研发转过去的,而且之前都是从事芯片驱动的工作,要对某一款或几款通信芯片特别熟悉,比如Broadcom,然后等你不想写代码了就做这些芯片的技术支持,如果有公司用到你所支持的芯片出现了某些问题不能解决,就找你救急了。据我所知FAE的工资很高,而且一个区域就两三个这样的人,所以对人的研发能力也是有很高的要求。但是如果能从事FAE的话,办公比较自由,没事的话完全可以soho,发发邮件,打打电话,再不行就到现场支持(貌似是这样的,如果有误请原谅并指出)。6、网络工程师。就是各种组网,懂得利用通信设备来组织具体功能需求的网络,主流设备有Cisco、Juniper、华为、中兴、烽火等。这个岗位需要对通信的各种路由协议很熟悉,但是不用知道协议的实现具体原理,只需要知道协议的功能和具体配置。这个岗位可能需要一系列证书,比如CCNA、CCIE、CCNP、华三的各种认证等,我一大学同学大四考了个CCIE(考试费用很贵,机试+笔试当时一共18000,而且当时要到香港去考),毕业之后在通信公司从事组网工作,年薪30W。这个岗位貌似出差比较多,而且必须手机24小时开机,因为工程上指不定出什么问题了第一时间就是找你。硬件方面(硬件我不懂,只能举出我身边的一些例子):1、硬件工程师。就是能根据需求来制定电路板,包括各种电路的设计、电器元件的选择、芯片选型等等。这方面的工作硬件知识就一定要强了,什么模电数电要信手拈来,而且对常用的各种电器元件和芯片要熟悉,知道什么功能用什么硬件来实现,也要懂画PCB,焊接功夫不用说,各种工具比如万用表、示波器要像长在自己身上一样。硬件工程师比较重要的还有调试能力,因为硬件的调试不像软件,必须要上板子调,而且硬件是个自然学科,有时候出现什么古怪问题可能新手会死命查不出,所以我觉得硬件工程师的话是一个很靠经验的行当。不过硬件不会像软件那样需要不停的学新东西,底层的知识变化没那么快。2、射频工程师。RF,Radio Frequency,就是负责无线射频技术。这行当可就深了,首先一般从事RF的都是微波专业的,也就是学电磁场与电磁波专业,这专业学通信的都知道,巨费脑细胞,反正答主当年上课全是在当听天书。但是这个行业潜力巨大,RFID是风头正好的物联网的基础核心,如果射频工程师硬件好,同时软件也会,那完全就是各大射频芯片制造公司的抢手山芋,薪水让你掉下巴,我一师姐就在武汉的一个芯片公司,月薪接近3W,注意,是在武汉。所以微波专业的同学硬件是一定要懂的,因为据我的所见射频工程师天天都在调各种板子,如果软件功底够好那完全衣食无忧。3、FPGA工程师。这个在通信行业很重要,因为数据转发不是靠芯片就是靠这个,因为FPGA是并行运算,速度够快,比如像OAM这类保护倒换就必须用FPGA来实现发包,这样才能达到时间性能需求。同时FPGA可以用来实现芯片功能,比如我现在所在的公司就有很多FPGA工程师开发公司自己的转发芯片。FPGA用的是VHDL硬件语言,而且数电模电功底要扎实。4、PCB制板工程师。就是画电路板,这个一般的硬件工程师都会,但是大点的公司里面都有专门的PCB专项组,专门从事PCB布线工作。非研发类:1、销售。大家都知道,每个行业都少不了销售。如果嘴皮子好,性格比较外向的同学可以从事这方面的工作。销售做好了不缺银子,我一大学寝室哥们在深圳从事某品牌手机销售工作,四年了现在是东南亚的区域代理,而且经常出入泰国(你懂的),逍遥的很。但是不要以为销售不用懂技术,最起码那些通信的具体参数你要能脱口成章吧。更懂技术的销售才是通信行业的好销售。2、文档工程师。就是写文档喽,公司的设备都需要指导手册来指导用户进行操作呀。这个岗位英语一定要好,因为文档一般都会写中英文双份。沟通能力也要好,各种功能的实现你要找相应的工程师来了解才能制定文档。所以这岗位我觉得比较适合女生,本来就是个笔头功夫,而且在狼多肉少的通信公司,一个女生去进行各种功能沟通会很受欢迎的哦,嘿嘿。工作量的话看情况,设备不复杂就还好,如果需要写大型通信设备比如什么高端交换机之类的文档,可能会稍微大点,一本手册就是一本厚厚的书,但是第一版写完之后也就轻松了。3、预研部门。这个部门在稍微大一点的通信设备公司都有,就是通过市场调查,来找出最符合公司下一步产品的技术和功能,然后制定各种计划给研发部门来实现。这个也比较适合女生(这个部门我不是很清楚,大致是这样,如果有错误请原谅并指出)。4、测试工程师。在通信设备厂商,测试是一个很重要的部门,人数有可能比研发的还多,因为测试部门包揽着公司所有设备的测试工作,如果设备种类较多,设备功能较大,测试部门就有的忙了。测试工作的话不用怎么懂编程,设备每个功能的研发人员会提供相关的测试文档,或者有相关的测试标准(比如移动选型测试标准),照着这些资料进行配置,然后检查结果就OK了,如果没通过就找相应的研发人员解决。所以研发工程师打交道最多的就是测试工程师了,你们的关系一定要好哦,么么哒。现在的测试很多都是自动化脚本了,所以最好会一门相关的脚本语言,比如Python。工作量的话不好说,就我的经验,小公司还好,但是大型通信公司测试相当累,要陪着研发加班,设备超多,有的公司为了防止机房着火甚至每天还要安排测试人员通宵守着,而且机房里的设备很多,噪声超大,即使带上耳塞也会很烦躁,反正我如果在里面呆上半个小时就受不了了,不敢想那些测试人员怎么可以一呆那么长时间。因为不用编码,不怎么费脑细胞,比较适合女生。码字好累啊。。。也写了这么多了,同学们大概也有了个谱。其实还有很多种类,我没有经历过或者看到过,如果以上说的地方有什么错误或者没有说到的,还请各位原谅并指出,我好修改,以免提供错误的信息。反正通信工程就是一个很大的专业,什么都能干。但是就像各位所经历的,学的很多,可都学的不深。同学们这时候就要及早找准自己的兴趣点了,看自己对哪一方面感兴趣就着重学习那方面的知识。还有就是选择了一个方面,就要持续不断的深入学习,这里面有两方面的意思,一个是持续,另一个是不断学习。持续就是在一个行业里面不断积累经验,不要东一下西一下,等你在某个行业里摸爬滚打到一定程度成某一方面的专家后,你就很受欢迎了。不断深入学习,就是一定要不停的催自己学习新知识,哪方面不懂就学哪方面,IT领域变化太快,不肯学习只喜欢肯老本,过个十几年就有得你受了。我也见过一些30好几的工程师来面试,有些没有在一领域持续深入,反而什么都做过,结果成了什么都会但什么都不深的万金油,还有一些就是做一个产品做了十几年,一直在啃老本,结果技术十几年没进步过,结果公司产品线一换就不行了。这两类人都被刷掉过,学弟学妹们谨记哦。加班到现在一直在写这个,没码代码,心好有愧啊,滚去工作去了,方便的话各位就点个赞呗~~------------------追加---------------------知乎的通信小伙伴们太热情了,么么哒~~刚看了《大圣归来》,绝对的良心作,国产动漫如今需要这样的丰碑,推荐推荐。很多同学留言和私信问通信工程的规划和发展,但是很多工种我只是看到过或者听说过,并没有经历过,所以不能给出很好的建议。我之前也列举过一些可以从事的职业,有兴趣的小伙伴们可以根据自己的特长去做做相关调查,听听从事这方面的学长的建议更好,以免我在这误人子弟。但是我可以就我所从事的软件研发的经验给同学们给出一定的建议,如果你还在读书,可以参考下,如果你刚进大一,可以按着我所提供的路子一步一步来,四年后可以保证你不仅是通信工程的软件人才,而且能力会超出大部分学CS的同学。但如果你是从高中初中甚至小学就编程的大牛们,请忽略以下文字吧。有些童鞋指出想在本科毕业后找到研发方面的工作最好及早转CS,此话估计会打击很多通信人的积极性。可能现在互联网太火了,都觉得互联网才是真正的研发。大佬们说过:站在风口上,猪都能飞。现在互联网正是火了几年的风口,产生这样的想法情有可原。那么下一个风口是哪个?我认为是:物联网。物联网的英文简称是IoT,Internet of Things,意即万物相连。IoT的深远影响将会带来第四次工业革命,即国外专家指出的工业4.0,规模将会数十倍乃至百倍于现在的互联网。现在各大IT厂商都已经为物联网布局了好久,想必童鞋们已经有所耳目。我觉得物联网简直就是为通信工程量身定做的一个职业,为什么?因为软硬兼施,不仅有软件,而且必须与硬件相结合,同时协议框架影响巨大,当然云计算、大数据之类的CS专业也很重要。通信工程的专业课程在这方面基本上都用得上,如果软硬同时精通,将会是IoT领域不可多得的人才。同学们可以做下相关调查。首先说在前面,如果列举出的书目国内有英文影印原版,务必选择英文原版,因为国内的翻译水平参差不齐,很多翻译错误,而且语句不通,还不如英文原版来的顺。同学们不要惧怕原版书籍,阅读技术文档比四六级的阅读题好多了,顺便也把英语巩固下,岂不一举两得。好了,接下来我会就我的经验列举出一些通信软件工程师修行的计划和书目,有兴趣的同学们可以参考下。(1)语言类C/C++:如果连C都学不好那基本上与通信的研发无缘了。教材毋庸置疑是K&R的C语言圣经《The C Programming Language》,这是基础中的基础,务必打牢。进阶教材:《C和指针》、《C陷阱与缺陷》、《C专家编程》、《C标准库》。这前三本与K&R合称C语言四大圣经,《C标准库》也很经典,介绍了所有标准库函数的实现原理,可以研究下。C++教程可以选《C++ Primer》,很厚的砖头书,不过啃透之后C++也可以算得上熟悉了。进阶教材:《Effective C++》、《STL源码剖析》、《C++ Coding Standards》。为什么要学C++?因为这是个面向对象的世界,而且我之前也说过老外喜欢用C++,如果想进外企C++务必要好。Python:为什么要学Python?因为方便,好学,而且用处大,不仅在文本处理,网络编程,而且系统管理方面等都极其有用。我现在做那些路由协议软件bug分析的时候,光产生的日志文件都是几十M甚至几百M,用文本编辑器打开都要半分多钟。这时候如果跑一段脚本代码做一些字符串处理,将自己需要的内容生成另一个简单的文本再打开方便多了。推荐教材:《Python核心编程》,也是一本砖头书,不过不需要每章都读,选前面的一些基础东西看下,后面的进阶内容留着需要的时候再看。进阶教材:《Python Cookbook》、《Python for Unix and Linux System Administration》。前者是一些Python技巧的总结,各个方面都有涉及到,后者是Python在Unix/Linux系统运维管理可以用得上。Objective-C/Swift:可能同学们更疑惑了,为啥要学这东东?因为我大苹果啊,工资高啊,待遇好啊。这是一方面。我觉得这两个语言值得学是因为在现在的物联网领域,Apple目前是绝对的老大。国内的IT公司还在对智能家居进行深度布局,但是Apple的智能家居产品已经在开卖了,iWatch、Hue智能灯泡等等都挺火。更重要的是苹果有一套自己的智能家居开发API:HomeKit。到目前为止还有哪个其他厂商会有自己的一套智能家居API?而且苹果貌似在和一些协议组织联合定制物联网协议框架。现在物联网还是半温不火的状态,很重要的一个原因就是没有统一的协议框架,各大厂商只能各自为阵。如果谁能插手协议制定,谁就有发言权。苹果目前做到了,所以以后国内外在智能家居产业支持苹果设备的我认为会很多。因此这两个语言值得学下,技多不压身嘛。推荐教材为苹果的官方文档,可以在苹果的开发者中心下载。(2)嵌入式51单片机:这是最好入门的单片机,把51系列的8位单片机功能掌握后,嵌入式一些基本功能也就熟悉了,比如GPIO、ADC/DAC、PWM、USART、SPI、I2C、中断、定时器、看门狗等等,对以后学习更高深单片机也就有好基础。学51的话首先去某宝淘一个开发板,不贵才100多,该有的功能都会有,然后就是不断学习编程实现功能了。教材的话目前国外的我还没不知道,如果有同学知道请务必告诉我哈。国内的教材我推荐一套(不是广告啊,我是真觉得写得好):《51单片机应用从零开始》、《51单片机应用实例讲解》。两本书的作者为同一人,写的非常细致,这两本搞定后51也就摸透了。但是这两本书全部是用的汇编语言,貌似没有用C,因此要自己用C实现。这位作者还有另一本书我觉得也挺好,《电子设计从零开始》,都是针对小白的,如果想做电子设计竞赛的同学可以参考下。STM32:为什么要学STM32?因为Cortex-M系列的32位单片机功能强大,功耗低,而且价格低廉,正在取代8位单片机的地位(但并不是说8位的以后就无用武之地了)。在物联网领域Cortex-M系列的单片机绝对大有作为,因此想从事物联网开发的同学务必学好。首先也是去某宝淘一块开发板回来,接着就学习文档进行编程。教材的话相关开发板都会有配套的教材,可以先学一下。熟悉之后最重要的教材就是相关芯片的《STM32 Reference Manual》和《ARM Cortex-M3权威指南》,前者对相关芯片的所有功能寄存器进行了详细讲解,后者对Cortex-M内核框架和相关环境开发做了讲解。另外还有一本《Cortex-M3之STM32嵌入式系统设计》我也觉得不错,这本书讲了怎么用C++来封装STM32相关函数。学习STM32的时候建议首先按着教材,对着固件库函数先实现各个功能。之后再深入研究相关寄存器,这时就会对固件库的函数为什么会这样写一目了然了。Cortex-A系列芯片:Cortex-M和Cortex-A都是属于ARMv7技术框架的东东,但是M系列是属于微控制器和低成本领域,作为工业控制是不二选择,但是如果想要跑诸如Linux和VxWorks之类的操作系统就有点吃力。A系列为高端领域,可以很好的支持Linux、VxWorks、WinCE等操作系统,现在手机领域的大半壁江山都属于A8和A9。由于答主目前也是在学习这一块,还没有深入了解,因此不能给出很好的建议。也希望熟悉的同学能赐教,先谢谢哈~!(3)系统修炼Unix编程:Linux系统的重要性想必大家都知道,因此想进行通信的开发必须学会用Linux环境进行编程。推荐教材绝对是Stevens大神的六本书(如果能写出一本之类的书就足以名垂千史,Stevens大神写了六本。。。):《Unix环境高级编程》、《Unix网络编程》两卷、《TCP/IP详解》三卷。第一本书国内简称为APUE,这本书对UNIX系统调用函数进行了极其详细的讲解。学习APUE最好配合另一本经典教材:《Unix/Linux编程实践教程》。这本书会教你怎样实现Linux环境下一些常见的命令,比如ls、pwd等等,后面涉及到了unix编程的所有方面,包括线程、IPC、socket等等。这两本配合着看有奇效,谁吃谁知道。《Unix网络编程》国内简称为UNP,第一卷介绍了Unix环境下的各种网络调用系统函数,第二卷讲解了IPC。把第一卷吃透后Unix网络编程就不在话下了(其中SCTP部分可以跳过,貌似用的很少),第二卷可以选着看。《TCP/IP详解》着重看第一卷和第三卷,第一卷介绍了从二层到三层的一些主要协议,第三卷介绍了HTTP等应用层领域的协议,第二卷的话讲实现,有兴趣可以看下。把APUE、UNP第一卷、TCP/IP详解第一卷都吃透之后,我可以保证你毕业的薪水不会少于1W。数据结构与算法:数据结构在软件修炼中很重要,因为程序=数据结构+算法,基本的诸如链表、堆栈、二叉树等等必须要熟悉,这些在通信领域中用的太多太多,虽然代码可能不用你写,但是还是对实现过程要了如指掌。算法之类的在具体工作中用的很少,反正我到现在为止还没碰到几个要实现的复杂算法,但是了解下总是好的。学通信的同志可能这方面会较CS的同学较欠缺,CS的大牛们都会去刷ACM题库,通信的子弟们好像很少有这种热情,如果感兴趣可以刷下。推荐教材:《数据结构与算法分析--C语言描述》,很经典的一本书,对复杂度描述、各种数据结构做了深入讲解,而且附加相关C代码,啃透了内功也算是深厚了。另外如果觉得这本比较难的话可以从国内的一些小白教材开始,比如《大话数据结构》、《啊哈!算法》都是国内的上乘之作。《算法导论》的话,如果你时间充足,毅力顽强可以挑战下,如果啃完了你会是大牛。操作系统:这是通信的薄弱环节,据我所知通信工程很少有开OS这门课的,反正答主当年是没在课堂上学过,全是课外自学的。学了OS可以对系统调用函数有深一层次的了解,会知道进程怎样组织和切换,内核级线程和用户级线程的区别,虚拟内存是怎么回事等等。如果想从事驱动开发的话,OS功底就要很好了。推荐书籍:《现代操作系统》。这是一本OS的经典书籍,而且比较容易读懂,适合入门初学者,着重学习 2、3、4、5、6章。对OS相关概念熟悉后,就可以阅读Linux源代码了,推荐书籍:《Linux内核设计与实现》,比较适合入门。另外像STM32单片机可以跑uCos操作系统,因此如果对这方面感兴趣学下uCos,代码开源并且简单易学,可以先学习uCos,然后再学习Linux之类的,推荐书籍:《uCos-II嵌入式实时操作系统》。以上是针对通信工程软件研发的一些建议和书目,这些都弄通之后你将成为一名极其优秀的通信软件研发工程师了。答主只是一名普通的工程师,上面有些书我也是只看了一部分或者甚至还没开始看,也是在不断学习进步的过程中。所以通信领域是一个落后就要挨打的领域,必须不停的学习知识。另外有些同学问到网络工程师该怎么培养,我可以给出以下建议:首先要明确网络工程师的具体职责任务。网络工程师要组网,因此必须对各种路由协议要熟悉,比如OSPF、ISIS、BGP、RIP、MPLS等等。另外确实网络工程师不需要写代码,但最好还是学会一门脚本语言,因为在组网配置大型网络的时候命令会很多,这样一行一行敲会很累,因此一般都会运行脚本文件。学习的时候可以去学校实验室,一般都会提供具体厂商的通信设备,如果没有这条件可以下载相关模拟器,Cisco和华为都有自己设备的模拟器,可以直接在PC上模拟组网,效果和设备是一样的。然后就要学习各种协议,从二层到三层到大型路由协议,每个协议的功能、报文、状态机都要熟悉,这样才能对各种组网能随身所欲。之后就要熟悉设备的命令行,因为路由功能都是相同的,因此不同设备的相关命令行都是相似的,可以一通百通。推荐教材:Cisco的一系列考证官方教程,从浅到深依次为CCNA、CCNP、CCIE,都有相关的培训教材。另外华三出了一套教材,《路由交换技术》,一共好像4卷,应该也不错。另外《TCP/IP路由技术》两卷书是学习所有路由协议的不二选择。MPLS也应当好好学下,因为现在核心网中都用MPLS,并且与L2、L3 VPN结合的相当好,所以很重要,推荐教材:《MPLS技术架构》、《MPLS与VPN体系结构》。前者是带领答主入门MPLS协议族的书籍,后者介绍了L2、L3 VPN方面的内容。等踏上工作岗位后,应该还要研究具体协议的RFC文档。因为答主对MPLS比较熟悉,因此列一些MPLS相关RFC文档:RFC3031(MPLS框架协议,重要)、RFC3032(介绍了MPLS报文的组织)、RFC3209(RSVP-TE协议)、RFC3036(LDP协议)、VPN相关draft草案。另外有些学妹们问到女生在通信领域好就业么?对此我只能做这样的回答:如果你想从事研发,最好去读个研,因为女生读研出来之后做研发会很有保障(不是性别歧视啊,是我所见到的事实);如果想做测试,本科毕业应该就够了,毕竟不用编码;另外一些像工程维护之类的,不建议女生,你愿意一年到头风餐露宿的在各地来回跑么?据我所知一些通信设备国企里面研发和测试的女生占到了三分之一甚至更多,因此可以考虑下。学妹们不要灰心,通信公司都是狼多肉少的地方,你们进去后会很受欢迎的哦,至少个人问题不用愁啦。好了,啰嗦了这么半天终于写完了,以后不会再更新了,码字真的好累啊,感谢各位的赏脸。以后如果同学们还有什么疑问,欢迎各种留言和私信骚扰~
发表评论:
TA的最新馆藏

我要回帖

 

随机推荐