20251125 - 韦东山Linux第三篇笔记【上】

韦东山Linux第三篇笔记 - 上

一、"板子设置为 EMMC 启动",EMMC是啥?

下面我专门针对 韦东山的 I.MX6ULL 开发板,重新、清晰、精确地解释:

eMMC 是什么?(对 I.MX6ULL 开发板来说)

eMMC = embedded MultiMediaCard(嵌入式多媒体卡)
是一种焊在开发板上的内置存储芯片,用来存系统。

在韦东山的 I.MX6ULL 开发板上,eMMC 是板子上固定焊死的存储器,容量一般是:

  • 4GB
  • 8GB
  • 16GB

用于存放:

  • u-boot
  • 内核(zImage / Image)
  • 设备树
  • 根文件系统 rootfs
  • 配置数据

你可以把 eMMC 理解为:

"一块直接焊在开发板上的 SD 卡,但速度更快、寿命更长、更稳定。"

🔥 为什么 I.MX6ULL 板子要从 eMMC 启动?

因为在产品中(不像开发阶段):

  • 系统不能用 SD 卡(容易松动、拔出、损坏)
  • eMMC 可靠性高、速度快、寿命长
  • eMMC 支持分区、坏块管理
  • 上电即可读到系统

所以最终产品都会选用:

✔ eMMC 启动

✘ 不用 SD 卡启动

韦东山的 IMX6ULL 板子也是这个思路。

📌 I.MX6ULL 从 eMMC 启动的实际流程(重要)

I.MX6ULL 芯片内部有一个 BootROM(固化的代码)。

当你设置"eMMC 启动拨码开关"时,启动流程如下:

复制代码
上电
↓
BootROM 读取 eMMC 的启动区域(boot0 / boot partition)
↓
加载 u-boot 到 RAM 并运行
↓
u-boot 去 eMMC 的 user partition 读取内核、设备树
↓
启动 Linux
↓
从 eMMC 的 rootfs 分区挂载根文件系统
↓
系统启动完成

这意味着整个系统(bootloader、kernel、rootfs)全部来自于 eMMC。

🧩 eMMC 和 NAND Flash 的区别(I.MX6ULL 非常关键)
存储类型 特点
NAND Flash 没有控制器,你自己要处理坏块、ECC、磨损均衡,麻烦
eMMC 内部自带控制器,坏块管理自动完成,像操作磁盘一样使用,I.MX6ULL 官方推荐

韦东山的 IMX6ULL 开发板 有 NAND 版本和 eMMC 版本

但现在主流都是 eMMC 版本,因为更稳定可靠。

📝 怎么确定板子当前是否使用 eMMC?

在 Linux 上输入:

复制代码
ls /dev/mmcblk*

你一般会看到:

  • /dev/mmcblk0 → SD 卡
  • /dev/mmcblk1 → eMMC

如果根文件系统是从 /dev/mmcblk1p2 挂载的,就说明你正在 从 eMMC 启动

你也可以通过 u-boot 查看:

复制代码
mmc list
🎯 最简总结(I.MX6ULL 专用版)
  • eMMC 是焊在板子上的内置闪存,用来存系统。
  • 板子设置为 eMMC 启动,就是从 eMMC 中读 u-boot / kernel / rootfs。
  • eMMC 比 SD 卡稳定,是最终产品的必选项。

二、I.MX6ULL 开发板上的ADB是什么?

什么是 ADB?

ADB 全称是 Android Debug Bridge(安卓调试桥)。

你可能会问:"我学的是 Linux,为什么用'安卓'的工具?"

  • 原因: Android 的底层核心其实就是 Linux。ADB 这个工具设计得非常出色、方便,所以嵌入式 Linux 开发者把它"借"了过来,移植到了普通的 Linux 开发板上使用。
  • 简单理解: 它可以看作是一条连接你的 电脑(PC)开发板 的"万能数据通道"。

只要用一根 USB 线把电脑和开发板连起来,你就可以在电脑上随心所欲地控制开发板,或者传输文件。

为什么需要 ADB?(它解决了什么痛点)

在没有 ADB 之前,或者是传统的开发方式中,初学者常遇到的麻烦是:

  1. 串口(Serial)不好传文件: 串口主要用来输入命令和看打印信息,想把电脑上写好的程序传到板子上运行,通过串口传输非常慢且复杂。
  2. 网络(SSH/NFS)配置麻烦: 想通过网线传输,你得设 IP 地址、搞定防火墙、保证电脑和板子在同一个网段,这对初学者来说容易"劝退"。

ADB 的优势:

  • 即插即用: 只要 USB 线连上就能用(类似手机连电脑)。
  • 传文件极快: 使用 USB 高速传输,把电脑上的程序发给板子只需一瞬间。
  • 远程控制: 可以在电脑的命令行里直接操作板子。
ADB 的三大核心功能
1. adb shell(远程登录)
  • 功能: 在电脑上打开一个终端窗口,直接进入开发板的 Linux 系统。
  • 场景: 你不需要一直盯着开发板接出来的那个小屏幕或者串口助手,直接在电脑的命令行里敲 ls, cd, ./my_program 就可以控制板子。
2. adb push(推:电脑 -> 板子)
  • 功能: 把电脑上的文件"推"进开发板。
  • 场景: 你在电脑上写好了一个 hello_world 程序,编译好了,想放到板子上运行。
    • 命令示例:adb push hello_world /bin/ (把电脑当前目录下的文件传到板子的 /bin 目录)。
3. adb pull(拉:板子 -> 电脑)
  • 功能: 把开发板上的文件"拉"回电脑。
  • 场景: 板子上运行产生了一个日志文件 log.txt,或者是摄像头拍了一张照片,你想弄到电脑上看。
    • 命令示例:adb pull /root/photo.jpg . (把板子上的图片传到电脑当前目录)。

