【主线剧情 0.0】Linux 学习资源大综合

【主线剧情 0.0】Linux 学习资源大综合

主线剧情-0-Linux学习资源大总结

对收集到的比较丰富的 Linux 学习相关的资料进行整理。注,如果链接挂了请告诉我,如果链接里的内容被删了那么直接搜文章名字试试也许会搜出来很多转载的 “备份”。

注:老规矩,知乎排版一般,推荐去 Github/Gitee 仓库看, 在 Github 上的原版文章日后可能会更新 ,但这里不会跟进。 文章的 Gitee 仓库地址,Gitee 访问更流畅


1 尝鲜

前置基础

  • C语言基础(可选的 数据结构与算法)。相关文章:

C语言基础 【规范】C & MCU编写规范和其他 - 知乎 (zhihu.com)

数据结构与算法 数据结构与算法简述和CS综合 - 知乎 (zhihu.com)

  • 单片机使用和理解的经验(对数模电、计算机结构 / 原理 / 总线 和 网络通讯 等 有认识)。(可选的)接触过 单片机平台的 小型实时操作系统(如 FreeRTOS、RTT、ucos 等)。相关文章:

模电里的运放分析 【手撕运放】运放的“第一原理”式定量分析法 - 知乎 (zhihu.com)

嵌入式方向学习的基本路线 【目录贴】软硬件规范化 - 知乎 (zhihu.com)

单片机如何学习 超快 STM32 系统入门指南 - 知乎 (zhihu.com)

对 ARM Cortex-A 系列处理器的概念了解 【主线剧情 番外01】ARM & SOC 系列快速鸟瞰 - 知乎 (zhihu.com)

(选看)ARM Cortex-A 系列处理器的 裸机编程 【主线剧情01】ARM & i.MX6ULL 基础学习记录 - 知乎 (zhihu.com) Gitee仓库

  • Linux 系统的概念、使用,常用命令、Vim、GCC、Make、包管理等,基本的 编译工具链获取,应用、内核等的编译的概念。相关文章:

【主线剧情02】ARM & Linux 基础学习记录 - 知乎 (zhihu.com) CSDN Gitee仓库

路线的内容

总的来说(按顺序)

  1. 前置基础打牢(参考 前面的 “前置基础” 一节)。
  2. Linux 应用编程(文件IO、内存管理、多任务编程(进程和线程)、网络编程 和 图形界面QT 等)。细节内容见 “Linux 应用编程内容补充” 一节。
  3. Linux 驱动编程(字符设备、块设备、网络设备、总线设备 等)。细节内容见 “Linux 驱动编程内容补充” 一节。

深入层面

  • 内核研读。
  • 音频,视频子系统。
  • Linux 移植(uboot + kernel + rootfs 的 配置和编译 等)。比较深而且由于工作的细分工可能用的不多。
  • 等等。

2 网络资料收集整理

图片都有水印,侵删。

路线相关

0、 韦东山:6000字长文告诉你如何学习linux (qq.com)

1、清华远见教程的路线图。

2、一张网图(侵删)。

3、一张超大图,非常丰富的内容罗列: 嵌入式:我不是针对谁,我是说在座的Javaer都是弟弟,尤其程序羊 (qq.com) ,原图在 Github 仓库里 rd2coding/Road2Coding: 编程之路 (github.com) 。 下面是概略截图,高清原图看上面的链接。

4、一些介绍 学习路线 的 杂网文。

!学习来源!

下面仅为个人见到的选择的推荐,欢迎补充!

  • 韦东山 的 系列教程,靠谱而较全面,跟着走就成。

Linux 学习 B 站视频

百问网 资源下载站

百问网论坛

  • 正点原子/野火 的 Linux 系列教程,靠谱而较全面,跟着走就成。

正点原子 Linux 学习 B 站视频 正点原子 资源下载站 论坛

