跳过正文
  1. 文章/

第1讲:为什么学习Linux开发

·7113 字·15 分钟
Euin
作者
Euin
这里记录我的技术笔记、学习心得与生活随笔。
Linux 入门 - 这篇文章属于一个选集。
§ 3: 本文

视频来源:野火嵌入式Linux教学视频系列 BV号:BV1JK4y1t7io (P2) 时长:19分25秒 主题:Linux系统简介 & 为什么学习Linux开发 转写方式:Whisper tiny (CPU) 语音识别


1. 引言与资源获取
#

1.1 Linux 发展简史
#

在学习 Linux 开发之前,有必要了解 Linux 从何而来。

Linux 的诞生与两个关键事件密不可分。

GNU 项目(1983):Richard Stallman 发起了 GNU(GNU is Not Unix)项目,目标是创建一套完全自由的操作系统。到 1990 年代初期,GNU 项目已经完成了编译器(GCC)、编辑器(Emacs)、Shell(Bash)等大量核心工具,但始终缺少一个可用的操作系统内核(GNU Hurd 开发进展缓慢)。

Linux 内核诞生(1991):芬兰赫尔辛基大学的学生 Linus Torvalds 出于个人兴趣,在 MINIX 系统的启发下开始编写自己的操作系统内核。1991 年 8 月 25 日,他在 comp.os.minix 新闻组发布了一则著名的帖子,宣布自己正在为 386(486)兼容机开发一个"免费的操作系统(只是一个爱好,不会像 GNU 那样大而专业)"。同年 9 月,Linux 内核 0.01 版本发布;10 月发布 0.02 版本;1994 年 3 月发布 1.0 版本。

GNU/Linux 的结合:Linus Torvalds 将 Linux 内核以 GPL(GNU General Public License)许可证发布,使得 GNU 项目的工具和 Linux 内核可以自由组合,形成了今天我们所说的 GNU/Linux 操作系统。严格来说,“Linux"通常指内核,而我们日常使用的"Linux 系统"实际上是 GNU/Linux 系统。

1.2 Linux 内核与 Linux 发行版
#

这是一个非常重要的概念区分:

Linux 内核(Kernel):操作系统的核心,由 Linus Torvalds 主导维护。内核负责管理硬件资源(CPU、内存、磁盘、网络等),提供进程调度、内存管理、文件系统、设备驱动等底层功能。内核版本号格式为 主版本.次版本.修订版本(例如 5.15.0),目前最新稳定版为 6.x 系列。

Linux 发行版(Distribution):以 Linux 内核为基础,打包了 GNU 工具链、图形界面(可选)、软件包管理器、各类应用程序后形成的完整操作系统。不同的发行版面向不同的使用场景和用户群体:

发行版特点典型用途
Ubuntu基于 Debian,用户友好,社区活跃,资料丰富桌面入门、开发环境、云服务器
CentOS / Rocky LinuxRHEL 的社区克隆版,稳定性极高企业服务器、生产环境
Debian以稳定著称,软件包管理严谨服务器、嵌入式、要求长期稳定的场景
FedoraRed Hat 的前沿技术试验场,软件版本新桌面开发、尝鲜新技术
Arch Linux滚动更新,高度可定制高级用户、学习 Linux 内部机制
OpenWrt专为路由器设计的轻量级发行版智能路由器、IoT 网关
Buildroot / Yocto专为嵌入式定制的构建系统嵌入式 Linux 产品开发

选择发行版的建议:入门学习选 Ubuntu(资料最多),企业服务器选 CentOS/Rocky Linux(稳定性优先),嵌入式开发则需掌握 Buildroot 或 Yocto。

1.3 Linux 的主要特点
#