回到你的文档内容

文档中让你检查:

Bash

复制代码
ls /usr/bin/adbd

这里的 adbd 多了一个 d ,代表 Daemon(守护进程)。

  • 电脑端 运行的是 adb(客户端,发号施令的人)。
  • 开发板端 运行的是 adbd(服务端,干活的人)。

文档的意思是:

如果你的板子系统里有 adbd 这个程序在运行,那么你的板子就具备了"听懂"电脑发来的 ADB 指令的能力。如果没有这个文件,你的电脑怎么敲命令,板子都不会理你。

总结

  1. ADB 是桥梁: 通过 USB 线连接电脑和板子。
  2. 它不是安卓独有: 嵌入式 Linux 用它来方便地传文件和输命令。
  3. adbd 是关键: 板子上必须有 adbd 这个后台程序,才能和电脑对话。

三、USB OTG 和 USB 转串口的区别是什么?

这是一个非常好的问题,因为在嵌入式 Linux 开发板(如 I.MX6ULL)上,这两个接口都非常重要,但它们的功能和用途完全不同。

简单来说:

  • USB OTG 是用于==高速数据传输和角色切换==的接口。
  • USB 转串口 是用于**低速、可靠的文本调试**的接口。
1. ⚙️ USB OTG (On-The-Go)
核心功能:角色切换和高速通信

USB OTG 最大的特点是其接口可以在 Host (主机/主控)Device (设备/被控) 两种角色之间切换。

特点 解释
通信速度 高速 (High-speed),通常能达到 480 Mbps。
通信协议 使用复杂的 USB 协议栈
作为 Host (主机) 开发板可以连接并控制外部设备,例如:连接鼠标、键盘、U盘等。
作为 Device (设备) 开发板被电脑控制,实现以下高级功能: - 烧录固件: 电脑将系统镜像烧录到板子的存储器中。 - ADB 调试: 实现高速文件传输和远程 Shell。 - RNDIS 网络: 将板子模拟成一个 USB 网卡,通过 USB 线实现网络连接。
使用时机 通常需要 Linux 内核启动后,USB 驱动才能加载和工作。
2. 🔌 USB 转串口 (USB to Serial)
核心功能:低级、可靠的文本调试

USB 转串口 实际上是一个 适配器 (通常集成在板子上或使用一根转换线),它将电脑上的 USB 信号转换成老式的 UART/TTL 串口信号,连接到 I.MX6ULL 上的 UART 接口。

特点 解释
通信速度 低速 (Low-speed),通常固定在 115200 bps(波特率)。
通信协议 简单的 UART 协议,只传输原始的文本字符 (ASCII)。
通信内容 纯文本数据,用于显示系统运行日志和接收命令。
最重要的用途 最低级别的调试和控制台。 它用于: - U-Boot (Bootloader) 命令行: 系统启动前,你操作 U-Boot 的唯一途径。 - 内核启动日志: 打印内核启动过程中密密麻麻的文本信息。 - 系统崩溃日志: 即使系统内核崩溃,串口通常仍能打印出最后的错误信息。
使用时机 系统任何阶段都可以使用,因为它不依赖复杂的 USB 驱动。
🎯 总结对比表 (I.MX6ULL 上的使用)
特性 USB OTG 接口 USB 转串口接口
传输介质 USB 协议 纯文本(UART 协议)
速度 高速(MB/s 级别) 低速(KB/s 级别)
功能 烧录、ADB、高速传文件、网络、连接外设 打印启动日志、U-Boot 控制台
依赖性 依赖完整的 USB 驱动和操作系统 独立于操作系统,极其可靠
你的用途 高效传输文件、远程 Shell (ADB) 观察系统启动、处理启动错误
🛠️ 结论:如何一起使用?

在你的 I.MX6ULL 开发过程中,你会同时使用这两个接口:

  1. 开机初期(U-Boot阶段): 你必须使用 USB 转串口 来观察启动信息,设置 U-Boot 环境变量。
    操作系统 | 独立于操作系统,极其可靠 |
    | 你的用途 | 高效传输文件、远程 Shell (ADB) | 观察系统启动、处理启动错误 |
🛠️ 结论:如何一起使用?

在你的 I.MX6ULL 开发过程中,你会同时使用这两个接口:

  1. 开机初期(U-Boot阶段): 你必须使用 USB 转串口 来观察启动信息,设置 U-Boot 环境变量。
  2. 系统启动后(Linux阶段): 你会转而使用 USB OTG(通过 ADB) 来进行高效的程序调试、文件传输和网络访问。
相关推荐
遇到困难睡大觉哈哈43 分钟前
Harmony os——ArkTS 语言笔记(六):模块、导入导出与 `this` 关键字
笔记·harmonyos·鸿蒙
灰灰勇闯IT1 小时前
隐语MOOC三期学习感悟:解锁数据要素流通的“三维认知”与落地逻辑
笔记·学习
企鹅侠客1 小时前
Linux性能调优 详解磁盘工作流程及性能指标
linux·运维·服务器·性能调优
icy、泡芙1 小时前
TF卡---热插拔
linux·驱动开发
企鹅侠客1 小时前
Linux性能调优 再谈磁盘性能指标和进程级IO
linux·运维·服务器·性能调优
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [block][mq-deadline]
linux·笔记·学习
Dolphin_Home2 小时前
Spring 事务避坑笔记:从入门到解决自调用陷阱
数据库·笔记·spring
不过普通话一乙不改名2 小时前
Linux 网络收包的进阶之路:从普通 socket 到 AF_XDP 零拷贝
linux·运维·网络
('-')2 小时前
《从根上理解MySQL是怎样运行的》第二十二章学习笔记
笔记·学习·mysql