【主线剧情 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仓库 。
路线的内容
总的来说(按顺序)
- 前置基础打牢(参考 前面的 “前置基础” 一节)。
- Linux 应用编程(文件IO、内存管理、多任务编程(进程和线程)、网络编程 和 图形界面QT 等)。细节内容见 “Linux 应用编程内容补充” 一节。
- Linux 驱动编程(字符设备、块设备、网络设备、总线设备 等)。细节内容见 “Linux 驱动编程内容补充” 一节。
深入层面
- 内核研读。
- 音频,视频子系统。
- Linux 移植(uboot + kernel + rootfs 的 配置和编译 等)。比较深而且由于工作的细分工可能用的不多。
- 等等。
2 网络资料收集整理
图片都有水印,侵删。
路线相关
0、 韦东山:6000字长文告诉你如何学习linux (qq.com) 。
1、清华远见教程的路线图。
2、一张网图(侵删)。
3、一张超大图,非常丰富的内容罗列: 嵌入式:我不是针对谁,我是说在座的Javaer都是弟弟,尤其程序羊 (qq.com) ,原图在 Github 仓库里 rd2coding/Road2Coding: 编程之路 (github.com) 。 下面是概略截图,高清原图看上面的链接。
4、一些介绍 学习路线 的 杂网文。
- ARM+LINUX嵌入式学习路线 (qq.com) 。
- 学技术不难,重要的是怎么规划,给嵌入式开发的你一个目标 (qq.com) 。
- 17000字嵌入式系统基础知识总结,太全啦! - 知乎 (zhihu.com) 。
- 成为一名嵌入式高手,必备的技能清单和升级线路图_Linux (sohu.com) 。
- 嵌入式Linux+Android学习路线图 (qq.com) 。
- 正点原子左忠凯的Linux学习之路_ 哔哩哔哩 _bilibili 。
!学习来源!
下面仅为个人见到的选择的推荐,欢迎补充!
- 韦东山 的 系列教程,靠谱而较全面,跟着走就成。
百问网论坛 。
- 正点原子/野火 的 Linux 系列教程,靠谱而较全面,跟着走就成。
正点原子 Linux 学习 B 站视频 , 正点原子 资源下载站 , 论坛 。
野火 Linux 学习 B站视频 , 野火 资源下载站 , 论坛 。
- 买书(驱动和应用),参考 下面 “书籍推荐” 一节。
- 其它 嵌入式 Linux 开发板 和 资料 的提供商,他们都提供了开发板配套的较完整的 SDK 和 硬件方案,对于开发的参考价值极大。
百问网 Linux 板 产品页 & 米尔 Linux 板 产品页 。
Firefly | 让科技更简单,让生活更智能 (t-firefly.com) 。
就这些,我不会列成吨的资料骑脸。。
书籍推荐
注,书一般都是大 厚 书,要 入门学习 推荐参考上面 “!!!学习来源!!!” 一节里的,看书一般是 复习知识 、 查漏补缺 和 用时现查 用的。
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 驱动开发相关书籍
- linux内核和驱动开发,有什么经典的书籍推荐吗? - 知乎 (zhihu.com) 。
- 想成为 Linux 驱动工程师,需要读些什么书? - 知乎 (zhihu.com)
- 嵌入式软件开发必看书籍推荐(C/C++/linux/软件) - 知乎 (zhihu.com) 。
- 大家都一下推荐成吨的书,这么多书中,总得选一两个,个人觉得目前有口碑、属经典、比较常见的是这两个:经典的 LDD《Linux Device Drivers》和 有国内有口碑的 《Linux设备驱动开发详解-宋宝华》。
面经相关
部分引自 coding-style-and-more: C 编写规范和其他。CC-BY-NC-SA 4.0。 (gitee.com) 。
嵌入式相关
- EmbeddedSoftwareEngineerInterview: ZhongYi-LinuxDriverDev/EmbeddedSoftwareEngineerInterview: 嵌入式软件工程师笔试面试指南,主要收录笔试面试八股文。包括C/C++,计算机基础,操作系统,Linux驱动,Arm体系与架构,网络编程,大厂笔试面试题等。持续更新中~~有问题可以加我微信,LinuxDriverDev (github.com) 。
- embedded-notes: xiaowenxia/embedded-notes: 嵌入式linux软件开发、嵌入式linux驱动开发、c语言、单片机开发、IOT开发等面试要点记录 (github.com) 。
一些文章
- 从事嵌入式行业的你,现在年薪多少,有什么经历想和大家分享? - 知乎 (zhihu.com) 。
- 嵌入式面试题,不断更新 - 知乎 (zhihu.com) 。
- 嵌入式软件工程师笔试面试指南 - 知乎 (zhihu.com) 。
- 2020年嵌入式软件秋招的一点经验和对嵌入式软件未来的一点思考 - 知乎 (zhihu.com) 。
算法相关
- hello-algorithm 基础、刷题、面经和汇总 geekxh/hello-algorithm: 针对小白的算法训练 | 包括四部分:①.算法基础 ②.力扣图解 ③.大厂面经 ④.CS_汇总 | 附:1、千本开源电子书 2、百张技术思维导图(项目花了上百小时,希望可以点 star 支持, 感谢~) (github.com) 。网站版 小浩算法 (geekxh.com) 。
- CS-Notes 算法和刷题、操作系统、网络、数据库、系统设计等 CyC2018/CS-Notes: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计 (github.com) 。网站版 CS-Notes (cyc2018.xyz) 。
- LeetCode C++ 题解: soulmachine/leetcode: LeetCode题解,151道题完整版 (github.com) 。
内核研读
一些基础概念
- Linux内核的五大模块_~青萍之末~的博客-CSDN博客_linux内核模块 ,进程调度,进程间通信模块(包括管道、命名管道、消息队列、信号量和共享内存等),内存管理模块,文件系统模块,网络接口模块。 Linux内核四大核心框架 - 知乎 (zhihu.com) 。
- Linux系统相关的基础问题(空间、内存、库、链接、环境变量)_~青萍之末~的博客-CSDN博客 。 Linux系统调用_~青萍之末~的博客-CSDN博客_linux系统调用 。
- Linux调度系统全景指南(终结篇) (qq.com) 。
- Linux与SoC - 知乎 (zhihu.com) 。
- 《Linux内核设计与实现》读书笔记 - 目录 (完结) - wang_yb - 博客园 (cnblogs.com) 。 《Linux内核设计与实现》读书笔记 - 知乎 (zhihu.com) 。
深入研读
-
linux_kernel_wiki:Linux 内核知识体系与面试题
0voice/linux_kernel_wiki: linux内核学习资料:200+经典内核文章,100+内核论文,50+内核项目,500+内核面试题,80+内核视频 (github.com)
。
-
linux-insides-zh:
MintCN/linux-insides-zh: Linux 内核揭秘 (github.com)
。网站版
简介 · Linux Insides中文 (gitbooks.io)
。
-
腾讯首发Linux内核源码《嵌入式开发进阶笔记》差距差的不止一点点哦 - 知乎 (zhihu.com)
。
-
Linux 2.6.12代码注释: 包含LINUX内核同步、信号、内存、调度、文件系统、网络系统、时钟等部分的源码注释。前后历时三年,算是干货。 (gitee.com)
。
-
sunym1993/flash-linux0.11-talk: 你管这破玩意叫操作系统源码 — 像小说一样品读 Linux 0.11 核心代码 (github.com)
。
-
Linux 内核相关书籍,自行网搜即可。
网络杂文
网上东西非常杂,这里会推荐一些我个人见到的好的。
- 关于嵌入式开发的经验之谈 - 知乎 (zhihu.com) ,一些基础概念。
- 程序员必知的 89 个操作系统核心概念 (qq.com) ,一些基础概念。
- 图解系统 小林。 如何看待程序员持续写技术博客? - 知乎 (zhihu.com) ,拉到下面有文章合集。
- 网络相关:图解网络 小林。 趣谈网络协议 。手绘图解HTTP。30张图解HTTP常见面试题。 TCP/IP 教程 | 菜鸟教程 (runoob.com) 。 HTTP 教程 | 菜鸟教程 (runoob.com) 。
- 简直不要太硬了!一文带你彻底理解文件系统 (qq.com) 。
- Linux网络编程_~青萍之末~的博客-CSDN博客
- Linux系统编程_~青萍之末~的博客-CSDN博客 。
- Linux学习资料整理 - 知乎 (zhihu.com) ,是一些零散的杂视频。
- 0voice/backend_video: 后端免费技术分享视频,包含Linux,RTSP RTMP, HLS, 流媒体, ffmpeg, WebRTC,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,CDN,P2P,K8S,Docker,ffmpeg,TCP/IP,协程,DPDK (github.com) ,是一些零散的杂视频。
- 宅学部落-王利涛 - 知乎 (zhihu.com) ,是一些零散的杂文章。
- 百问科技 精选文章汇总(更新时间2020年12月10日) (qq.com) ,是一些零散的杂文章。
- Arm®核心板_ 工控板 _开发板技术专题-广州致远电子有限公司 (zlg.cn) ,是一些零散的杂文章。
休闲阅读 Linux的功能有多强大? - 知乎 (zhihu.com) 。
Linux 应用编程内容补充
- 韦东山、正点原子、野火 的 Linux 学习文档。
- Linux C编程一站式学习 (akaedu.github.io) 。
- 亚嵌教育 (akaedu.github.io) 。
- 深入理解 Linux I/O 系统 (qq.com) 。
- 清华远见-嵌入式Linux应用程序开发详解。
- Linux系统编程_ 中文版 _ by _哈工大。
- POSIX多线程程序设计。
- 宅学部落的个人空间_哔哩哔哩_bilibili 。
- 百问网-优秀学员-嵌入式开发学习笔记汇总 。
以下摘自网络,侵删。
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 驱动编程内容补充
- 韦东山-嵌入式Linux驱动难?到底难在哪? - 百问网嵌入式问答社区 (100ask.net) 。
- 前面 “书籍推荐” 一节 里面的推荐。
- gatieme/LDD-LinuxDeviceDrivers: Linux内核与设备驱动程序学习笔记 (github.com) 。
摘自网络,侵删。
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 术业有专攻