为了学习linux,我装了双系统,给了ubuntu 30G空间,为什么我一看是loop而不是sda?
兄弟,你这是踩到了虚拟化的坑!
看到这个问题瞬间破防了,想起当年我在某马刚入职时也被这种问题搞得一脸懵逼。
先说结论:你装的不是真正的双系统
你以为自己装了双系统,实际上很可能装的是虚拟机或者WSL(Windows Subsystem for Linux)。
loop设备就是这么来的。
什么是loop设备?简单粗暴地解释
loop设备本质上就是把一个文件当硬盘用。
你那30G空间其实是Windows下的一个大文件,Ubuntu把它当成硬盘来读写。
真正的双系统应该看到的是:
- sda1、sda2这种物理分区
- 或者nvme0n1p1这种NVMe固态硬盘分区
而你看到的loop,说明系统在”演戏”。
为什么会出现这种情况?
情况一:你装的是WSL
如果你在Windows应用商店下载的Ubuntu,那恭喜你中奖了。
WSL本质上就是在Windows内核上跑Linux用户态,所有的存储都是通过loop设备映射的。
情况二:你用了虚拟机
VMware、VirtualBox这些虚拟机软件,给虚拟系统分配的硬盘空间就是宿主机上的一个文件。
在虚拟机里看到loop设备再正常不过。
情况三:你装了”假”双系统
有些一键安装工具为了简化操作,会在Windows分区里创建一个大文件来模拟Linux分区。
这种方案性能拉胯,还容易出问题。
如何验证你的情况?
打开终端,敲几个命令:
lsblk
df -h
cat /proc/mounts如果全是loop设备,基本确定你没装成真双系统。
真双系统应该怎么搞?
作为一个从单片机摸爬滚打到Linux应用开发的老司机,我建议:
方案一:U盘启动安装
- 下载Ubuntu ISO镜像
- 制作启动U盘(推荐Rufus)
- 重启进BIOS,从U盘启动
- 手动分区安装
方案二:硬盘分区安装
- Windows磁盘管理压缩卷
- 预留未分配空间
- U盘启动安装到未分配空间
踩坑经验分享
当年我在世界500强外企做汽车电子时,经常需要在不同环境间切换。
虚拟机性能不够,WSL功能受限,最后还是老老实实装了真双系统。
虽然折腾了一晚上,但后来的开发效率提升了不止一个档次。
特别是做嵌入式Linux开发,真实的硬件环境和文件系统结构对理解系统架构帮助巨大。
最后的建议
如果你只是想体验Linux,WSL够用了。
但如果真想深入学习,建议装真双系统或者买个便宜的二手笔记本专门跑Linux。
毕竟我们做技术的,工具链的选择直接影响学习效果。
就像当年我从机械转嵌入式一样,环境搭对了,后面的路就好走多了。
现在我的公司给新人培训Linux时,第一课就是教大家区分这些概念。基础不牢,地动山摇啊!
兄弟,你这是踩到了虚拟化的坑!
看到这个问题瞬间破防了,想起当年我在某马刚入职时也被这种问题搞得一脸懵逼。
先说结论:你装的不是真正的双系统
你以为自己装了双系统,实际上很可能装的是虚拟机或者WSL。
loop设备就是这么来的。
什么是loop设备?简单粗暴地解释
loop设备本质上就是把一个文件当硬盘用。
你那30G空间其实是Windows下的一个大文件,Ubuntu把它当成硬盘来读写。
真正的双系统应该看到的是:
- sda1、sda2这种物理分区
- 或者nvme0n1p1这种NVMe固态硬盘分区
而你看到的loop,说明系统在”演戏”。
更多编程学习资源
- C语言零基础入门电子书-2026最新版
- STM32零基础入门电子书-2026最新版
- FreeRTOS零基础入门电子书-2026最新版
- C++ 零基础入门电子书-2026最新版
- 51单片机零基础入门学习路线
- AD画板零基础入门学习路线
- C语言零基础入门学习路线
- C++语言零基础入门学习路线
- ESP32零基础入门学习路线
- FreeRTOS零基础入门学习路线
- Linux应用开发零基础入门学习路线
- Linux底层开发零基础入门学习路线
- LVGL零基础入门学习路线
- QT零基础入门学习路线
- STM32零基础入门学习路线
嵌入式学习路线完整攻略
作为一个从机械转行到嵌入式,在这个领域摸爬滚打了快10年的老司机,今天给大家分享一套完整的嵌入式学习路线。
这套路线是我结合自己的实战经验,以及带过的几十个学员的反馈总结出来的。
1. 学习大纲

