嵌入式开发学习路线图

2019-07-12 20:47发布

之前看到别人在学习视频中的回复,觉得很全面,分享给大家 --------------我就是个搬运工 基础学习Ⅰ---Linux入门
       目前嵌入式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。而Linux操作系统也只是一个简单的操作系统,简单的使用对于嵌入式开发人 员来说价值并不很高,真正有价值的是掌握Linux的基本服务和Linux的设计理念、思想,这对于嵌入式开发人员的长期发展是很极其重要的。Linux 系统有很多发行版,RedHat、Ubuntu、Fedora等。作为嵌入式开发人员,我们没有必要把精力放到使用哪个Linux发行版上,而是尽快把 Linux系统尽快安装好。如果打算坚持长期学习,那么建议您把自己的电脑做成双系统,而不要在虚拟机上安装。
Ubuntu系统下载地址:http://www.ubuntu.org.cn/  基础学习Ⅱ---C语言         C语言是嵌入式开发必备的基础知识。在Linux下从事C语言的开发,你会觉得更为顺畅、更为自然,因为C语言是因unix的出现而诞生的,Linux内 核几乎完全是由C语言编写完成的。学习C语言,如果不会用指针,那么就称不上会C语言。做嵌入式开发指针更显得尤为重要,所以做嵌入式开发除了掌握位操 作、限定词等,对指针的掌握是不可或缺的。而且要掌握多级指针、函数指针等等。涉及到指针,那么就会讲到内存分配。在大学中,学习C语言一般的学习很少讲 到内存分配,但是如果期望从事嵌入式开发,那么就必须懂得C语言是怎么做内存分配管理的。指针之外,还要学习模块化编译处理、指针与数组、gcc、 Makefile、GDB、递归、结构体、宏定义使用等。C语言是整栋嵌入式大厦的基础,所以在学习嵌入式时,必须把C语言重视起来,多敲代码,多练。一 名优秀的程序员必定是通过“体力劳动”再转向“脑力劳动的”,这也是为什么我们要有“写不出代码=0”思想的原因所在。
        如 果说C语言相当于文字,那么数据结构就相当于在造句、写文章。代码质量有一部分取决于对数据结构的掌握程度。在数据结构部分我们要把链表、树、排序作 为学习重点。而且我们也可以查看一些比较常见的函数(如strcopy、strcat、printf等)在内核中是如何实现的,以及编写代码模拟堆栈,这 不仅有利于编写代码质量的提高,而且还可以初步了解Linux内核精髓,为今后工作打下坚实的基础。
       C++、QT在嵌入式开发领域,是用来开发图形界面的,希望从事上层应用开发及图形界面,那么在C++、QT方面需要比较深入的学习。
基础进阶---Linux应用程序设计
      Linux的思想源于Unix。Linux继承了Unix的优点,但 是没有用UNIX的代码,所有程序都是重新编写的,而且Linux与Unix的源码级兼容。Linux是类Unix操作系统。Linux 不仅符合 POSIX 标准,而且还包括其它 UNIX 标准的多种特性,例如,UNIX 的 System V 接口文档(System V Interface Document,SVID)和伯克利软件发布(Berkeley Software Distribution,BSD)版本。Linux 采用了折衷的策略,包含了 UNIX 几个典型特性当中最实用的一些功能:
      Linux 采用了 SVR4 的进程间通信(IPC)机制:共享内存、消息队列、信号。
      Linux 支持 BSD Socket 网络编程接口。
      许多 Linux 发行版采用 SysV init 机制,支持运行级别。