Linux 之所以能在服务器、嵌入式等领域占据主导地位,源于以下核心特性:

  • 开源免费:源代码完全公开,遵循 GPL 协议。用户可以自由查看、修改和分发代码。这意味着不存在厂商锁定,企业可以根据自身需求深度定制。
  • 稳定可靠:Linux 服务器连续运行数年不重启的情况很常见。内核设计经过数十年的工业验证,内存管理和进程隔离机制成熟。
  • 高度安全:开源的特性意味着全球开发者持续审查代码,漏洞发现和修复都很快。细粒度的权限管理(用户/组/文件权限)从设计上就提供了安全防护。
  • 多用户多任务:Linux 天生就是多用户系统,多个用户可以同时登录并使用系统资源,互不干扰。内核调度器高效管理并发任务。
  • 强大的网络能力:Linux 的网络协议栈实现是业界标杆,绝大多数网络设备(路由器、交换机、防火墙)底层都运行着 Linux。
  • 硬件兼容性广:从小型嵌入式设备(ARM Cortex-M/A 系列)到超级计算机,Linux 几乎支持所有主流 CPU 架构:x86、ARM、MIPS、RISC-V、PowerPC 等。
  • 社区生态丰富:拥有全球最大的开源社区支持,几乎任何需求都能找到现成的开源解决方案。

正是以上这些特性,使得 Linux 成为"功能强大、可靠性高、成本可控"的工程选择。接下来我们具体看看 Linux 在哪些领域大显身手。

1.4 教学资源
#

  • 视频配套资料已全部在野火官方论坛开源
  • 官方资料路径:野火官网 -> 野火产品资料专区 -> i.MX6ULL Linux 开发板 -> i.MX6ULL 开发实战指南

1.5 本节核心问题
#

为什么学习 Linux 开发? 从两个维度:Linux 的应用产品 和 Linux 的职业方向


2. Linux 的应用产品领域
#

Linux 的应用范围远超很多人的想象。从你每天访问的网站,到手上的安卓手机,再到工厂里的机械臂,Linux 的身影无处不在。

2.1 服务器
#

服务器是 Linux 最成熟、最广泛的应用阵地。

  • 作用:提供计算服务,支撑网购、看电影、打游戏等一切网络活动
  • 验证:通过 Netcraft 查询网站服务器 OS – 京东、百度等均运行 Linux
  • 技术细节
    • Web 服务器:Apache HTTP Server 和 Nginx 是两大主流选择。Apache 以模块化架构和 .htaccess 灵活配置著称;Nginx 凭借事件驱动架构在高并发场景下性能突出,常被用作反向代理和负载均衡。全球超过 70% 的 Web 服务器运行在 Linux 上。
    • 数据库:MySQL 和 PostgreSQL 是 Linux 平台上两大开源关系型数据库。MySQL 以简单高效著称,是 LAMP(Linux + Apache + MySQL + PHP)技术栈的关键组件;PostgreSQL 以功能完整和数据一致性见长,越来越多企业的核心业务选择 PostgreSQL。
    • 云计算:AWS、Azure、Google Cloud 三大公有云平台的底层虚拟化基础设施大量基于 Linux。AWS 早期就大量使用 Xen 虚拟化技术运行 Linux 实例;Azure 如今超过 60% 的 VM 实例运行 Linux。掌握 Linux 是云计算领域的必备技能。
  • 结论:Linux 已占据服务器领域的主导地位

2.2 智能家居/物联网(IoT)
#

  • 智能开关、灯泡、门锁、传感器等设备构成了智能家居的感知层和执行层
  • 关键:这些设备通常使用 Zigbee、Bluetooth Low Energy (BLE)、Thread 等低功耗协议通信,需要 Linux 网关实现协议转换和云端互联
  • 技术细节
    • IoT 概念:物联网(Internet of Things)指的是通过互联网将各种物理设备连接起来,实现数据采集与远程控制。典型的 IoT 架构分为感知层(传感器)、网络层(网关/路由器)和应用层(云平台/App)。
    • 树莓派(Raspberry Pi):基于 ARM 架构的低成本单板计算机,运行 Raspberry Pi OS(基于 Debian 的 Linux 发行版)。被广泛用于智能家居中枢、家庭媒体中心、教育编程等场景。它让 Linux 嵌入式的门槛大幅降低。
    • 典型应用:智能音箱(Amazon Echo 底层系统基于 Linux)、智能门锁网关、安防摄像头、环境监控节点等。

2.3 工业控制
#

工业自动化领域,设备"联网"和"智能化"需求推动 Linux 不断渗透。

  • 工业 4.0 推动下,Linux 开源免费特性优势明显
  • 典型产品:机械臂、焊接机、螺丝机、PLC 上位机、机器视觉平台等
  • 技术细节
    • 大量开源运动控制算法可用(例如 LinuxCNC 开源数控系统),企业可以在成熟的开源方案基础上做二次开发,缩短产品研发周期。
    • EtherCAT 主站:基于 Linux 的 IgH EtherCAT Master 是开源领域最成熟的 EtherCAT 主站实现,被大量工业设备采用,实现微秒级实时通信。
    • 实时性增强:工业场景对时间确定性要求极高。Linux 可以通过 PREEMPT_RT 实时补丁、Xenomai 双核方案等方式获得硬实时能力,满足运动控制需求。

