教程【免费下载链接】lowlevelprogramming-universityHow to be low-level programmer项目地址https://gitcode.com/gh_mirrors/lo/lowlevelprogramming-university点击查看免费下载本文是对 lowlevelprogramming-university 项目正體中文版 README_tw.md 的深度解读与展开。它面向立志成为底层Low-Level程序员的初学者梳理了从「计算机体系结构 操作系统」两大理论基础、汇编与 C 语言、硬件与固件到 Linux 内核与设备驱动的完整进阶路径。读完本文你将掌握一条可执行的分步学习路线、一份按阶段划分的书单与实操项目清单以及原作者亲身验证的「从 0 到内核」的实践经验。这篇文章在讲什么—— 一份给初学者的路线图原作者受 google-interview-university一份著名的面试准备路线图启发结合自己超过 10 年的底层开发经验撰写了这份「如何成为底层程序员」的学习指南。其写作动机很直接底层相关的技能已不像过去那样常见同时越来越多的学生与初学者向原作者请教「如何成为底层开发者 / Linux 内核工程师」。需要特别强调本文的定位这是一份路线图roadmap而不是百科全书。原作者明确说明文章不会包含所有链接、书籍与课程例如它只引入 Arduino 这个关键词而不展开嵌入式系统的细节。拿到关键词后你需要自己去 Google、购买套件、动手实践而不是收藏一堆链接却从不阅读。底层编程是计算机科学的一部分。如果有机会先接受系统的计算机科学教育效果会更好开源社区也提供了免费的自学路径如 OSSU 的 computer-science 课程体系。在本仓库中该路线图以多语言维护README.md 为英文原版本指南所依据的 README_tw.md 为正體中文版另附 简体中文版、日文版之外的多种翻译。此外原作者在文档开头附有一段诚实的职业提醒底层开发已不是主流趋势目前雇佣底层开发者的公司不多作者本人也越来越难找到相关工作如果你尚未开启职业生涯建议仔细权衡是否选择其他领域。这是一段值得认真对待的现实提示——本文的价值在于提供学习路径而非美化就业前景。什么是「底层」原作者对「底层」与「高层」的划分标准非常清晰是否使用 C 或汇编语言编写与机器直接相关的程序。底层编程意味着程序非常贴近机器直接面对 CPU、寄存器、内存与硬件设备与之相对的用户空间user-space的应用程序通常使用 Python、Java 等高层语言开发者一般无需关心机器与硬件的细节。在此基础上需要厘清两个易混淆的概念系统编程system programming是与底层编程非常接近的概念但系统编程通常不包含硬件设计与固件开发而本文把这两块额外内容也纳入进来本文的覆盖范围从硬件组件一直延伸到Linux 内核跨越了非常多的层次。原作者坦言单篇文章不可能覆盖所有层次的细节因此它的作用是充当进入底层世界的起点而不是终点。理论两大支柱与推荐书单底层编程的根基是两门理论计算机体系结构Computer Architecture——CPU 如何工作、存储层次、流水线、内存映射等操作系统Operating Systems——进程、内存管理、调度、文件系统与内核设计。原作者对理论学习的观点很务实优先跟着课程学。在线大学平台如 Coursera、edx上可以找到各大学的公开课自己读书并非不好但会耗费大量时间与精力。理论就是理论不需要拿到 A只要在脑中建立粗略的全局背景即可你会随着经验的积累越来越强。推荐的课程示例CS401 操作系统saylor.org 提供的公开课。下面是原作者亲自读过、通常是大学教科书的书单即使学校没有相关课程也值得花时间阅读计算机体系结构《Computer Architecture, Fifth Edition: A Quantitative Approach》《Computer Systems: A Programmers Perspective》《Computer Organization and Design, Fourth Edition: The Hardware/Software Interface》操作系统《The Magic Garden Explained: The Internals of UNIX System V Release 4 an Open Systems Design》《The Design of the UNIX Operating System》Maurice J. Bach 著《Operating Systems: Internals and Design Principles》William Stallings 著仓库佐证英文原版 README.md 在理论部分额外补充了一条「硬件设计」建议——亲手搭建一套 8086 微处理器套件Build Your Own 8086 Microprocessor Kit。原作者的亲身感受是如果不亲手搭一块硬件板就无法真正理解「物理内存映射设备」是什么现代应用处理器集成了太多 IP你几乎没有机会亲眼看到 CPU 核心与外围设备是如何连接的。自己搭一套 8086 套件就能用眼睛看到每个外设被定位在物理内存的哪个位置理解总线、中断、时钟、电源等主要硬件组件如何协同工作。搜索 8086 kit 可以找到售卖原理图、元器件与手册的站点。作者强调「世界上有无穷无尽的好书不必每一本都读选一两本仔细读透即可。每学到一条理论就用代码把它实现出来——实做无价把东西做出来知识才真正属于你Implementing one thing is better than knowing one hundred theories。」编程语言汇编与 C底层编程绕不开两门语言。原作者的立场非常鲜明汇编只需懂「概念」C 则「没有捷径」。汇编语言Assembly学习建议在 x86 与 ARM 中只选一种即可无需两者都懂学习汇编的重点是理解 CPU 与计算机的内部运作方式因此不必练习最新 CPU 的指令集选 8086 或 Cortex-M 这类简单架构就够了。推荐资源以文字说明其用途原文档含对应链接8086 assembly programming with emu8086gurugio 编写掌握 CPU 与电脑架构的基本知识以及 C 语言开发的基本知识64bit assembly programming翻译进行中现代 CPU 与电脑架构的基本知识以及 C 语言反组译disassemble与调试的基本知识原作者曾公开寻求翻译帮助Learning assembly for linux-x640xAX 编写使用 NASM 编写纯 64-bit 汇编以及使用 GCC 编写内联汇编ARM Architecture Reference Manual第 2 版ARM 编程的完整参考手册《Computer Organization and Design》系列教材MIPS / ARM / RISC-V 三个版本这类学院派书籍从零开始解释计算机每一个元件如何运作详细阐述构成计算机体系结构的各种概念。它们的写作目标并不是把读者培养成某个具体汇编语言的专家MIPS 与 ARM 版本用不同架构讲解同样的主题且都包含 x86 世界的例子。仓库佐证英文原版 README.md 的理论与汇编部分还包含「Build Your Own 8086 Microprocessor Kit」的硬件动手建议详见上文理论一节将「汇编概念」与「亲手搭建 8086 硬件」结合起来是原作者认为大学期间最有价值的课程之一。C 语言「关于 C 语言没有捷径。必须阅读全部书籍并实做所有练习。」这是原文对 C 语言最核心的态度。推荐书籍与资源《C Programming: A Modern Approach第 2 版》《The C Programming Language第 2 版》KR 经典之作《Modern C》Jens Gustedt 著面向 C 语言新标准《Is Parallel Programming Hard, And, If So, What Can You Do About It?》Paul E. McKenney 著用 C 语言实现同步的底层细节是大型 C 程序尤其是内核编程的必备知识C Project Based Tutorials 讨论合集读完成一、两本 C 语言书之后必须动手做东西。做法是先自己实现再对照别人的源码——只有阅读别人的源码、学到更好的方法技能才会提升。「书籍是死的源码是活的」。build-your-own-xdanistefanovic 维护的项目合集从中寻找有趣的项目练手《Michael Abrashs Graphics Programming Black BookSpecial Edition》C 语言与少量 x86 汇编的优化参考从 8088 时代讲到当代专注于底层图形性能优化Framework and plugin design in Cgurugio 编写如何用 C 语言在大型软件中开发框架与插件也是阅读 Linux 内核代码的入门提示若想成为 C 语言专家原作者给出的建议是去 LeetCode 练习数据结构与算法——「Good luck!」。Rust作为方向性补充需要说明本文所依据的 README_tw.md 并未单列 Rust 章节仅在「未来的趋势」中提及但英文原版 README.md 已增加独立的Rust language小节反映出原作者对系统编程新语言的关注故在此补充介绍原作者确信系统编程的下一代语言是 Rust并援引 Linus Torvalds 关于 Rust 进入 Linux 6.1 的表态学习路径《The Rust Programming Language》官方入门书缺示例与练习→《Rust by Example》提供示例对照→《Programming Rust第 2 版》更深入的入门→Exercism 的 Rust 练习轨道针对单个特性做练习提交后可对比他人解法→《Easy Rust》用浅显英文写的书→ 视频频道 Lets get rusty同时更新 Rust 最新动态实战方向Rust for Linux观察 Rust 是如何进入 Linux 内核的与Linux Device Drivers in Rust把《Linux Device Drivers》书中的示例用 Rust 重写进行中。应用领域一硬件与固件想做嵌入式系统工程师建议从一个简单的硬件套件起步而不是直接上手最新的 ARM 芯片。Arduino Start KitArduino 系列众多但 Start Kit 配备最简单的处理器ATmega328P和说明书。ATmega328P 是 8-bit 核心是数字电路设计与固件开发的良好起点。你不需要会画原理图、不需要会布局、不需要会封装芯片但必须会读电路图知道芯片之间如何连接——固件开发者应能看懂原理图并弄清如何向目标设备发送数据。跟着指南书一步步来8086 手册x86 架构初学者了解处理器架构与 80x86 汇编的绝佳教材80386 手册80x86 处理器保护模式与分页paging机制的最佳指南。具备了上述基础之后就可以开始接触最新的 ARM / x86 处理器了例如树莓派、BeagleBone、Arduino Intel Edison 等开发板。以树莓派为例其开发板上的Cortex-A53 支持 64-bit 指令集可以让你体验现代处理器架构。但作者提出一个尖锐的问题「是的你可以买一块板子但买来做什么如果没有任何目标项目你大概率会把它扔进抽屉像之前买过的那些小玩意一样遗忘。」因此他推荐了一个明确的项目——写一个你自己的内核。用「玩具内核toy kernel」理解现代架构原作者亲手做了一个小型核心程序caos支持64-bit 长模式long mode分页paging简单的上下文切换context switching用这样一个迷你内核来示范现代电脑架构与硬件控制是理解底层机制的最佳实践。更关键的洞察是你其实已经拥有最新的处理器与硬件——就是你的笔记本和台式机。你什么都不用买。理由如下qemu 模拟器可以模拟最新的 ARM 处理器和 Intel 处理器可参考的玩具内核与文档非常多你要做的就是安装 qemu → 编译出一个迷你内核 → 启动它 → 开启分页 →打印几行消息看看。其他可参考的玩具内核项目The Little OS Book、tuhdo 的 os01OS from 0 to 1等。应用领域二Linux 内核与设备驱动「要做一个完整的操作系统非常困难其实你不需要自己做——加入 Linux 社群参与开发就好。」这是进入内核世界最务实的姿态。书籍阅读顺序循序渐进《The Design of the UNIX Operating System》Maurice J. BachUnix 的基本概念被应用到几乎所有操作系统上是掌握操作系统核心概念的极佳入口《Linux Device Drivers》LDD3亲自把书中所有示例实现一遍《Linux Kernel Development》Robert Love理解 Linux 内核的设计理念《Understanding the Linux Kernel》第 3 版读这本书的同时对照 Linux 内核 v2.6 源码一起读。原作者特别强调不要从最新版本开始v2.6 已经足够。配套的实操手段是用qemu gdb一行一行地把内核代码跑起来调试方法可参考内核调试相关文档用busybox做一个最简单的文件系统实现一秒内启动的最小内核。免费的进阶资源Linux device driver labslinux-kernel-labs 社区使用内核必备 API 编写设备驱动的实战指南与经典范例原作者认为这份文档几乎覆盖了所有必备内核 APIThe Eudyptula Challenge像一位私人教师一样指导你「下一步该做什么」适合「不知道做什么」的学习者。可惜该挑战已不再接受新挑战者不过可以用搜索引擎找到前人上传的题目自己尝试解题后再与别人的解法对照raspberry-pi-os 项目用树莓派从零构建一个类似 Linux 的内核每一课先解释某个内核特性在 RPi OS 中如何实现再演示同样的功能在 Linux 内核中如何运作。该项目的逻辑是「做一个与 Linux 内核相似的内核就是理解 Linux 内核最好的方式」项目尚未完成Block layer and device drivergurugio 编写从简单的多队列multi-queue模式的 Ramdisk 块设备驱动入手再深入到块设备层block layermd driver of Linux kernel韩文mdadm 工具如何工作、如何调用 md 驱动以及 md 驱动内部如何运作Lions Commentary on UNIX 6th Edition, with Source Code解读 UNIX 第 6 版源码的经典评注英文原版 README.md 收录。参考资料遇到困难时查阅Free-electrons 官网大量主题幻灯片尤其是 ARM-Linux 方向Julia Evans 的博文《You can be a kernel hacker!》如何开始内核编程的指南。应用领域三其他方向也许你对 Linux 与固件并不真的感兴趣——底层编程并不只有内核与驱动。原作者指出还有其他应用领域Windows 系统编程与设备驱动信息安全Security逆向工程Reverse Engineering原作者声明自己对这三个领域没有相关知识期待有人提供入门资料。另外需要特别强调「核心与驱动并不是底层编程的全部。」另一个重要的底层应用方向是软件定义存储Software-Defined Storage与分布式文件系统Distributed Filesystem。其细节超出本文范围但可以通过 MIT 6.824 课程分布式系统经典课程及其配套的 yfs 参考实现动手做一个简单的分布式文件系统。底层编程的未来趋势原作者坦言「我不知道未来会怎样」但明确列出了自己持续关注的方向Rust系统编程领域的下一代语言可用于开发 Linux 设备驱动如 rust.ko 实验项目也因此成为底层开发者值得押注的新技能物联网IoT与实时操作系统ARM、三星等公司都有自己的 RTOS可惜大多闭源而Linux 基金会的 Zephyr是开源替代方案值得研究与学习云服务器的多层技术栈与虚拟化演进典型的云服务器包含主层 OS、客层 OS、KVM 驱动、qemu 进程与应用服务等多层堆叠。容器已经提供了轻量级虚拟化而在不远的将来library OS / Unikernel这类新概念操作系统有可能取代传统的软件虚拟化技术栈大数据与云计算的存储挑战直接挂载在服务器上的磁盘在容量、稳定性与性能上越来越难以满足需求因此业界正在研究用高速网络连接大量存储节点、构建巨型存储系统——即软件定义存储 / 集群文件系统如 Ceph的方向过去用于搭建单一巨大存储卷如今则更多地为大量虚拟机提供独立存储卷。如何开始—— 作者亲测的分步路线很多读者问「该怎么开始」。原作者承认自己忘了写这一节并坦言「如何到达彼岸并没有标准答案」他只能把自己做过的路径写出来作为参考。如果你已经掌握某一步直接跳到下一步即可。读操作系统理论书至少阅读《The Design of the UNIX Operating System》Maurice J. Bach 著学汇编与 C 语言汇编读 8086 assembly programminggurugio 著理解汇编编程的概念即可不必做实际练习C 语言把《The C Programming Language第 2 版》每一道练习题都解出来再读《C Programming: A Modern Approach第 2 版》用 C 做实际项目从 C Project Based Tutorials 中挑一两个有趣项目然后做自己的项目如果实在找不到感兴趣的项目去 LeetCode 练数据结构与算法也是可以的做一个硬件项目用树莓派或 Arduino 都行关键是用C 语言只用 C获得直接控制硬件的经验。作者的具体建议是购买一个ATmega128 套件写固件实现开关 LED、检测按键输入、在字符 LCD 上显示消息控制马达例如做一台寻轨机器人也是很好的项目。不要使用任何库——除了下载器之外的一切都要自己造轮子这样才能获得「从无到有」的知识掌握 Linux 内核基础底层编程离操作系统很近你必须知道 OS 内部如何运作。先从设备驱动入手读《Linux Device Drivers》配合 Linux device driver labs 与 Eudyptula Challenge再读《Linux Kernel Development》理解内核内部机制走向专业领域若目标是从业 Linux 内核开发者必读《Understanding the Linux Kernel》然后动手写一个玩具内核可参考 raspberry-pi-os 与 OSDev 的 Getting Started 指南并把内核的 GitHub 链接写进简历别忘了在 commit message 里写详细说明关注 lwn.net 上的最新动态与内核补丁Kernel/Patches 栏目挑一个你感兴趣的补丁尝试读懂其源码每试一次就离内核更近一步在本地构建并测试内核例如运行 LTP 性能与稳定性测试以及内核源码中的 dev-tools 测试工具发现问题就报告编译警告/错误、性能下降、kernel panic / oops 等如果测试一切正常附上你的系统规格报告——补丁作者会把你的名字写进 Reviewed-by 标签最终在kernel git log 里找到你的名字当然也可以选择其他议题底层工程师可涉足安全、编译器、固件、机器人/汽车等众多领域。仓库内的翻译版本本仓库以多语言维护这份路线图读者可按语言偏好阅读英文原版简体中文版正體中文版葡萄牙语版、意大利语版、捷克语版、俄语版、土耳其语版、西班牙语版、法语版、波斯语版、印尼语版补充说明简体中文版 README_cn.md 中提及过一份 C 语言挑战文档c-language-challenge.md用于承接 Eudyptula Challenge 的学习计划但该文件并未收录在当前镜像仓库中请以各语言 README 的实际内容为准。作者背景与经验参考原作者是一位拥有10 年以上底层开发经验的程序员其经历覆盖了本路线图的几乎所有环节可作为可信度的佐证80x86 汇编语言开发基于 Atmel 芯片的硬件与固件开发Unix 系统下的 C 语言开发Linux 设备驱动开发Linux 内核page allocation页面分配Linux 内核块设备驱动与 md 模块。整份文档的「理论 → 语言 → 硬件/固件 → 内核/驱动 → 未来趋势 → 分步路线」结构正是作者十余年经验的自上而下浓缩。把路线图当作起点而非终点——每学到一条理论就动手实现每读一本书就完成所有练习用玩具内核与 qemu 让抽象的硬件概念落地最终在真实的内核社区里找到自己的名字这就是 lowlevelprogramming-university 想传达的全部方法论。赞分享教程【免费下载链接】lowlevelprogramming-universityHow to be low-level programmer项目地址https://gitcode.com/gh_mirrors/lo/lowlevelprogramming-university点击查看免费下载相关推荐Low-Level Programming University 底层程序员自学路线图从汇编与 C 到 Linux 内核的系统成长指南Low Level Programming University 底层程序员自学路线图从汇编与 C 到 Linux 内核的系统成长指南 本指南围绕开源仓库 l教程Low-Level Programming University 底层程序员路线图从汇编、C 语言到 Linux 内核的完整学习指南Low Level Programming University 底层程序员路线图从汇编、C 语言到 Linux 内核的完整学习指南 导读 本文以开源项目 L教程Low-Level Programming University 底层编程学习路线图从汇编、C 语言到 Linux 内核的系统化指南Low Level Programming University 底层编程学习路线图从汇编、C 语言到 Linux 内核的系统化指南 本指南以开源仓库 low教程上一篇Pandas 时间序列入门实战从 datetime 转换、dt 访问器到重采样下一篇terraform-provider-aws 数据源 aws_iam_user_ssh_key 实战读取 IAM 用户 SSH 公钥创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考