Linux应用开发完整学习路线
嵌入式自学DeepMeet
2024年10月25日 17:23

嵌入式Linux应用开发就业可选择的行业非常多,智能家居、汽车电子、医疗器械、通信设备、半导体、工业自动化、音视频等等。

在招聘软件上看了很多岗位,其实基本要求都是比较统一的: 1.  C/C++ 2.  熟悉Linux操作系统 3.  了解在ARM芯片上的交叉编译 4.  Linux多线程、多进程、内存共享、网络通信、信号处理、IO操作等编程技能 5.  Linux系统环境下的软件开发相关知识 注意:Linux应用开发中,几乎没有什么硬件知识(有的话也是极少),所以甚至可以在不具备硬件知识的情况下学习。所以很多学纯软想转行或者学历较高的同学,我都是推荐这个方向的。 关于学嵌入式Linux是不是要必须先学单片机,我们之前也和老师探讨过,做了这样一个视频,大家感兴趣可以去看一看学习嵌入式Linux必须要先学单片机吗? 嵌入式开发/C语言/STM32/Linux/单片机/Linux和单片机薪资对比/项目经验/开发_哔哩哔哩_bilibili​

嵌入式Linux应用开发相较于STM32来说,自学的难度还是要大很多,而且一旦没有规划好学习路线,非常容易走弯路。

下面是我整理的具体学习路线,希望能够帮助到正在学习Linux应用的小伙伴们 基础学习: ● 编程基础 1.  C语言基础 学习内容: 1)基本语法:常量/变量/关键字、数据类型、输入/输出、运算符、表达式、判断、循环、数组 2)函数:定义、声明、参数和返回、递归函数等 学习资源: 这里补充一下之前在单片机学习路线视频里提到,但没有具体写在思维导图里的一个内容,就是视频也推荐大家在中国大学慕课或者学堂在线上进行观看,这种平台上也有很多免费的课程,同时他会有配套的练习题目 拿翁凯老师的《C语言程序设计》举例,它不仅按照一周的时间来安排学习内容,而且每周还有练习的题目。 https://www.icourse163.org/course/ZJU-199001

其他学习资源可以参考之前的单片机学习路线,这里就不赘述了

2.  C语言进阶

学习内容: 1)指针:声明、运算、数组指针和指针数组、函数指针等 2)结构体:定义、初始化、使用 3)内存管理:内存模型、动态内存分配、动态内存释放 4)数据结构:栈、队列、链表、树 5)算法:排序、查找 6)代码规范:缩进、注释、命名、可读性

学习资源:

《算法导论》、《数据结构(C语言版)》、《编译原理》

3.  C++基础

学习内容: 1)基础语法:参考C语言部分(基础和进阶) 2)面向对象编程:类、对象、封装(成员变量、成员函数、this指针) 3)常用关键字:const、inline、static、explicit、volatie等 4)运算符重载:继承(对象初始化顺序、同名成员问题、多继承、虚继承等)和多态(虚函数、纯虚函数、抽象类等) 5)推荐这里学习做一个C++的小项目,我们这边一般是一个英雄怪物的小游戏开发

学习资源:

① 视频: 学堂在线上清华大学郑莉老师的《C++语言程序设计基础》 推荐这个平台是因为这个平台上在讲课过程中会弹出选择、填空题来巩固知识点,每一章结束一般还会有三道编程题来给大家练习 C++语言程序设计基础 - 清华大学 - 学堂在线 (xuetangx.com) https://www.xuetangx.com/course/THU08091000247/21555719

也可以在郑莉老师的B站上观看

郑莉课堂投稿视频-郑莉课堂视频分享-哔哩哔哩视频 (bilibili.com)​

黑马程序员的这个也不错

黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili​

C++经典项目:

【纯C++】项目实战:经典俄罗斯方块游戏_哔哩哔哩_bilibili​

② 书籍:

《C++ Primer 第五版》或者《C++ Primer Plus 第六版》 前者适合有一些C语言基础的选手,看这本书一定不要跳过课后练习题,尤其是每小节的后2-3节;后者是完全小白向的书籍,讲的非常详细。

● Linux开发环境搭建

学习内容: 1)虚拟机安装、Linux系统安装 2)Linux开发环境环境搭建、开发板操作 学习资源: VMware安装及Linux-Ubuntu安装,和标题一样真的全程无废话,满脑子只有“下一步” 两分半钟完成VMware安装及Linux-Ubuntu安装(全程无废话)_哔哩哔哩_bilibili​

环境搭建和开发板操作,推荐韦东山的这个视频

【第3篇】环境搭建与开发板操作(IMX6ULL_Pro)_哔哩哔哩_bilibili​

● Linux操作系统

学习内容: 1)基本的Linux操作命令和常用工具 2)基本的shell编程 学习资源: ① 视频: 韦东山Linux应用开发基础知识,包含下面的编译、系统编程等内容,下面就不再赘述了 【第4篇】嵌入式Linux应用开发基础知识_哔哩哔哩_bilibili​

② 书籍:

《鸟哥的Linux私房菜》 鸟哥的 Linux 私房菜 -- 浅谈备份策略 (vbird.org) http://cn.linux.vbird.org/linux_basic/linux_basic.php

《Linux命令行与shell脚本编程大全》

● 编译/调试工具

学习内容: 1)GCC编译 2)Makefile 3)GDB调试 学习资源: ① 视频: 里面也有不少Linux开发环境和Linux操作系统的相关知识 7.1 gcc的安装和版本查看_哔哩哔哩_bilibili​

② 书籍:

英文好的同学可以直接看 GNU官网关于 GCC和 GDB的文档

《debuging with gdb》