2.4 消费电子
#

  • 手机:安卓(Android)系统基于 Linux 内核。内核负责驱动管理、内存管理、进程调度;安卓在 Linux 之上添加了 HAL(硬件抽象层)、Android Runtime 和应用框架。全球数十亿台安卓设备都运行着 Linux 内核。
  • 笔记本:华为荣耀 MagicBook 预装第三方 Linux 系统;Dell、Lenovo 等厂商也提供预装 Ubuntu 的机型。
  • 电视/机顶盒:大部分智能电视(三星 Tizen、LG WebOS)和机顶盒系统底层都是 Linux。
  • 市场份额逐年增长:在消费电子领域,Linux 内核的衍生系统占据了绝对多数。

2.5 汽车电子
#

  • 行车记录仪、车载导航仪、车载信息娱乐系统(IVI)
  • Linux 是主流解决方案,承担视频监控、道路录制、GPS 导航、车载娱乐等任务
  • 技术细节
    • AGL(Automotive Grade Linux):Linux 基金会主导的车载 Linux 项目,丰田、奔驰等汽车厂商已在其量产车型中采用 AGL 作为车载系统平台。
    • Autoware:基于 Linux 和 ROS(Robot Operating System)的开源自动驾驶软件平台,提供感知、规划、控制等自动驾驶全套模块。

2.6 教育学习
#

  • 电子书阅读器(如 Kindle 底层系统基于 Linux)
  • 资源丰富、护眼,内部系统也是 Linux
  • 各类教育平板、学习机也大量采用 Linux/Android 系统

3. Linux 职业发展方向
#

前面介绍了 Linux 的应用广度,这直接决定了职业方向的多样性。以下按照不同方向拆解所需的技能树和学习路径。

3.1 服务器运维(Linux Ops / SRE)
#

  • 维护公司服务器高可用(99.9%+ uptime)
  • 管理研发/开发/生产环境的部署与监控
  • 解决网络服务问题、安全加固、性能调优

技能树

  • 基础:Linux 命令行操作,文件管理,用户/权限管理,文本处理(grep/awk/sed),Shell 脚本
  • 中间件:Nginx/Apache 配置与调优,MySQL/Redis 部署与主从复制,Tomcat 应用容器
  • 运维工具:Docker 容器化,Kubernetes 编排,Ansible/SaltStack 自动化运维,Prometheus + Grafana 监控告警,ELK 日志分析
  • 进阶:CI/CD 流水线(Jenkins/GitLab CI),网络安全(防火墙/IDS/漏洞扫描),云平台(AWS/Azure/阿里云)

学习路径:Linux 基础操作 -> Shell 脚本编写 -> Web 服务搭建(LAMP/LNMP)-> Docker -> K8s -> 自动化运维 -> 云原生

3.2 Linux 软件开发
#

  • 服务器端:网站后台、数据库系统、微服务架构、分布式系统
  • 桌面端:跨平台办公软件、即时通讯客户端(QQ/微信 Linux 版)、IDE 等
  • 嵌入式应用:针对特定场景的定制化业务逻辑开发

技能树

  • 编程语言:C/C++ 是 Linux 开发的根基,Python 适合快速开发和脚本工具,Go 在云原生领域占据主导,Rust 在系统软件领域快速崛起
  • 开发工具链:GCC/GDB/Make/CMake,Git 版本控制,VS Code/CLion 等 IDE
  • 系统编程:POSIX API,进程/线程(pthread),IPC(管道/消息队列/共享内存/信号),Socket 网络编程
  • 调试与性能分析:GDB 调试,Valgrind 内存检测,strace 系统调用追踪,perf 性能分析

学习路径:C/Python 语言 -> Linux 系统编程 -> 网络编程 -> 项目实战(HTTP 服务器/聊天室等)-> 深入某个业务方向

3.3 嵌入式系统开发
#