详细学习大纲展开:
基础阶段重点:这个阶段最容易劝退新人,但也是最关键的。
C语言不是简单会写hello world就行,你得深入理解指针的本质,知道内存是怎么分配的,为什么嵌入式里要用volatile关键字。
数字电路基础决定了你能不能看懂硬件原理图,这直接影响后面的调试能力。
进阶阶段核心:ARM架构是现在嵌入式的主流,特别是Cortex-M系列在工业控制和物联网领域应用广泛。
RTOS的学习不能只停留在API调用层面,要理解任务切换的底层机制,这样遇到死锁、优先级反转等问题时才能快速定位。
高级阶段突破:Linux系统编程是很多人的分水岭,从裸机开发转到Linux开发,思维模式要完全转变。
驱动开发更是嵌入式工程师的核心竞争力,会写驱动的工程师在市场上非常抢手。
2. 必看开源视频
B站精品课程推荐:
C语言与数据结构
- 《郝斌C语言自学教程》- BV1os411h77o 这套课程讲得非常细致,特别适合零基础入门,郝老师的讲解风格很接地气
单片机入门
- 《江科大自化协单片机教程》- BV1Mb411e7re
江科大的这套教程在B站火了好几年,从51单片机讲到STM32,循序渐进
STM32开发
- 《正点原子STM32教程》- BV1th411z7sn 正点原子的教程配套资料很全,从寄存器到HAL库都有涉及
嵌入式Linux
- 《韦东山嵌入式Linux教程》- BV1kJ411H7bI 韦东山老师在嵌入式Linux领域是权威,这套课程从裸机到Linux应用都有
RTOS系统
- 《FreeRTOS教程》- BV1qJ411W7ck 系统性讲解FreeRTOS的原理和应用,适合有一定基础的同学
其他平台优质资源:
慕课网:《嵌入式工程师养成计划》 腾讯课堂:《从零开始学ARM》 网易云课堂:《嵌入式Linux系统开发》
3. 必读经典书籍
入门必读
《C Primer Plus》 - 学C语言的圣经,虽然厚但讲得很透彻 《C和指针》 - 专门讲指针的书,嵌入式开发指针用得特别多
进阶提升
《ARM嵌入式系统开发》 - 周立功编写,国内ARM开发的经典教材 《嵌入式实时操作系统μC/OS-II》 - 虽然现在用FreeRTOS多,但理解RTOS原理的好书 《深入理解计算机系统》 - 程序员必读,理解底层原理
高级深入
《Linux设备驱动程序》 - 驱动开发的权威指南,俗称LDD3 《深入Linux内核架构》 - 想深入理解Linux内核必读 《嵌入式Linux应用开发完全手册》 - 韦东山老师的书,很实用
专业方向
《汽车电子嵌入式系统设计》 - 汽车电子方向 《物联网嵌入式开发实战》 - 物联网方向
《工业控制系统信息安全》 - 工业控制方向
4. 必做项目
入门级项目
LED点阵显示屏
- GitHub: https://github.com/adafruit/Adafruit_LED_Backpack
- 学习GPIO控制、定时器使用、显示驱动
智能温控风扇
- GitHub: https://github.com/sparkfun/SparkFun_MAX30105_Particle_Sensor_Library
- 涉及ADC采集、PWM控制、PID算法
简易示波器
- GitHub: https://github.com/pingumacpenguin/STM32-O-Scope
- 学习高速ADC、DMA、上位机通信
进阶级项目
基于FreeRTOS的多任务系统
- GitHub: https://github.com/FreeRTOS/FreeRTOS
- 掌握任务调度、信号量、消息队列
CAN总线通信系统
- GitHub: https://github.com/linux-can/can-utils
- 学习CAN协议、网络编程
简易TCP/IP协议栈
- GitHub: https://github.com/saminiir/level-ip
- 理解网络协议栈原理
高级项目
嵌入式Linux驱动开发
- GitHub: https://github.com/d0u9/Linux-Device-Driver
- 字符设备、块设备、网络设备驱动
物联网网关系统
- GitHub: https://github.com/eclipse/mosquitto
- MQTT协议、云平台对接、边缘计算
汽车电子ECU仿真器
- GitHub: https://github.com/commaai/openpilot
- CAN通信、诊断协议、AUTOSAR
综合项目
智能家居控制系统
- GitHub: https://github.com/home-assistant/core
- 涉及多种通信协议、Web服务、数据库
工业4.0数据采集系统
- GitHub: https://github.com/eclipse/kura
- 现场总线、边缘计算、云端通信
5. 必刷经典面试题
C语言基础
- 指针和数组的区别是什么?
- volatile关键字的作用?
- 结构体内存对齐的原理?
- 函数指针的应用场景?
- 内存泄漏如何检测和避免?
单片机原理
- 中断和轮询的区别?各自适用场景?
- 看门狗的作用和实现原理?
- SPI和I2C协议的区别?
- PWM的工作原理?如何实现调速?
- ADC的精度和分辨率区别?
RTOS系统
- 任务调度算法有哪些?
- 信号量和互斥量的区别?
- 优先级反转问题如何解决?
- 内存管理策略有哪些?
- 如何避免任务间的死锁?
嵌入式Linux
- 用户态和内核态的区别?
- 设备树的作用是什么?
- 字符设备和块设备的区别?
- 内核模块的加载过程?
- 中断的上半部和下半部?
硬件相关
- 上拉电阻的作用?
- 晶振电路的工作原理?
- 电源管理的考虑因素?
- EMC设计的基本原则?
- PCB布线的注意事项?
通信协议
- TCP和UDP的区别?
- CAN总线的仲裁机制?
- 以太网的冲突检测?
- USB的枚举过程?
- 蓝牙的配对流程?
项目经验
- 如何进行系统调试?
- 性能优化的方法?
- 代码移植的注意事项?
- 产品化需要考虑哪些因素?
- 如何保证系统的可靠性?
这套学习路线是我这些年实战总结出来的,从某马的单片机开发到外企的汽车电子,再到现在自己创业做嵌入式培训,每个阶段都有不同的感悟。
记住,嵌入式不是纸上谈兵,一定要多动手实践,多看开源代码,多做项目。
最重要的是,不要被技术的广度吓到,先选一个方向深入,再横向扩展。
我当年从机械转嵌入式时也很迷茫,但坚持下来就会发现,这个领域的魅力在于它连接了软件和硬件,让你的代码能够控制真实的物理世界。
更多编程学习资源