专栏首页嵌入式Linux系统开发嵌入式驱动工程师学习路线【建议收藏】

嵌入式驱动工程师学习路线【建议收藏】

网上看了很多的嵌入式学习路线,有的比较片面,有的为了博人眼球东拼西凑,几乎把整个行业用得着用不着的技术都写上去了,没有侧重点,简直是劝退指南,还有的纯粹是打广告卖板子招生。

一口君曾经是某见的教学总监,带过的学生也有大几千了,基本都从事linux相关开发工作。

现在在各行各业也基本都是翘楚,有的都成公司技术主管,带领几十人上百人团队。

一口君凭借多年的研发和开发经验,整理了嵌入式学习的最经典路线

下面就为大家介绍学习路线:

一、基础

1. linux基本操作:

需要掌握的知识如下:

  1. 环境的搭建:ubuntu、vmware安装
  2. Linux目录结构;
  3. 文件类型;
  4. 基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,mv,mkdir等,最关键是gcc命令要会用;
  5. 一些简单的shell脚本;
  6. Makefile的编写。

个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。

参考文章如下:

Linux入门的基础知识点汇总,有这篇就够了

linux驱动、ARM学习环境搭建

Linux入门-shell编程-适合小白

一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解

2. c语言:

所谓编程不学C语言,便称码农也枉然。

学Linux,不学编程,建议就不要学了,否则职业后期全是瓶颈

那些和你说学Linux不需要懂编程的都是再耍LM。

学习C语言一定要学习Linux下C编程,C语言网上视频也很多,知识点不一一介绍了。

但是有一点,就是一定要记住,一般的程序员从入门到绝对的精通大概需要2年时间,要想随心所欲写出超高质量的代码,时间因人而异,还要看个人造化。

实际上并不需要每个人都成为大师,能成为一个快快乐乐的小码农,不也是见开心的事吗?

3. 数据结构:

数据结构很重要,但是在这个上面花太多时间,也是没必要的。想进大厂的除外,自己拼命去刷题吧。对于嵌入式方向来说,个人建议只要掌握几个基本的排序和查找算法即可,没必要把所有算法都研究一遍。

玩转内核链表list_head,如何管理不同类型节点的实现(万字文)可以收藏

十大经典排序算法(代码实现),建议收藏

20张图揭开「队列」的迷雾

二叉树详解,非常全,还包含C代码

  1. 能掌握常见的算法比如:冒泡排序、直接插入排序、快速排序、二叉树等。
  2. 链表:双向链表,增删改查。

4. 基础阶段项目

基础阶段,个人强烈建议一定要做一个综合性项目,一定要从0开始写。

建议项目《电话本管理软件》

该项目包含的知识点、功能点:

  1. 包含简单的菜单功能
  2. 链表:包括增、删、改、查、排序等操作的双向链表。
  3. 结构体、数组、指针、二级指针,字符串操作
  4. 排序
  5. 用户登录
  6. 用户电话号码信息的添加、删除、修改

二、进阶

进阶阶段知识点很重要,学完这个阶段的内容,我们就可以用各种库函数+系统调用来自己实现Linux命令:ls、cd、stat、pwd、ifconfig,甚至自己实现一些网络协议:tftp、ftp、http。

即使以后不做linux c开发,有了这些基础,你再去学java、c++你的视野一定会不一样,Linux下系统编程是真正基于一个胸痛来编程的。

为什么我们要学Linux,就是因为他的开放性,有无数的大牛在给Linux添砖加瓦,所有代码都可以看到,而我们根本不用担心版权问题!

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下系统编程非常重要的一个知识点,必须掌握。

参考文章如下:

多线程详解,一篇文章彻底搞懂多线程中各个难点

Linux中常见同步和互斥机制设计原理

Linux信号量(1)-SYSTEM V》

Linux信号量(2)-POSIX 信号量》

Linux互斥锁(1)-线程互斥锁》

进程组、会话、控制终端关系,守护进程详解》

一个多线程的简单例子让你看清线程调度的随机性粉丝提问》

Linux库概念,动态库和静态库的制作,如何移植第三方库》

两个线程,两个互斥锁,怎么形成一个死循环? 粉丝提问》

用了这么多年Linux,你清楚控制台、终端与shell及它们的关系吗?》

多线程详解,一篇文章彻底搞懂多线程中各个难点》

子进程进程的父进程关系》

3. 网络编程

  • TCP/IP协议分层以及每一层的功能;不要看OSI,只要知道即可;
  • socket api的使用,
  • tcp、udp;C/S架构如何创建;
  • 套接字属性的设置;
  • C/S架构;
  • 多进程、多线程网络服务器模型;
  • 任意一款抓包工具使用;
  • 常见的网络协议分析:ping、 tftp、 ftp、http、telnet 等。