这是嵌入式工程师从 MCU 向 Linux 进阶的核心方向,也是野火课程的重点。

  • 系统移植:Bootloader 移植(U-Boot)、内核移植与裁剪、根文件系统构建(BusyBox)
  • 驱动开发:GPIO/按键/PWM/ADC/SPI/I2C/SD 卡/Flash/USB/Camera/Wi-Fi 等外设驱动
  • 构建系统:Buildroot(适合快速构建嵌入式 Linux 系统)、Yocto Project(适合大型产品的可定制构建框架)

技能树

  • 硬件基础:ARM 架构(Cortex-A 系列),看懂原理图,理解芯片数据手册中的寄存器描述
  • 内核基础:设备树(Device Tree)、驱动模型(platform/i2c/spi 驱动框架)、中断子系统、内存管理
  • 构建工具:Buildroot(通过 menuconfig 配置,生成完整的交叉编译工具链和根文件系统)、Yocto(分层架构,基于 BitBake 构建系统,适合需要长期维护的商业产品)
  • uClinux:针对没有 MMU(内存管理单元)的微控制器(如 ARM Cortex-M 系列)的 Linux 衍生系统,适合在资源极度受限的 MCU 上运行类 Linux 环境。
  • 调试技能:串口控制台、JTAG 调试器、printk 日志分析、oops 信息解读

学习路径:熟悉 Linux 基础 -> ARM 架构基础 -> U-Boot 启动流程 -> Linux 内核配置与编译 -> 字符设备驱动 -> 平台设备驱动 -> I2C/SPI 框架驱动 -> 完整项目移植

嵌入式 Linux 开发的知识面最广,但天花板最高。系统移植和驱动开发能力属于嵌入式领域的高端技能。


4. 讲师转型经验分享
#

以下为视频讲师从 MCU 开发转型 Linux 的真实经历,保留原文以还原其思考过程。

4.1 技术瓶颈三阶段
#

技术瓶颈期 -> 思维受限期 -> 下定决心转型

4.2 关键项目:变量解析器
#

  • 背景:客户 PLC 程序外包,修改功能困难
  • 方案:工控屏上开发变量解析器,客户通过 USB 下载脚本即可控制设备逻辑
  • 方案的价值:将不可维护的硬编码逻辑变成可配置的脚本驱动,大幅降低客户的维护成本
  • 参考文献:PickleC(Google,约 3500 行核心代码)、Ruy is Plyther(国内,有中文教程)

4.3 技术瓶颈的六个信号
#

以下六条可以用来判断自己是否已触及当前技术领域的上限:

  1. 语言底层基础扎实 – 能深入理解 C 语言的指针、内存布局、编译链接过程
  2. 算法移植调试熟悉 – 能快速将算法从 MATLAB/论文移植到嵌入式平台
  3. 产品市场定位清晰 – 知道自己的产品解决什么市场问题,而非单纯执行技术任务
  4. 芯片功能掌握熟练 – 对常用 MCU(STM32 等)的外设、DMA、中断等做到心中有数
  5. RTOS 机制深入理解 – 理解 FreeRTOS/uCOS 的任务调度、IPC、内存管理的底层实现
  6. 设计模式运用熟练 – 能在嵌入式代码中合理使用状态机、观察者模式等设计思想

以上都满足 -> 瓶颈到来 -> 需主动转型

4.4 核心感悟
#

  • MCU 开发:3-5 年吃透产品 -> 遇瓶颈 – 产品层面的问题已不是技术问题,而是技术栈限制了产品的可能形态
  • Linux 开发:难度更大、知识面更广、学无止境 – 从裸机思维转向操作系统思维本身就是一次跃迁
  • 更大的难度 = 更高的薪资 + 更好的前景

5. Linux 学习路线图建议
#

无论是服务器运维、软件开发还是嵌入式方向,以下路线图提供了一个通用的成长阶梯:

第一阶段:Linux 基础入门
├── Linux 系统安装(Ubuntu 虚拟机 / 物理机)
├── 基本命令(ls, cd, cp, mv, rm, mkdir, chmod, chown 等)
├── 文件系统结构(/bin, /etc, /dev, /proc, /sys 等的含义)
├── Vim 基本操作
└── 用户与权限管理

第二阶段:Shell 脚本与文本处理
├── Bash 脚本编写(变量、条件判断、循环、函数)
├── 文本处理三剑客(grep、awk、sed)
├── 正则表达式
└── 定时任务(crontab)

