嵌入式学习路线图「建议收藏」

嵌入式学习路线图「建议收藏」可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。我们暂且宏观上把程序员分为3类:业务类,专业类,系统类。 业务类 业务类更多的是在应用程序。随着移动互联网的快速发展出现一批UI设计师,这里的设计师是指APP的界面设计,在注重用户体验的今天对于界面的设计出现水涨船高的需求。一时间Android…

大家好,又见面了,我是你们的朋友全栈君。

可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。

我们暂且宏观上把程序员分为3类:业务类,专业类,系统类。

  • 业务类

业务类更多的是在应用程序。随着移动互联网的快速发展出现一批 UI 设计师,这里的设计师是指 APP 的界面设计,在注重用户体验的今天对于界面的设计出现水涨船高的需求。一时间 Android, IOS 的 APP 开发者如雨后春笋般涌出,待遇也是不低。高级的应用程序员除了界面的开发外也会涉及程序内部的业务逻辑,现在的 APP 逐渐演化成很多层的架构,比如分为业务逻辑层,基本功能模块层,UI 界面层等,如下图所示:

嵌入式学习路线图「建议收藏」

一个 APP 就包括了很多内容。如果志向写应用程序的小伙伴,我建议你先练好基本功:数据结构,算法导论,网络编程,数据库等。然后根据兴趣的行业深耕学习。因为这一行的开发者和业务联系比较大,后续换行业就不太吃香,比如美图秀秀开发者更多的是注重在图形显示这一块,网易云音乐更多的就注重在音频这一块。当然不能以偏概全,很多能力是通用的,我这里的举例主要是相对而言。应用程序开发者会随着业务的多变性经常加班 coding,解 bug。所谓的码农更多的是出现在这一领域。

  • 专业类

嵌入式学习路线图「建议收藏」

应用程序开发者是完成业务的直接执行者,夸张的讲应用程序开发者就是 API 调用者,但这些 API 是如何实现的?不同的专业领域有不同的 API。以上图 APP 框架为例,HTTP 网络请求就是调用了网络领域的 API 接口, SQLITE 就是调用了数据库领域的 API 接口,再比如目前比较火的人工智能,语音识别,图像处理等都属于专业类领域。这一领域的工作者拥有比较强的理论知识,算法知识,多以研究生或者博士生为主。这一领域的优势是待遇高,可替代性低,但也因为研究领域的专一性在找工作时也面临一些局限性。

  • 系统类

嵌入式学习路线图「建议收藏」

这里系统主要指 linux 系统。系统是个太大的概念,有上层 framework 系统也有底层内核机制,也包括驱动开发,甚至硬件也要知道。这一领域的人更多的是在嵌入式行业。在操作系统领域对知识要求很多:

  1. 看懂电路图

  2. 看懂芯片手册

  3. 有编写,移植驱动的能力

  4. 懂内核的实现机制

  5. 懂C语言,C++, JAVA等

 

 

这一行的优势是学好后行业通杀,大公司基本都有这方面人才的需求;相对做应用程序的人不会经常因为业务需求的变动搞得天天加班;行业稳定越老越吃香,不太会出现程序员35岁职业生涯问题。另外操作系统是很通用性的知识,夸张的讲只要是 IT 行业,学点操作系统的知识肯定是如虎添翼的作用:

  1. 硬件工程师通过学习可以理解软件的运行原理

  2. APP 工程师学些系统知识更有利于走向全栈

  3. 大学生学习linux对找工作多有益处

  4. 学好 linux 即可以做开发也可以做运维

  5. 永远不会淘汰的技术,只会越老越吃香

嵌入式 linux 学习路线

本文把操作系统默认为 linux,讲讲怎么学习嵌入式 linux 系统。简单地说,嵌入式 linux 系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android。 所以,嵌入式Linux+Android系统包含以下部分内容:

  • ARM

  • Bootloader

  • Linux内核

  • 驱动程序

  • 根文件系统

  • Android Framework

  • 使用C/C++编写的应用程序

  • Android APP

 

根据以上内容我准备了一系列的达人课程,希望对有志于成为全栈嵌入式开发者有所帮助,这里分享下课目表安排和学习经验:

1. ARM

学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册。这里推荐一些书:

  • 《微机原理》,可以理解一个计算机的组成原理

  • 《数字电路》,掌握一些逻辑运算,理解各种门电路的原理

  • 《ARM体系结构与编程》,对ARM的运行原理解释的很到位

 

 

 

我相信看完这些书对ARM和硬件知识的掌握足够了,对于初学者只想浅尝辄止的了解,我推荐之前的一个chat《一小时教你学会 ARM 架构》。

2. Bootloader

bootloader有很多种,vivi、u-boot等等,最常用的是u-boot。 u-boot功能强大、源码比较多,对于编程经验不丰富、阅读代码经验不丰富的人,一开始可能会觉得难以掌握。但是,u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。按照这个主线,我们尝试自己从零编写一个bootloader,这个程序相对简单,可以让我们快速理解u-boot主要功能的实现。相关内容有:

  • u-boot分析之编译体验

  • u-boot分析之Makefile结构分析

  • u-boot分析之源码第1阶段

  • u-boot分析之源码第2阶段

  • u-boot分析之u-boot命令实现

  • u-boot分析_uboot启动内核