网络的重要性不言而喻,应用实在太广了,网络的知识也非常的复杂:网络编程、TCP/IP协议栈、网络拓扑、网卡驱动、各种无线通信协议。

可以收每一大块知识的学习,都需要很长一段时间来入门,并需要一定难度的项目做支撑,才能真正了解和掌握网络。对于嵌入式方向初学者,我们最好先了解一些基础的网络协议知识,然后学习套接字的使用。

参考文章如下:

《22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了)》

《一个端口号可以同时被两个进程绑定吗?

《【粉丝问答7】局域网内终端是如何访问外网?答案在最后 》

《一文包你学会网络数据抓包 》

《【视频】教你如何抓取网络中的数据包!黑客必备技能》

《网络/命令行抓包工具tcpdump详解

《【粉丝问答11】如何在内网搭建TCP服务器并能被外网直接访问》

4. 进阶项目

该阶段可以选择综合项目《多线程聊天室》,实现公聊、私聊、注册登录,互相发送文件等功能。

一口君已经把这个项目拆解成4篇文章,并提供源码,方便大家入门。

从0实现基于Linux socket聊天室

三、高阶

该阶段学习需要开发板配合,建议新手先把之前内容打扎实,再进入这个阶段学习。

开发板的选择,最重要的是资料!资料!资料!资料!资料!资料!资料!资料!

资料不全的板子不要买!

1. ARM

  • arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表,
  • 伪指令、C语言和汇编代码的互相调用、内联汇编;
  • 学会查看常见电路图,了解数据线、信号线、地址线、中断线,常见外设电路图
  • 学会查看各种芯片的用户手册
  • *常见的外设的裸机驱动开发,led、key、adc、pwm、rtc、看门狗、i2c、spi、网卡、flash、USB等

这个阶段的内容,对于了解整个计算机软件的工作原理非常重要,Linux内核的很多机制都要依赖汇编指令,尤其ARM工作模式、寻址、异常,中断,异常向量表这些概念。可以说,掌握了这个阶段的内容,那么单片机、STM32真的就是手到擒来了!

大家也可以参考我写的《ARM系列文章

B站正在更新这个系列的视频教程,

纯奶妈式教学,只要有C基础,绝对学得会!

https://space.bilibili.com/661326452

2. 系统移植

  • uboot移植、uboot参数设置
  • rootfs制作、内核剪裁移植,
  • usb、网卡驱动移植,
  • uboot、linux启动流程,
  • 自己添加uboot命令

这一阶段的内容对于嵌入式工程师来说,在做实际项目的时候,会经常用到,各个厂家的移植步骤会有所差异,但原理基本相同,熟练掌握这些操作,非常必要。

这部分内容其实很复杂,对于新手来说,建议会操作即可,工作后如果在深入研究,再回头研究这些细节。

参考文章

《【问答23】移植Linux:如何制作rootfs?详细教程

19. Cortex-A9 uboot启动代码详解必看》

20.从0学ARM-从0移植uboot支持exynos4412-亲测》

Linux模块文件如何编译到内核和独立编译成模块?》

3. Linux驱动

  • 字符设备架构、inode、cdev、file_operations、file之间关系;
  • platform总线、设备树;
  • 内存管理;
  • 同步互斥机制,自旋锁、信号量、互斥体,原子操作;
  • Linux进程管理
  • 块设备
  • 中断、中断底半部;
  • 等待队列,poll的实现;
  • 常见设备的驱动的编写和代码分析;
  • 网络设备:网卡驱动分析、netfilter使用、网络协议栈架构;
  • USB、TTY、SPI、IIC、PCIE等架构。

能够学到这个阶段,那么恭喜你,你可以称为一名真正合格的嵌入式工程师了。

Linux驱动我们学习Linux内核最好的一个入口, 在这庞大、浩瀚、错综复杂的内核代码中找到一个突破口, 从而真正走向大神之路!

驱动的学习,主要在于多捋架构,多阅读大牛的代码!

代码读百遍,其义自见!

代码中自由颜如玉,代码中自由黄金屋!

每天抱着内核看,像泡女人一样泡她,迟早你会成为大师。

驱动文章可以参考我写的驱动集合

也可以进入我的B站,一口君已经更新了《从0学Linux驱动第一期》

https://space.bilibili.com/661326452

四、终极

我想如果能学到这个份上,后面如何发展,已经不需要一口君再多费唇舌了,可以继续学习安卓、QT,也可以深挖物联网、算法,AI、VR、大数据或者钻研Linux内核优化内核等,每个领域独当一面,收入都不会低。

也衷心住院各位还能坚持到这个阶段的,头发依然保持茂密!