英文版:https://sourceware.org/gdb/current/onlinedocs/gdb.html/中文版:https://www.docin.com/p-687799968.html#:~:text=Debugging

《跟着我一起写makefile》

GitHub - seisman/how-to-write-makefile: 跟我一起写Makefile重制版 https://github.com/seisman/how-to-write-makefile ● Linux系统环境编程 这部分是学习的重点 1.  多任务编程 学习内容: 1)进程:进程控制、守护进程、进程间通信等 2)线程:线程控制和编程等 2.  文件I/O编程 学习内容: 文件/文件描述符、文件指针/文件流、标准I/O流、标准I/O操作、非阻塞I/O、异步I/O、多路复用等 3.  网络编程 学习内容: TCP/IP协议、Socket通信和应用、TCP编程、UDP编程 整体学习资源: ① 视频: 尚硅谷嵌入式Linux应用层开发,linux网络编程,linux进程线程,linux文件io_哔哩哔哩_bilibili​ ② 书籍: 《Linux多线程服务端编程》、《Unix环境高级编程》、《TCP/IP详解》

● Linux基础项目

学习内容: 这里推荐几个基础阶段的Linux项目 ① 基于Linux的在线词典

② 基于Linux的视频播放器

③ 基于IMX6的无线点菜系统

学习资源:

我们自己制作的Linux项目合集,里面有一些Linux项目的视频教程以及音视频开发相关基础教程,推荐大家观看! 【含实战项目教程】嵌入式Linux应用开发项目及视频资料推荐,内含音视频开发教程 计算机/嵌入式开发/物联网/完整项目教程分享/单片机/STM32/C语言_哔哩哔哩_bilibili​ 视频里推荐的项目文档也给大家整理好了 链接附上:https://docs.qq.com/sheet/DQ21sUkZvaUZsYkx1

进阶学习:

● C++进阶 Linux C++是一个很不错的就业方向,Linux很多方向的工作都是以Linux C++作为基础的,比如自动驾驶等等 学习内容: 1)类型转换:static_cast、reinterpret_cast、dynamic_cast、const_cast 2)函数转换 3)泛型编程:函数模板、类模板 4)异常处理 5)STL容器:vector、string、list、、set、map、depue、stack等 6)现代C++新特性 7)这里也推荐做一个C++项目,我们一般是一个五子棋的小游戏开发 8)数据结构和算法(C++语言版) 之前是了解,现在需掌握 这一部分视频推荐邓俊辉老师在学堂在线上的课程,书籍也推荐邓俊辉老师的《数据结构(C++语言版 第3版)》 https://next.xuetangx.com/course/THU08091000384/4231547

学习资源:

① 视频: 这里也推荐翁凯老师的视频,附上网易云课堂的免费学习地址

https://study.163.com/course/introduction/271005.htm#:~:text=%

现代C++教程C++11-14进阶用法

学校不教,大厂就业必会C++11-14进阶用法,秋招/计算机/算法/编程/程序员/线程/代码/STL/黑马程序员/cpp/应届/高性能网络/存储/基础架构/安全_哔哩哔哩_bilibili​

② 书籍:

Scott Mayer 的《Effective C++》、《More Effective C++》、《Effective STL》,这也是《剑指Offer》的作者推荐的书,不少C++面试题目都会考察到其中的知识点。

● Qt开发

学习内容: 对话框/窗口、信号与槽、绘图、组件/控件/布局/事件、文件操作、多线程、定时器、网络通信 学习资源: 两个基础小项目:Linux环境下的QQ程序和基于IMX6的无线点菜系统

还有几个进阶项目

更多项目详见教学大纲,+V:linglv03,领取一份

● Linux进阶项目

● 源码学习

学习内容: 1)TCP:轻量级TCP/IP协议 地址:https://savannah.nongnu.org/projects/lwip/ 2)HTTP:轻量级http服务器 地址:https://sourceforge.net/projects/tinyhttpd/download 3)Nginx:高性能http服务器

地址:http://nginx.org/en/download.html

4)Redis:key-value存储系统 地址:https://redis.io/ ● 代码可移植 学习内容: 平台数据类型、对齐、大小端、多用库函数 其他方向需额外学习: ● 人工智能(AI) 1)图像识别:Opencv 2)图像处理:图像变换、压缩、增强、提取等 3)Python语言和Python库的学习 4)机器人:ROS 5)深度学习:TensorFlow … 可学习项目:

● 自动驾驶

基础工具学习、ROS、CyberRT、DDS框架等

● 音视频

学习内容: FFmpeg、H264、H265、SRT、RTP、RTSP、MP4、ONVIF等

学习资源:

基于瑞芯微RV1126实现USB摄像头 项目介绍和部分教学视频: 嵌入式Linux音视频项目介绍-基于瑞芯微RV1126实现USB摄像头,学它轻松拿到offer!/黄金稀缺才高价,学技术呢?浅聊一下如何实现自身价值_哔哩哔哩_bilibili​

更完整项目教学部分:

【项目7】基于瑞芯微RV1126实现USB摄像头1-效果演示及课程介绍_哔哩哔哩_bilibili​

● 汽车电子

CAN、LIN、UDS、车规级MCU、Autosar、ROS、SLAM、hypervisor、车载以太网、DoIP等

● 物联网

传感器:温湿度、大气、距离等 无线:蓝牙、Lora、ZigBee、Wifi等 协议:MOTT、COAP等 应用:大数据分析、日志事件、OTA升级等 ● 通信 Wifi:IEEE 2G/4G/5G/NB-IOT:3GPP 路由/交换:OSPE、BGP、MPLS、BFD等 最后推荐一下我们的Linux校招学习路线,适合应届生参加校招来参考 【嵌入式Linux校招】最强学习路线​