野火 Linux 学习 B站视频 野火 资源下载站 论坛

  • 买书(驱动和应用),参考 下面 “书籍推荐” 一节。
  • 其它 嵌入式 Linux 开发板 和 资料 的提供商,他们都提供了开发板配套的较完整的 SDK 和 硬件方案,对于开发的参考价值极大。

百问网 Linux 板 产品页 & 米尔 Linux 板 产品页

Firefly | 让科技更简单,让生活更智能 (t-firefly.com)

Orange Pi PC - 香橙派

就这些,我不会列成吨的资料骑脸。。

书籍推荐

注,书一般都是大 书,要 入门学习 推荐参考上面 “!!!学习来源!!!” 一节里的,看书一般是 复习知识 查漏补缺 用时现查 用的。

1、网络推荐

2、引自 coding-style-and-more: C 编写规范和其他。CC-BY-NC-SA 4.0。 (gitee.com) 。这些又都是典型的大厚书。

引自网络,侵删。
算法和数据结构:数组、链表、二叉树、堆栈、排序算法、B+/B-树、DP(动态规划)等;
操作系统:IO、存储器、多线程/多进程、同步机制、处理器调度及死锁、设备管理、通道等;
计算机组成原理:冯诺依曼计算机组成、计算机层次结构、计算机性能指标等;
网络底层:HTTP、HTTPS、DNS、ARP、TCP、IP、ICMP、UDP、FTP、SMTP、的实现底层;
多进程/多线程编程:进程通信的方式(共享内存、pipe、Socket编程等)、同步、死锁及解决方案、线程池的实现、进程/线程的操作系统实现原理、进程的状态及切换和调度等。


  • 《嵌入式C语言的自我修养》 从沙子讲到CPU,从编辑器讲到编译器,从高阶C语言讲到内存管理,从GNU讲到多任务编程。
  • 《计算机体系结构》(经典),《计算机操作系统》/《现代操作系统》/《深入理解计算机系统》。
  • 《编码的奥秘》,相关介绍/推荐 想练习《编码的奥秘》里面的知识,有什么软件有帮助? - 知乎 (zhihu.com) 。《编译原理》(经典),《深入分析GCC》。
  • 网络协议如《计算机网络》、《TCP-IP详解卷一/卷二/卷三》, 想深入了解 HTTP 协议,有哪些值得推荐的书籍? - 知乎 (zhihu.com)
  • 嵌入式应用相关:《GNU Make》,《Debugging with GDB》,《Linux 高级程序开发》,《POSIX 多线程程序设计》,《嵌入式Linux基础教程》,《嵌入式Linxu应用开发完全手册》,《嵌入式Linxu应用程序开发详解》。
  • 嵌入式底层相关:内核相关:《深入理解Linux内核》,《Linux内核源代码情景分析》,《Linux内核设计与实现》;驱动相关:《Linux设备驱动程序》,《Linux设备驱动开发详解》,《Linux驱动开发入门与实践》。

3、 Linux 驱动开发相关书籍

面经相关

部分引自 coding-style-and-more: C 编写规范和其他。CC-BY-NC-SA 4.0。 (gitee.com)

嵌入式相关

一些文章

算法相关

内核研读

一些基础概念

深入研读

网络杂文

网上东西非常杂,这里会推荐一些我个人见到的好的。

休闲阅读 Linux的功能有多强大? - 知乎 (zhihu.com)

Linux 应用编程内容补充

