嵌⼊式驱动学习路线
⽹上看了很多的嵌⼊式学习路线,有的⽐较⽚⾯,有的为了博⼈眼球东拼西凑,⼏乎把整个⾏业⽤得着⽤不着的技术都写上去了,没有侧重点,简直是劝退指南,还有的纯粹是打⼴告卖板⼦招⽣。
⼀⼝君曾经是某见的教学总监,带过的学⽣也有⼤⼏千了,基本都从事linux相关开发⼯作。
现在在各⾏各业也基本都是翘楚,有的都成公司技术主管,带领⼏⼗⼈上百⼈团队。
⼀⼝君凭借多年的研发和开发经验,整理了嵌⼊式学习的最经典路线
下⾯就为⼤家介绍学习路线:
⼀、基础
1. linux基本操作:
个⼈建议只要会⼀些基本的操作就⾏了,不需要太深⼊的学习每⼀个命令,⽤到的时候会去搜索就⾏了。
《》
《》socket编程聊天室基本流程
《》
《》
需要掌握的知识如下:
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++你的视野⼀定会不⼀样。《》
Linux中常见同步和互斥机制设计原理
Linux信号量(1)-SYSTEM V
Linux信号量(2)-POSIX 信号量
Linux互斥锁(1)-线程互斥锁
嵌⼊式数据库sqlite3【基础篇】-基本命令操作,⼩⽩⼀看就懂必看
嵌⼊式数据库sqlite3【进阶篇】-⼦句和函数的使⽤,⼩⽩⼀⽂⼊门必看
如何⽤C语⾔操作sqlite3,⼀⽂搞懂必看
搞懂进程组、会话、控制终端关系,才能明⽩守护进程⼲嘛的?必看
⼀个多线程的简单例⼦让你看清线程调度的随机性粉丝提问
Linux库概念,动态库和静态库的制作,如何移植第三⽅库必看
两个线程,两个互斥锁,怎么形成⼀个死循环?粉丝提问
⽤了这么多年Linux,你清楚控制台、终端与shell及它们的关系吗?
多线程详解,⼀篇⽂章彻底搞懂多线程中各个难点
[粉丝问答6]⼦进程进程的⽗进程关系必看
22张图详解浏览器请求数据包如何到达web服务器(搞懂⽹络可以毕业了)
⼀个端⼝号可以同时被两个进程绑定吗?粉丝提问
【粉丝问答7】局域⽹内终端是如何访问外⽹?答案在最后粉丝提问
⼀⽂包你学会⽹络数据抓包粉丝提问
【视频】教你如何抓取⽹络中的数据包!⿊客必备技能
⽹络/命令⾏抓包⼯具tcpdump详解粉丝提问
【粉丝问答11】如何在内⽹搭建TCP服务器并能被外⽹直接访问粉丝提问
从0实现基于Linux socket聊天室-多线程服务器模型-1
从0实现基于Linux socket聊天室-多线程服务器⼀个很隐晦的错误-2
从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3
从0实现基于Linux socket聊天室-增加公聊、私聊-4 必看
1. ⽂件IO
掌握Linux⽂件IO的⼀套系统调⽤API:open、read、write、lseek,close等。
熟练写出⽂件拷贝等功能模块。
理解I/O、缓冲的概念。
在Linux下,⼀切皆⽂件,我们操作操作许许多多的外设(字符设备、套接字、⽂件等等)就像操作⽂件⼀样。
要想知道如何操作⽂件和外设,我们就必须熟练掌握⽂件IO,这是我们学习Linux下⾯编程最基本的知识点。
2. 进程线程
进程与线程的概念
掌握常⽤的函数fork、exec族函数等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. 进阶项⽬
该阶段可以选择综合项⽬《多线程聊天室》,实现公聊、私聊、注册登录,互相发送⽂件等功能。
《》
三、⾼阶
该阶段学习需要开发板配合,建议新⼿先把之前内容打扎实,再进⼊这个阶段学习。
开发板的选择,最重要的是资料!资料!资料!资料!资料!资料!资料!资料!
没有资料的板⼦不要买!
⼤家也可以参考我写的《》
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内核优化内核等,每个领域独当⼀⾯,收⼊都不会低。
最后给打⼤家⼀个建议,学习编程没有任何捷径可以⾛,告诉你可以速成的,最好留个⼼眼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。