电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Linux嵌入式所有知识点-思维导图以及嵌入式驱动工程师学习路线【建议收藏】
分 享
扫描二维码分享
Linux嵌入式所有知识点-思维导图以及嵌入式驱动工程师学习路线【建议收藏】
linux
驱动
嵌入式
一口Linux
关注
发布时间: 2021-09-23
丨
阅读: 1123
## 一、前言 很多粉丝问我,我的Linux和嵌入式当初是如何学习的? 其实彭老师在最初学习的过程中,走了相当多的弯路: **有些可以不学的花了太多的时间去啃 有些作为基础必须优先学习的,却忽略了, 结果工作中用到这些知识时傻眼了 有些需要后面进阶阶段学习的,结果提前看了,看的晕头转向,浪费时间** 作为初学者,抓不住重点,走弯路, **哪些要了解就可以了,哪些必须熟练掌握,** 根本搞不清楚, 相信每个过来人都深有体会。 所以一口君特地了整理了嵌入式驱动工程师学习路线: 《[嵌入式驱动工程师学习路线](https://mp.weixin.qq.com/s?__biz=MzUxMjEyNDgyNw==&mid=2247496985&idx=1&sn=c3d5e8406ff328be92d3ef4814108cd0&chksm=f96b87edce1c0efb6f60a6a0088c714087e4a908db1938c44251cdd5175462160e26d50baf24&scene=21&token=1106299436&lang=zh_CN#wechat_redirect)》 那么我当初到底是如何学习Linux、网络、ARM、Linux驱动等各个领域的技术的呢? 上几张图,大家自己看下吧。 ### 1. 我看过的部分书籍 ![ ](https://img-blog.csdnimg.cn/d9e8b6351ac84fe6acbb4275c8b58ebe.jpg) 这只是其中很少一部分,有一些都送给我学生了, 其中关于驱动的书,基本都看了四五遍。 ### 2. 整理过的文章 下面是一口君的有道云笔记,这么多年学习嵌入式,总结的各种技术文章目录均存于此: ![ ](https://img-blog.csdnimg.cn/2fe208d705ba40cd8c3e90039d09ac9e.png) 下面是学习驱动总结的所有知识点对应的目录(红框内均是),每一个目录下都是几十篇文章。 ![驱动](https://img-blog.csdnimg.cn/6b102a70b6cc42a584bd93e8de7352ca.png) 我收藏在有道云笔记的文章,都是我精心筛选过的,并且有许多文章是重新整理过的 比如I2C这个知识点,我会从网上搜集各种关于这个知识点的文章, 因为作者使用的平台不一样,开发任务的重点不一样, 有的搞硬件的会从画电路图角度讲解, 有的用的是单片机,那么他讲解的角度就是基于裸机驱动角度, 有的用的是Cortex系列,在linux上跑的,那么就会讲Linux架构下驱动的编写, 也有作者会分析Linux内核I2C子系统的实现等等 这些文章的有的讲的深,有的讲的浅,各种优缺点, 那么我就会把这些文章有闪光点的地方全部吸取, 然后汇总到我的笔记中 所以特别怕网易哪天把有道云笔记给下线了, 那我要亏大了。 ### 3. 开发板合影 下面是一口君这么多年所玩过的部分开发板合影: ![ ](https://img-blog.csdnimg.cn/a3e85b4f165c4a7c8dd224f5fb665cf2.jpg) ![ ](https://img-blog.csdnimg.cn/c01bee1d2c224834bb6c5296a7aa7250.jpg) 这些板子包括:CC2530、arduino、pcduino、树莓派1、树莓派2、树莓派3、ARM A-8 A-9、正点原子阿尔法、GPRS套件、智能小车套件,还有各种传感器、显示屏、外设; 这些板子、配件还送给我的学生一部分,前后累计起来也有不少钱了。 钱财事小,毕竟是要学知识,知识是无价的! **这几年,一口君看了无数的博文、书籍、视频, 也看了无数的用户手册、 编写了无数的代码, 解了无数的bug,** 而这些都是在业余时间完成的。 ## 二、所以到底要如何学习Linux、嵌入式? 关于这个问题,一口君无法给出一个标准答案, 因为每个人的专业、基础、年龄、兴趣、毅力都不一样, 一口君唯一能确定的是: **在学习嵌入式、Linux的路上,没有任何的捷径可走,** 不论是要入门、进阶、转行还是兴趣爱好, 必须制定一个长期的学习计划、并利用好自己所有的业余时间,刻苦学习, **坚持是成功的唯一方法!** ## 三、嵌入式学习知识点思维导图 为了帮助更多的朋友学习,现特地将嵌入式学习知识点,整理成思维导图。 **或者方式见文章底部** 大家可以根据自己所处的阶段, 有针对性的来补充自己的知识,尽量少走弯路, 如果还是搞不清楚, 也欢迎大家加我好友, **一起交流技术, 一起卷到天昏地暗,海枯石烂!** **山无棱、天地合,我也不与君绝!** 部分截图如下: ![ ](https://img-blog.csdnimg.cn/d31c101d823b4279b1f8340c0e4db4ea.png ![ ](https://img-blog.csdnimg.cn/abae9acbaa4a46c889135b5738039046.png) ![ ](https://img-blog.csdnimg.cn/12b3f4a1870846efbeca339ac7c43c51.png) ![ ](https://img-blog.csdnimg.cn/16de7e8468d54b8c8270ee47cfdfa4d5.png)![ ](https://img-blog.csdnimg.cn/df066be9b18c4c9d9a40b746d45416d1.png) ![ ](https://img-blog.csdnimg.cn/4cd94bad63df4efa97ec94da145f3aa8.png) ![ ](https://img-blog.csdnimg.cn/3d6d8583fbd043ceb6b3c2a2b520c936.png) ![ ](https://img-blog.csdnimg.cn/34c379f5664f4dba86763ae1390d5563.png) ![ ](https://img-blog.csdnimg.cn/7ea8df6939cc496ab415cf75aac20152.png)![ ](https://img-blog.csdnimg.cn/ca2ffe4a21924fce8ddf20b1a4eb2175.png) ![ ](https://img-blog.csdnimg.cn/254c9ac8ef4749b68f858004600e7b7e.png) ![ ](https://img-blog.csdnimg.cn/24f5db577d304362aef7dff145111305.png) 完整的思维导图下载地址: 百度云: 链接:https://pan.baidu.com/s/1ttxxx7I9WJlPchiVrMLqVw 提取码:5i85 微云: https://share.weiyun.com/x8xUiLT7 完整的pdf文档请关注公众号:一口Linux,后台回复:嵌入式思维导图 网上看了很多的嵌入式学习路线,有的比较片面,有的为了博人眼球东拼西凑,几乎把整个行业用得着用不着的技术都写上去了,没有侧重点,简直是劝退指南,还有的纯粹是打广告卖板子招生。 一口君曾经是某见的教学总监,带过的学生也有大几千了,基本都从事linux相关开发工作。 现在在各行各业也基本都是翘楚,有的都成公司技术主管,带领几十人上百人团队。 一口君凭借多年的研发和开发经验,整理了嵌入式学习的最经典路线 下面就为大家介绍学习路线: # 一、基础 ## 1. linux基本操作: 个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。 《[Linux入门的基础知识点汇总,有这篇就够了](https://mp.weixin.qq.com/s?__biz=MzUxMjEyNDgyNw==&mid=2247494659&idx=1&sn=7c2eb2fe4a2036c6e7b3dbd7edfea39d&chksm=f96b9ef7ce1c17e1f5a3a1bc102576cd6c2c4e294f612090927967cf44894e393bcdd7d9db9e&scene=21#wechat_redirect)》 需要掌握的知识如下: 1. 环境的搭建:ubuntu、vmware安装 2. Linux目录结构; 3. 文件类型; 4. 基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,mv,mkdir等,最关键是gcc命令要会用; 5. 一些简单的shell脚本; 6. Makefile的编写。 ## 2. c语言: **所谓编程不学C语言,便称码农也枉然。** 学Linux,**不学编程,建议就不要学了,否则职业后期全是瓶颈**。 那些和你说学Linux不需要懂编程的都是再耍LM。 学习C语言一定要学习**Linux下C编程**,C语言网上视频也很多,知识点不一一介绍了。 但是有一点,就是一定要记住,一般的程序员从入门到绝对的精通大概需要2年时间,要想随心所欲写出超高质量的代码,时间因人而异,还要看个人造化。 实际上并不需要每个人都成为大师,能成为一个快快乐乐的小码农,不也是见开心的事吗? ## 3. 数据结构: 数据结构很重要,但是在这个上面花太多时间,也是没必要的。想进大厂的除外,自己拼命去刷题吧。 对于嵌入式方向来说,个人建议只要掌握几个基本的排序和查找算法即可,没必要把所有算法都研究一遍。 1. 能掌握常见的算法比如:冒泡排序、直接插入排序、快速排序、二叉树等。 2. 链表:双向链表,增删改查。 ## 4. 基础阶段项目 基础阶段,个人强烈建议一定要做一个综合性项目,一定要从0开始写。 **建议项目** 《电话本管理软件》 **该项目包含的知识点、功能点:** 1. 包含简单的菜单功能 2. 链表:包括增、删、改、查、排序等操作的双向链表。 3. 结构体、数组、指针、二级指针,字符串操作 4. 排序 5. 用户登录 6. 用户电话号码信息的添加、删除、修改 # 二、进阶 进阶阶段知识点很重要,即使以后你不做linux c开发,有了这些基础,你再去学java、c++你的视野一定会不一样。 ## 1. 文件IO * 掌握Linux文件IO的一套系统调用API:open、read、write、lseek,close等。 * 熟练写出文件拷贝等功能模块。 * 理解I/O、缓冲的概念。 在Linux下,一切皆文件,我们操作操作许许多多的外设(字符设备、套接字、文件等等)就像操作文件一样。 要想知道如何操作文件和外设,我们就必须熟练掌握文件IO,这是我们学习Linux下面编程最基本的知识点。 ## 2. 进程线程 * 进程与线程的概念 * 掌握常用的函数fork、ex
ec族函数等api; * 进程创建、回收,一个.c源文件变成可执行程序的过程; * 常用的进程相关命令:ps、top、crontab、at; * 进程间通信:信号量、消息队列、共享内存、管道、信号; * 守护进程; * 线程创建、同步互斥,互斥锁; * 库的概念,什么是动态库和静态库,如何自己制作动态库和静态库。 进程、线程是我们学习Linux下系统编程非常重要的一个知识点,必须掌握。 ## 3. 网络编程 * TCP/IP协议分层以及每一层的功能;不要看OSI,只要知道即可; * socket api的使用, * tcp、udp;C/S架构如何创建; * 套接字属性的设置; * C/S架构; * 多进程、多线程网络服务器模型; * 任意一款抓包工具使用; * 常见的网络协议分析:ping、 tftp、 ftp 等。 网络的重要性不言而喻,应用实在太广了,网络的知识也非常的复杂:网络编程、TCP/IP协议栈、网络拓扑、网卡驱动、各种无线通信协议。 可以收每一大块知识的学习,都需要很长一段时间来入门,并需要一定难度的项目做支撑,才能真正了解和掌握网络。 对于嵌入式方向初学者,我们最好先了解一些基础的网络协议知识,然后学习套接字的使用。 ## 4. 进阶项目 该阶段可以选择综合项目《多线程聊天室》,实现公聊、私聊、注册登录,互相发送文件等功能。 《[从0实现基于Linux socket聊天室](https://mp.weixin.qq.com/s?__biz=MzUxMjEyNDgyNw==&mid=2247487625&idx=1&sn=dc9ac657a9440abade9110d1c0fd92c0&chksm=f968627dce1feb6b03b07f3fbb427f1b3b962f88064f1d04bdcd382b5a9677340a3089d9bb23&scene=21#wechat_redirect)》 # 三、高阶 该阶段学习需要开发板配合,建议新手先把之前内容打扎实,再进入这个阶段学习。 开发板的选择,最重要的是资料!资料!资料!资料!资料!资料!资料!资料! 没有资料的板子不要买! 大家也可以参考我写的《[ARM系列文章](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUxMjEyNDgyNw==&action=getalbum&album_id=1614665559315382276#wechat_redirect)》 ## 1. ARM * arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表, * 伪指令、C语言和汇编代码的互相调用、内联汇编; * 学会查看常见电路图,了解数据线、信号线、地址线、中断线,常见外设电路图 * 学会查看各种芯片的用户手册 * *常见的外设的裸机驱动开发,led、key、adc、pwm、rtc、看门狗、i2c、spi、网卡、flash、USB等 这个阶段的内容,对于了解整个计算机软件的工作原理非常重要,Linux内核的很多机制都要依赖汇编指令,尤其ARM工作模式、寻址、异常,中断,异常向量表这些概念。 可以说,掌握了这个阶段的内容,那么单片机、STM32真的就是手到擒来了! ## 2. 系统移植 * uboot移植、rootfs制作、内核剪裁移植, * usb、网卡驱动移植, * uboot、linux启动流程, * 自己添加uboot命令 * 这一阶段的内容对于嵌入式工程师来说,在做实际项目的时候,会经常用到,各个厂家的移植步骤会有所差异,但原理基本相同,熟练掌握这些操作,非常必要。 这部分内容其实很复杂,对于新手来说,建议会操作即可,工作后如果在深入研究,再回头研究这些细节。 ## 3. Linux驱动 * 字符设备架构、inode、cdev、file_operations、file之间关系; * platform总线、设备树; * 内存概念 * 同步互斥机制,自旋锁、信号量、互斥体,原子操作; * 中断、中断底半部; * 等待队列,poll的实现; * 常见设备的驱动的编写和代码分析; * 网络设备:网卡驱动分析、netfilter使用; * USB、TTY、SPI、IIC、PCIE等架构。 能够学到这个阶段,那么恭喜你,你可以称为一名真正合格的嵌入式工程师了。 Linux驱动我们学习Linux内核最好的一个入口, 在这庞大、浩瀚、错综复杂的内核代码中找到一个突破口, 从而真正走向大神之路! 驱动的学习,主要在于多捋架构,多阅读大牛的代码! **代码读百遍,其义自见!** **代码中自由颜如玉,代码中自由黄金屋!** **每天抱着内核看,像泡女人一样泡她,迟早你会成为大师。** # 四、终极 我想如果能学到这个份上,后面如何发展,已经不需要一口君再多费唇舌了,可以继续学习安卓、QT,也可以深挖物联网、算法,AI、VR、大数据或者钻研Linux内核优化内核等,每个领域独当一面,收入都不会低。 也衷心住院各位还能坚持到这个阶段的,头发依然保持茂密! 最后给大家一个建议,学习编程没有任何捷径可以走,需要花费几年的时间才能有所成,所以我们要提早做好规划,找好大方向,制定好短期、长期的计划,然后按照计划,一点点的实施。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
一口Linux
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交