嵌入式学习路线图_嵌入式路线图-程序员宅基地

嵌入式学习路线图

2018年02月02日 00:00:00 阅读数:5362

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/p23onzq/article/details/79238308

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

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

  • 业务类

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

  • 专业类

640?wx_fmt=jpeg

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

  • 系统类

640?wx_fmt=jpeg

这里系统主要指 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库

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

     

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_24216697/article/details/82250869

智能推荐

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try

实验四 数据选择器及其应用-程序员宅基地

文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用

角谷猜想 C++实现_角谷猜想c++代码-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏5次。题目描述所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。输入 一个正整数N(N <= 2,000,000) 输出 从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"En..._角谷猜想c++代码

XNA学习笔记——用顶点缓冲和索引缓冲创建地形_positions indices 自动创建地形-程序员宅基地

文章浏览阅读1k次。1: private float[,] LoadHeightData(Texture2D heightMap) 2: { 3: float minimumHeight = 255; 4: float maximumHeight = 0; 5: 6: int width = heightMap.Width; _positions indices 自动创建地形

随便推点

Java加密与解密_java 加密 解密-程序员宅基地

文章浏览阅读5.5w次,点赞3次,收藏41次。加密方式主要有3种,摘要加密、对称加密与非对称加密。_java 加密 解密

sql判断以逗号分隔的字符串中是否包含某个字符串,不是模糊查询_sql server 逗号分隔包含-程序员宅基地

文章浏览阅读6.5k次,点赞2次,收藏9次。sql语句中,以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素,例如:判断 ,a,b,c,d,e,f,g,中是否包含 a ,sql语句如何实现?SQL中没有类似VB中的Split的函数。此时,如要匹配 ,6,3,9,22,中的6。可用charindex函数巧妙实现:(注意红色的逗号)charindex( ',' +cast(6 as varchar)+ ',',‘,6,3,9,22,’)>0sqlserver:sqlserver中没有封装好的方法可以实现._sql server 逗号分隔包含

环球旅行80天游戏分析【部分】-程序员宅基地

文章浏览阅读1.8k次。 第一次接触这个游戏,还是通过校内网。然后下载了一个单机绿色破解版的。感觉挺有意思,就慢慢玩了起来。后来打开游戏文件夹,发现base里面竟然都是一些xml、lua和jpg文件,感觉好熟悉,于是便开始了我的分析。 游戏目录结构如下:│ Around the World in 80 Days.exe│ bass.dll│ settings.ini│ ├─sc

百度IP地址查询API使用: 应用类型为浏览器端_百度ip归属api-程序员宅基地

文章浏览阅读8.4k次。百度普通IP定位是一套以HTTP/HTTPS形式提供的轻量级定位接口,用户可以通过该服务,根据IP定位来获取大致位置。1.首先需要成为百度地图开放平台的注册用户。http://lbsyun.baidu.com/index.php2. 申请Web服务API服务,在控制台创建一个应用:应用类型为浏览器端3.创建好应用后你,将会得到一个访问应用(AK).4.请求URLhttp://..._百度ip归属api

DataGrid背景颜色设置-程序员宅基地

文章浏览阅读4.7k次。DataGrid颜色专题在Flex运用中经常提到的有关DataGrid问题是如何改变DataGrid单元格(cell),列(column)和行(row)的背景颜色(backgroundcolor)这里对这3种颜色做一个总结。 1. 设置行(row)的背景色 主要是通过对DataGrid扩展,对protected函数drawRowBackground()进行重写,具体代码如下:package com{ im_datagrid背景颜色

使用PyTorch实现自己的图像分类-程序员宅基地

文章浏览阅读5k次。欢迎关注“小白玩转Python”,发现更多 “有趣”引言如果你刚刚开始学习 PyTorch,并想学习如何做一些基本的图像分类,那么这篇文章你一定不要错过哦~本文将通过组织自己的训练数据..._pytorch torchvision 训练自己的数据 图像分类