以下摘自网络,侵删。
Linux高级编程
Linux 标准I/O编程
《Linux 标准I/O编程 | 打开文件fopen》
《Linux 标准I/O编程 | 关闭文件fclose》
《Linux 标准I/O编程 | 读完文件内容fread》
《Linux 标准I/O编程 | 写入文件内容fwrite》
《Linux 标准I/O编程 | 定位fseek》
《Linux 标准I/O编程 | 将缓存写入文件fflush》
《Linux 文件I/O编程 | 小项目:读写ini配置文件》
Linux 进程编程
《Linux 进程编程 | 创建进程fork》
《Linux 进程编程 | 创建进程vfork》
《Linux 进程编程 | 退出进程exit》
《Linux 进程编程 | 等待进程退出wait/waitpid》
《Linux 进程编程 | 调用外部程序exec》
《Linux 进程编程 | 调用外部程序system》
Linux 进程间通讯编程
《Linux 进程间通讯编程 | 管道》
《Linux 进程间通讯编程 | fifo》
《Linux 进程间通讯编程 | popen、pclose》
《Linux 进程间通讯编程 | 信号量》
《Linux 进程间通讯编程 | 共享内存》
《Linux 进程间通讯编程 | 多进程小项目:工厂与顾客(生产者消费者模型)》
Linux 多线程编程
《Linux 多线程编程 | 为什么需要线程》
《Linux 多线程编程 | 创建线程pthread_create》
《Linux 多线程编程 | 结束线程pthread_exit》
《Linux 多线程编程 | 等待线程退出pthread_join》
《Linux 多线程编程 | 互斥锁的创建销毁ptread_mutex_init、pthread_mutex_destroy》
《Linux 多线程编程 | 互斥锁的加锁与解锁ptread_mutex_lock、pthread_mutex_unlock》
《Linux 多线程编程 | 条件变量的创建销毁pthread_cond_init、pthread_cond_destroy》
《Linux 多线程编程 | 条件变量的等待与取消等待pthread_cond_init、pthread_cond_destroy》
《Linux 多线程编程 | 小项目:工厂与顾客(生产者消费者模型)》
Linux tcp/ip网络编程
《Linux tcp/ip网络编程 | 创建socket》
《Linux tcp/ip网络编程 | 关闭close》
《Linux tcp/ip网络编程 | 发送send》
《Linux tcp/ip网络编程 | 接收recv》
《Linux tcp/ip网络编程 | 连接服务端connect》
《Linux tcp/ip网络编程 | 监听等待客户端连接listen》
《Linux tcp/ip网络编程 | 获取客户端连接accetp》

Linux 驱动编程内容补充

摘自网络,侵删。
1. 学会写简单的makefile
2. 编一应用程序,可以用makefile跑起来
3. 学会写驱动的makefile
4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
5. 写一完整驱a动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。
6. 写一block驱动, 加上read,write,ioctl,poll等各种函数实现。
7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是linux开发的基本功。
8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。
9. 看内核中实际应用的驱动代码。 你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现, 但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。    推荐您看2.6.20中integrated的一个驱动 kvm, 记得是在driver/lguest下,很好玩的, 就是linux下的虚拟机驱动, 代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中, 然后客户机可以有自己的4G虚拟地址空间。
10. 看完驱动欢迎您进入Linux kernel学习中来。
最简单的方法,跟着ldd(linux devive driver)做一遍。

全栈之路

p.s 只是总结看看

  • 自动控制原理&信号与系统&英语。
  • 电路、数模电基础。
  • 各类电路拓扑,各类电源、各类电机、各类接口、各类保护。
  • 原理图&PCB绘制&绘制规范和技巧。
  • 高速信号&信号完整性&电源完整性&EMC&射频天线。
  • C/C++语言基础&编程规范&开发模式。
  • MCU编程(各类外设,通讯接口,总线,USB)。
  • RTOS编程&LWIP网络编程。
  • 数据结构与算法(堆、栈、链、树、图;串匹配、排序、搜索、动态规划.etc)。
  • 计算机体系结构,计算机操作系统,计算机网络,编译原理。
  • Vim、GCC、Make、Git、APT。
  • uboot、kernel、rootfs 的 编辑配置、移植、编译 和 源码研读。
  • Linux驱动(字符设备、块设备、网络设备、总线设备 等)。
  • Linux应用(文件IO、内存管理、多任务编程、网络编程 和 图形界面QT 等)。
  • 音频应用,视频应用,摄像头,总线开发(每一块都是专家)。
  • 机器学习,深度学习。
  • 上位机。
  • 前端/后端。
  • 安全。

p.s 术业有专攻

编辑于 2022-03-24 18:56

文章被以下专栏收录