3. Linux内核

内核在工作中的作用可以说是潜移默化的,虽然看起来没有直接性的工作项目,但绝对是走向架构师的必经之路。本课程会涉及到以下知识点:

  • Linux总线,设备,驱动模型的探究

  • Linux设备树的深入理解

  • Linux的启动流程

  • Linux设备和驱动的相遇

  • 动手定制一个开发板

 

 

 

我相信通过这些课程的学习可以基本上掌握内核的运行原理,入个门是没有问题的。另外推荐本书给大家《linux内核设计与实现》。

4. 驱动程序

驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,有了ARM的知识和阅读数据手册电路图的能力,再加上Linux内核的运行原理,基本上写驱动就是API调用的体力活了。这里推荐宋宝华老师的《linux设备驱动开发详解》。后续关于驱动的内容暂定如下:

  • LCD驱动程序

  • 触摸屏驱动程序

  • USB驱动程序

  • NAND FLASH驱动程序

  • NOR FLASH驱动程序

  • 网卡驱动程序

  • 声卡驱动程序

5. 根文件系统

在开发应用程序时,也需要搭建文件系统,把各种库、配置文件放进去; 在发布产品时,你还需要修改配置文件,使得产品可以自动运行程序; 甚至你想实现插上U盘后自动启动某个程序,这也要要修改配置文件; 这一切,都需要你理解根文件系统的构成,理解内核启动后是根据什么配置文件来启动哪些应用程序。根文件系统相对比较简单,可以根据以下路线学习:

  • Linux根文件系统目录结构

  • 移植Busybox

  • init进程介绍及用户程序启动过程

  • 使用glibc库

  • 制作/使用文件系统映象文件

     

 

成为全栈嵌入式开发者任重而道远,让我们按照上面的学习路线一步一步行动起来。

 

轻轻一扫  欢迎关注~

 

嵌入式学习路线图「建议收藏」

嵌入式学习路线图「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134518.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android Okio使用

    Android Okio使用Okio使用概述Okio是对JavaIO的封装,存储和处理数据变得更加容易。依赖库implementation’com.squareup.okio:okio:2.4.3’基本使用写操作try(BufferedSinksink=Okio.buffer(Okio.sink(newFile(“text.txt”)))){sink.writeInt(65);sink.writeUtf8(“hellookio”);sink.writeUtf8(“安卓”)

    2022年4月30日
    75
  • creating server tcp listening socket 127.0.0.1:6379: bind No error

    creating server tcp listening socket 127.0.0.1:6379: bind No errorwindow下启动redis服务报错:creatingservertcplisteningsocket127.0.0.1:6379:bindNoerror的解决方案如下按顺序输入如下命令就可以连接成功redis-cli.exeshutdownexitredis-server.exeredis.windows.conf参考连接:https://blog.csdn….

    2022年5月2日
    47
  • 【c语言】malloc函数详解[通俗易懂]

    【c语言】malloc函数详解[通俗易懂]谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。关于malloc相关的几个函数关于malloc我们进入Linuxman一下就会得到如下结果:也可以这样认为(window下)原型:externvoid*malloc(unsignedintnum_bytes);头文件:#include<malloc.h…

    2022年6月14日
    70
  • 十分钟读懂『卡尔曼滤波算法』

    十分钟读懂『卡尔曼滤波算法』我是勤劳的搬运工,转自:1.http://blog.csdn.net/karen99/article/details/77717432.http://blog.csdn.net/tudouniurou/article/details/6277512——————————————————————–

    2022年6月29日
    24
  • 什么是大数据开发?「建议收藏」

    什么是大数据开发?「建议收藏」♥️大数据开发是干什么的?大数据作为时下火热的IT行业的词汇,随之而来的数据开发、数据仓库、数据安全、数据分析、数据挖掘等等围绕大数据的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。随着大数据时代的来临,大数据开发也应运而生。大数据开发其实分两种,第一类是编写一些Hadoop、Spark的应用程序,第二类是对大数据处理系统本身进行开发。第一类工作感觉更适用于dataanalyst这种…

    2022年5月4日
    126
  • pycharm如何调用anaconda环境_pycharm怎么使用anaconda环境

    pycharm如何调用anaconda环境_pycharm怎么使用anaconda环境pycharm中添加anaconda环境无效本文是经过作者多次尝试最终解决掉的。1、先说说我自己在安装anaconda之前的环境配置:我的电脑本地上安装了python3.7.4和pycharm,平常学习都能正常使用pycharm。后来因为要做深度学习,不得不安装anaconda。2、我就想着直接在原来的基础上安装anaconda算了,到时候在pycharm中新增一个CondaEnviron…

    2022年8月26日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号