第三阶段:系统管理与网络服务
├── 进程管理(ps、top、kill、systemd)
├── 磁盘管理(fdisk、mount、LVM)
├── 网络配置与诊断(ip、ss、tcpdump、iptables/nftables)
├── 服务搭建(Nginx、MySQL、SSH、FTP)
└── Docker 基础

第四阶段:编程开发
├── C 语言深化 + Makefile + GDB 调试
├── Linux 系统编程(文件 I/O、进程、线程、IPC、Socket)
├── Python/Go 后端开发
└── 版本控制(Git)

第五阶段:专业方向深入
├── 运维方向:K8s、Prometheus、CI/CD、Terraform
├── 后端方向:微服务、分布式系统、数据库内核
├── 嵌入式方向:交叉编译、U-Boot 移植、内核驱动、Buildroot/Yocto
└── 安全方向:渗透测试、漏洞分析、内核安全

6. Windows 与 Linux 核心概念对比
#

了解 Linux 的最好方式之一,是和你已经熟悉的 Windows 做类比。

概念维度WindowsLinux
内核类型Windows NT 内核(混合内核)Linux 内核(宏内核 + 可加载模块)
开源情况闭源商业软件开源(GPLv2),代码可自由查看修改
文件系统NTFS、FAT32、exFAText4、XFS、Btrfs、F2FS 等
路径分隔符反斜杠 \正斜杠 /
分区概念C:、D:、E: 盘符单一根目录 /,所有分区挂载在 /
文件权限ACL(访问控制列表)rwx(读/写/执行)+ 所有者/用户组/其他用户
可执行文件.exe、.bat、.ps1ELF 格式 + 可执行权限位(x 位)
终端/命令行CMD、PowerShellBash、Zsh、Fish(默认 Shell)
软件安装.exe/.msi 安装包包管理器(apt/yum/pacman),从软件仓库安装
配置方式注册表 + GUI 设置纯文本配置文件(/etc 目录下)
多用户单用户为主(Server 版例外)原生多用户设计,ssh 远程登录是常态
图形界面Windows 桌面是系统核心组成X11/Wayland 是可选的用户态程序,服务器通常无 GUI
更新策略强制更新、重启频繁自主选择更新时机,内核热补丁可实现不停机更新

7. 金句摘录
#

更大的难度往往意味着更高的薪资待遇以及更好的发展前景。

如果你也是对技术有更高的追求、对发展前景有更高的期待,那欢迎你加入 Linux 的学习队列中来。


8. 总结思维导图
#

为什么学习Linux开发?
├── 历史背景
│   ├── GNU计划(1983, Richard Stallman)
│   ├── Linux内核诞生(1991, Linus Torvalds)
│   └── 发行版(Ubuntu / CentOS / Debian / Fedora / Arch)
├── 核心特点
│   ├── 开源免费
│   ├── 稳定可靠
│   ├── 高度安全
│   └── 多用户多任务
├── 应用领域
│   ├── 服务器(Apache/Nginx、MySQL/PostgreSQL、云计算)
│   ├── 智能家居/IoT(树莓派、网关、传感器)
│   ├── 工业控制(LinuxCNC、EtherCAT、PREEMPT_RT)
│   ├── 消费电子(Android、智能电视、电子书)
│   ├── 汽车电子(AGL、Autoware、行车记录仪)
│   └── 教育学习(Kindle、学习平板)
├── 职业方向
│   ├── 服务器运维(Docker/K8s/自动化运维)
│   ├── 软件开发(系统编程/网络编程/后端开发)
│   └── 嵌入式开发(系统移植/Bootloader/驱动开发/Buildroot/Yocto)
├── 学习路线
│   ├── 第一阶段:基础命令与文件系统
│   ├── 第二阶段:Shell脚本与文本处理
│   ├── 第三阶段:系统管理与网络服务
│   ├── 第四阶段:编程开发(C/Python/系统编程)
│   └── 第五阶段:专业方向深入
└── 转型建议
    ├── 从MCU到Linux是进阶之路
    ├── 善用开源项目与社区资源
    └── 难度越大回报越高

笔记生成日期:2026-07-22 转写:OpenAI Whisper tiny 优化:补充技术细节、学习路线图、概念对比表等扩展内容

Linux 入门 - 这篇文章属于一个选集。
§ 3: 本文

相关文章