在招聘软件上看了很多岗位,其实基本要求都是比较统一的:
- C/C++
- 熟悉Linux操作系统
- 了解在ARM芯片上的交叉编译
- Linux多线程、多进程、内存共享、网络通信、信号处理、IO操作等编程技能
- Linux系统环境下的软件开发相关知识
注意:Linux应用开发中,几乎没有什么硬件知识(有的话也是极少),所以甚至可以在不具备硬件知识的情况下学习。所以很多学纯软想转行或者学历较高的同学,我都是推荐这个方向的。
关于学嵌入式Linux是不是要必须先学单片机,我们之前也和老师探讨过,做了这样一个视频,大家感兴趣可以去看一看学习嵌入式Linux必须要先学单片机吗? 嵌入式开发/C语言/STM32/Linux/单片机/Linux和单片机薪资对比/项目经验/开发_哔哩哔哩_bilibili
嵌入式Linux应用开发相较于STM32来说,自学的难度还是要大很多,而且一旦没有规划好学习路线,非常容易走弯路。
下面是我整理的具体学习路线,希望能够帮助到正在学习Linux应用的小伙伴们
基础学习:
-
编程基础
-
1. C语言基础
学习内容:
1)基本语法:常量/变量/关键字、数据类型、输入/输出、运算符、表达式、判断、循环、数组
2)函数:定义、声明、参数和返回、递归函数等
学习资源:
这里补充一下之前在单片机学习路线视频里提到,但没有具体写在思维导图里的一个内容,就是视频也推荐大家在中国大学慕课或者学堂在线上进行观看,这种平台上也有很多免费的课程,同时他会有配套的练习题目
拿翁凯老师的《C语言程序设计》举例,它不仅按照一周的时间来安排学习内容,而且每周还有练习的题目。
程序设计入门——C语言_浙江大学_中国大学MOOC(慕课) (icourse163.org)
其他学习资源可以参考之前的单片机学习路线,这里就不赘述了
需要单片机和Linux应用完整思维导图的直接+威信:linglv03
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)
也可以在郑莉老师的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)
《Linux命令行与shell脚本编程大全》
-
编译/调试工具
学习内容:
1)GCC编译
2)Makefile
3)GDB调试
学习资源:
① 视频:
里面也有不少Linux开发环境和Linux操作系统的相关知识
② 书籍:
英文好的同学可以直接看 GNU官网关于 GCC和 GDB的文档
像这个GCC, the GNU Compiler Collection - GNU Project
《debuging with gdb》
英文版:Top (Debugging with GDB) (sourceware.org)
中文版:Debugging With GDB中文版(带目录) - 豆丁网 (docin.com)
《跟着我一起写makefile》
GitHub - seisman/how-to-write-makefile: 跟我一起写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
视频里推荐的项目文档也给大家整理好了
进阶学习:
-
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版)》
数据结构(上) - 清华大学 - 学堂在线 (xuetangx.com)
学习资源:
① 视频:
这里也推荐翁凯老师的视频,附上网易云课堂的免费学习地址
面向对象程序设计-C++ - 网易云课堂 (163.com)
现代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进阶项目
不推荐没做过Linux项目的新手通过购买录播课,来学习相关Linux项目。我们之前卖过低价99元的录播课+完整代码(不带答疑),但基本没有人能够做出来。所以我们还是推荐大家来体验我们的【老师一对一会议辅导】
-
源码学习
学习内容:
1)TCP:轻量级TCP/IP协议
地址:lwIP - 轻量级 TCP/IP 堆栈 - 摘要 [Savannah] (nongnu.org)
2)HTTP:轻量级http服务器
地址:Tiny HTTPd 下载 |SourceForge.net
3)Nginx:高性能http服务器
4)Redis:key-value存储系统
地址:Redis - The Real-time Data Platform
-
代码可移植
学习内容:
平台数据类型、对齐、大小端、多用库函数
其他方向需额外学习:
-
人工智能(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校招学习路线,适合应届生参加校招来参考