最后给大家一个建议,学习编程没有任何捷径可以走,需要花费几年的时间才能有所成,所以我们要提早做好规划,找好大方向,制定好短期、长期的计划,然后按照计划,一点点的实施

本文分享自微信公众号 - 嵌入式Linux系统开发(Jason_Linux_)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 韦东山:6000字长文教你如何学习嵌入式开发

    我在100ASK_IMX6ULL售后群里,发现很多初学者只有单片机基础,甚至没有单片机基础。在学习Linux时,对很多概念比较陌生,导致不知道学什么,也不知道学...

    韦东山
  • 嵌入式学习路线图

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

    刘盼
  • 嵌入式学习路线图

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

    刘盼
  • 韦东山:6000字长文告诉你如何学习嵌入式linux

    所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。

    韦东山
  • 2018云、大数据、人工智能将上演“三国鼎立”?

    虽然我们喜欢新技术,但一般的企业所有者、IT买家和软件开发人员对这一巨大的创新不太了解,不知道如何将其转化为商业价值。我们将在2018年看到一些趋势,他们的重点...

    BestSDK
  • 嵌入式 Linux 的学习新路线

    很多人喜欢从系统启动流程开始学习:先学习裸机,裸机集合起来就是 u-boot,再学习内核移植、驱动开发,接下来学习根文件系统,最后学习 APP 开发。

    韦东山
  • 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening

    雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时组织雪鸟会议的 Bob 大叔盛情...

    敏捷开发
  • 后浪入海,新人电子工程师的二三事

    六月底的天气有些闷热,树上的蝉正在蓄力,在学校的教育超市买一瓶冰镇可乐,与许久未见的兄弟们碰个杯,将对毕业答辩的紧张和找工作的焦虑都灌进肚子,打个嗝,二氧化碳和...

    AI 电堂
  • 让你轻松学习嵌入式的几种线路图方向

    嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段: 1、嵌入式lin...

    企鹅号小编
  • 该不该放弃嵌入式,单片机这条路?

    知乎有一个比较火的提问,名字叫:该不该放弃嵌入式,单片机这条路?该提问目前浏览量110万+。原文地址:https://www.zhihu.com/questio...

    用户2366192
  • 嵌入式求职分享(全网最全)

    本文会分享一些嵌入式软件岗位的秋招事宜,对所有流程都会有一个描述,事无巨细,希望可以帮到各位读者。

    Jasonangel
  • 嵌入式Linux要学哪些东西?你真的造吗?

    嵌入式Linux要学哪些?一些人总在寻思,怕走了弯路,又怕学的东西离企业需求远。那么今天就请华清远见高级讲师曹大神告诉你,9点浅析嵌入式学习步骤。下面是他本人亲...

    RainMark
  • 创业公司什么阶段需要数据科学家?

    Instacart数据科学副总裁Jeremy Stanley和前LinkedIn数据领导Daniel Tunkelang的这篇文章,可以解答你的所有问题!

    华章科技
  • 作为一个新人,怎样学习嵌入式Linux?

    嵌入式岗位,是介于硬件工程师和软件工程师之前的一个岗位。他的工作内容需要他既懂代码编写,也会硬件板子。

    Jasonangel
  • 802.11抓包软件对比之Microsoft Network Monitor

    从事WiFi嵌入式软件开发的同学,802.11协议层抓包分析是一个需要熟练掌握的一个技能,需要通过分析WiFi底层802.11协议层的数据包来定位问题。同时从学...

    涂小航说智能
  • 一个普通应届生的2020秋招总结

      本硕双非,本科电子信息工程,硕士电子与通信工程。导师申请的项目中有一部分需要用Stm32实现,所以自己在硕士期间接触Stm32比较多。当时也考虑到,如果只会...

    嵌入式与Linux那些事
  • 《MIT科技评论》“35位35岁以下科技创新青年”名单出炉!AI领域有5人入选 | 2020中国区

    今日,《麻省理工科技评论》2020年中国区“35 岁以下科技创新 35 人”榜单出炉。其中,AI领域相关人物共有5人入选,分别是:

    计算机视觉
  • 灵魂拷问:嵌入式行业真的没前途吗?

    前辈您好,我是一名大一即将大二的学生,对嵌入式挺感兴趣的,想要以嵌入式作为发展方向,但是上网查嵌入式,看到的几乎90%都是负面评价,也加了不少交流群,对嵌入式的...

    李肖遥
  • 嵌入式书籍推荐

    有读者反馈,单看零碎的知识点,自己心中没底。还是看书更有框架一些,所以今天给大家推荐一些经典书籍,书籍电子版我已经发到百度网盘群。

    Jasonangel

扫码关注云+社区

领取腾讯云代金券