视频来源:野火嵌入式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 Linux | RHEL 的社区克隆版,稳定性极高 | 企业服务器、生产环境 |
| Debian | 以稳定著称,软件包管理严谨 | 服务器、嵌入式、要求长期稳定的场景 |
| Fedora | Red 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 是云计算领域的必备技能。
- Web 服务器:Apache HTTP Server 和 Nginx 是两大主流选择。Apache 以模块化架构和
- 结论: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 技术瓶颈的六个信号#
以下六条可以用来判断自己是否已触及当前技术领域的上限:
- 语言底层基础扎实 – 能深入理解 C 语言的指针、内存布局、编译链接过程
- 算法移植调试熟悉 – 能快速将算法从 MATLAB/论文移植到嵌入式平台
- 产品市场定位清晰 – 知道自己的产品解决什么市场问题,而非单纯执行技术任务
- 芯片功能掌握熟练 – 对常用 MCU(STM32 等)的外设、DMA、中断等做到心中有数
- RTOS 机制深入理解 – 理解 FreeRTOS/uCOS 的任务调度、IPC、内存管理的底层实现
- 设计模式运用熟练 – 能在嵌入式代码中合理使用状态机、观察者模式等设计思想
以上都满足 -> 瓶颈到来 -> 需主动转型
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 做类比。
| 概念维度 | Windows | Linux |
|---|---|---|
| 内核类型 | Windows NT 内核(混合内核) | Linux 内核(宏内核 + 可加载模块) |
| 开源情况 | 闭源商业软件 | 开源(GPLv2),代码可自由查看修改 |
| 文件系统 | NTFS、FAT32、exFAT | ext4、XFS、Btrfs、F2FS 等 |
| 路径分隔符 | 反斜杠 \ | 正斜杠 / |
| 分区概念 | C:、D:、E: 盘符 | 单一根目录 /,所有分区挂载在 / 下 |
| 文件权限 | ACL(访问控制列表) | rwx(读/写/执行)+ 所有者/用户组/其他用户 |
| 可执行文件 | .exe、.bat、.ps1 | ELF 格式 + 可执行权限位(x 位) |
| 终端/命令行 | CMD、PowerShell | Bash、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 优化:补充技术细节、学习路线图、概念对比表等扩展内容