此阶段的学习是从事嵌入式上层应用开发以及底层开发人员的必修课程。进程、线程、信号、文件锁、socket是这部分内容的重点。要把这些内容学的透彻非 要下些苦功夫不可。而且函数是系统提供给我们的,难免要对计算机系统深入理解一番。TCP/IP协议也是要涉及到的。有问题建议用Google搜索及登陆 chinaunix论坛。通过这个阶段的学习,我们就可以初步实现一些应用程序的开发了,如做自己的shell命令解析器、简单的聊天软件、视频多播等。
嵌入式入门---ARM体系结构
       从这部分开始,我们将真正进入嵌入式开发学习阶段。首先我们要知道采用哪种处理器。目前通用嵌入式处理器有ARM、MIPS、PowerPC、X86等。 从市场产品占有率上看,ARM处理器远远领先于同类其它处理器,并逐步掠夺传统51单片机和英特尔市场份额。据招聘网站统计,目前用人单位在技术水平上要 求开发人员掌握ARM9及以上平台的开发技术。ARM公司在发布ARM11产品后,更改以往的数字标记更新方式,转为发布ARM Cortex。但是Cortex并不是更高端,而是全新系列的处理器,比如Cortex M3,它主要应用于机械加工、工控领域,目的是取代以前的ARM7处理器。
        在开始学习前,建议有一块自己的开发板,目前ARM9 2440的开发板价格在400-600元之间,ARM11 6410的开发板价格要高一些,最便宜的也要1200元以上。在此,提醒大家尽量不要买mini开发板,虽然mini开发板的价格要便宜些,但是与正常开 发板相比,mini板功能是不完善的。嵌入式汇编有别于X86汇编,所以如果以前没有接触过汇编语言,那么没有必要先去学X86汇编再学嵌入式汇编,可以 直接学习嵌入式汇编。除了汇编我们还要学习ARM指令集。有了开发板,我们要下载相对应处理器的DataSheet及开发板电路原理图。ARM体系结构的 学习我们是不能完全照抄别人代码的,因为我们自己手中的开发板及处理器与别人是不同的,除非所用的代码是根据你手中的开发板来编写的。所以,我们要先去看 书、看视频资料理解原理及工作方式等,然后根据自己开发板的电路原理图和DataSheet来编写代码,达到理解外围设备工作原理和操作硬件的目的。   嵌入式提升---Linux内核、驱动         众所周知嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的、最具价值的无疑是嵌入式内核驱动级别的开发 者。真正的嵌入式高手或者企业中的核心开发人员,一定是嵌入式底层的内核驱动开发工程师,这些工程师成长比较缓慢,造成对内核驱动人才的大量需求,所以这 些人才是真正企业需要的香饽饽。掌握驱动开发会让自己的核心能力有极大的飞跃,真正实现嵌入式最有价值的就业。
        由于Linux内核更新速度很快,书籍和视频不可能及时更新,所以我们再看书和视频后,要自己动手下载内核源码包,去看内核中的代码,在这里可以充分检验 C语言、数据结构等基础知识的掌握程度。而驱动的编写还是要借助外设硬件电路原理图和芯片手册。内核和驱动的知识是让我们根据不同的硬件,编写对应的驱 动、合理剪裁内核、制作文件系统,并移植到硬件开发板上。如果手里有ARM11 6410及以上的开发板,可以试试在裸板上编写驱动并移植Android系统到开发板上吧。    详解嵌入式学习路线   ① Linux操作系统使用 全面了解LINUX;详讲Linux下的文件管理、用户管理、网络管理等命令;包括VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具…… 教学目标:精通   ② 嵌入式Linux C语言编程 重温C编程!通过编程实例重点讲解C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识。 教学目标:精通   ③ 嵌入式Linux C语言数据结构 数据结构在linux内核、底层驱动、通信协议及实际开发中应用。包括顺序表、链表、队列、栈、树、图、哈希表、各种查找和排序算法等…… 教学目标:精通   ④ Java语言高级编程 掌握Java语言基本语法,面向对象编程方法,同时和C语言进行对比理解面向对象的高级用法,理解Java中多线程编程,网络编程及常用Java类…… 教学目标:熟悉   ⑤ 嵌入式Linux项目开发流程 宏观了解嵌入式开发环境搭建和项目开发流程,让您建立起整体架构的概念,包括产品需求分析和选型、硬件、移植、启动代码、驱动开发…… 教学目标:熟悉   ⑥ 嵌入式 Linux应用编程 精通嵌入式Linux下的程序设计、嵌入式Linux开发环境,强化对Linux开发的理解和编码调试的能力,系统编程、标准I/O、文件I/O、库的制…… 教学目标:精通   ⑦ 嵌入式 Linux并发程序设计 并发程序设计重要讲解,包括:多进程编程,进程间通信机制,多线程编程,多线程间的同步和互斥机制等。结合大量的案例来讲解。 教学目标:精通   ⑧ 嵌入式 Linux网络编程 主讲网络体系结构,TCP/IP协议,TCP及UDP编程,服务器模型,超时控制,协议分析,抓包等。讲解中结合大量实例并使用工具分析。 教学目标:精通   ⑨ 嵌入式数据库开发 熟练使用一种数据库是必须。因此重讲在嵌入式开发中有着广泛应用的SQLITE数据库。如:数据库的设计、SQL语句、用C语言来控制数据库等。 教学目标:精通   ⑩嵌入式 Linux应用综合项目 代码量积累,独立完成一个应用层综合项目,涉及应用开发中的关键技术,像内存管理、链表、文件I/O、多进程、多线程、网络编程和数据等 教学目标:精通   ⑪ Android应用编程 Android应用编程方法,熟悉常用的应用组件的开发和事件处理机制等,并能理解Android应用产品的实现原理,学会Android应用的编写。 教学目标:精通   ⑫ ARM处理器编程 ARM体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程等,为后面移植课程打基础。可获得ARM公司全球统一授权培训证书。 教学目标:熟练   ⑬ ARM硬件接口开发 ARM的常用接口开发及硬件电路设计基础(包括IO、串口、看门狗、PWM定时器、模(ADC)……DMA操作等),物联网基础、传感网zigbee 教学目标:熟练   ⑭ 综合案例的实战训练 在第二阶段课程中,为了帮助学员充分有效地掌握核心知识点在企业中的具体应用,并开始逐步按照企业需求、流程和规范进行实战训练。 教学目标:熟练   ⑮ 嵌入式Linux系统开发 往开发板上移植操作系统需要完成大量的工作,包括搭建嵌入式开发环境;移植bootloader;移植内核(bsp开发)和制作根文件系统。 教学目标:熟练   ⑯ 嵌入式Linux内核开发 深入内核了解Linux相关运行机理,为后面的驱动开发打好理论基础,内容:内核源码结构、内存管理、进程管理、中断管理、系统调用、内核…… 教学目标:熟练   ⑰ 嵌入式Linux驱动开发基础 从最简单的内核模块开始,逐步添加相关代码,实现对设备的各种复杂操作。驱动中的相关机制不需要死记硬背,要理解内核设计思想,此外…… 教学目标:熟练   ⑱ 嵌入式Linux驱动高级开发 本课程将重点讲解嵌入式Linux下常用接口驱动的编写方法; 完成flash驱动、块设备驱动、网卡驱动、液晶驱动、sd卡驱动和usb驱动。 教学目标:熟练   ⑲ 综合案例的实战训练 通过这种方式带领学员分析企业岗位的真实技术需求,进行案例演练,从而快速掌握相关的技能和开发技巧。 教学目标:熟练   嵌入式Linux在移动开发的典型应用 在3G领域的典型应用Android系统,了解Android系统体系结构、开发特点及关键技术点,重点学习ARM对Android系统的支持现状…… 学目标:熟悉   Android底层系统开发 从Ubuntu系统上搭建Android开发环境开始,到最终Android系统硬件抽象层分析,从简单到复杂,从基础深入到架构,以源码分析为主线…… 教学目标:熟练   嵌入式Linux & Android项目实践 课程将通过真实完整的项目案例,让学员了解真实项目的开发流程,让学员知道如何将所学知识应用到项目开发中。培养去企业就能干活的能力 教学目标:熟练