3. Linux 基础回顾:常用命令行操作、包管理器使用、文件系统结构、权限管理、环境变量配置

在嵌入式网关驱动开发中,宿主机(通常是 Ubuntu/Debian 桌面系统)是构建交叉编译工具链和运行 QEMU 模拟器的核心平台。本章系统梳理 Linux 基础操作,确保后续章节的工程实践建立在扎实的 CLI 能力之上。

3.1 常用命令行操作

嵌入式开发 90% 的工作在终端中完成。以下命令是日常使用频率最高的类别:

类别 命令 典型用途
文件浏览 ls -la、tree、find 查看隐藏文件、递归目录树、按名/类型搜索
文本处理 grep、sed、awk、cut 日志过滤、流编辑、列提取、字段分割
进程管理 ps aux、top、kill 查看进程树、实时资源监控、发送信号
网络诊断 ip a、ping、ss -tlnp 接口配置、连通性测试、端口监听
压缩归档 tar -xzf、gzip、xz 解压源码包、压缩日志
开发习惯建议: 为交叉编译工具链和 QEMU 工作目录设置别名,例如 alias armcc='arm-linux-gnueabihf-gcc',可大幅减少重复输入。

3.2 包管理器使用

Ubuntu/Debian 使用 apt 管理软件包。交叉编译环境依赖大量库和工具,必须掌握以下操作:

  1. 更新索引: sudo apt update
  2. 安装指定包: sudo apt install build-essential libncurses-dev
  3. 搜索包: apt-cache search arm-linux-gnueabihf
  4. 查看已安装: dpkg -l | grep gcc
  5. 清理缓存: sudo apt autoremove && sudo apt autoclean

关键依赖清单(网关驱动开发环境):

  • build-essential — 编译基础工具链
  • libncurses-dev — 内核 menuconfig 界面
  • qemu-system-arm — ARM 架构模拟器
  • flex、bison — 词法/语法分析器
  • libssl-dev — 内核模块签名支持

3.3 文件系统结构

Linux 文件系统遵循 FHS(Filesystem Hierarchy Standard)。嵌入式开发中重点关注以下目录:

Linux 文件系统层次结构(嵌入式开发视角) / /usr /etc /lib /opt /home 交叉编译器 头文件、库 系统配置 QEMU 启动参数 内核模块 动态链接库 第三方工具 交叉工具链 用户工作区 驱动源码 嵌入式开发关键路径 • 交叉编译器安装:/opt/gcc-arm-xxx/ 或 /usr/local/arm-xxx • 内核源码:~/kernel/linux-5.10 (用户家目录) • QEMU 模拟器:/usr/bin/qemu-system-arm • 根文件系统:~/rootfs/ (用于 QEMU 挂载)

3.4 权限管理

交叉编译工具链和 QEMU 涉及大量可执行文件、设备节点和配置文件,权限错误是初学者最常见的障碍。

操作 命令示例 说明
修改文件所有者 sudo chown user:user toolchain.tar.xz 避免 root 权限污染
添加可执行权限 chmod +x arm-linux-gnueabihf-gcc 工具链二进制必须可执行
递归修改目录 chmod -R 755 /opt/gcc-arm/ 库文件 644,目录 755
查看权限数字 stat -c "%a %n" qemu-system-arm 快速确认权限值
常见陷阱: 使用 sudo 编译内核或驱动时,生成的文件可能属于 root,导致后续普通用户无法修改。建议在 /home 下创建专用工作目录,避免在 /root 或 /opt 下直接编译。

3.5 环境变量配置

交叉编译链和 QEMU 依赖 PATH、LD_LIBRARY_PATH、CROSS_COMPILE 等环境变量。配置不当会导致“命令未找到”或“链接器错误”。

3.5.1 核心环境变量

变量名 作用 典型值
PATH 可执行文件搜索路径 /opt/gcc-arm/bin:$PATH
CROSS_COMPILE 交叉编译器前缀 arm-linux-gnueabihf-
ARCH 目标架构 arm
LD_LIBRARY_PATH 动态库搜索路径 /opt/gcc-arm/lib
QEMU_LD_PREFIX QEMU 用户态模拟库路径 /usr/arm-linux-gnueabihf

3.5.2 持久化配置方法

推荐将环境变量写入 ~/.bashrc 或 ~/.profile,避免每次打开终端重复设置:

# 交叉编译环境配置 - 添加到 ~/.bashrc 末尾
export PATH=/opt/gcc-arm-10.3-2021.07/bin:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
export QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf

# 生效配置
source ~/.bashrc

3.5.3 验证环境变量

# 检查交叉编译器是否在 PATH 中
which arm-linux-gnueabihf-gcc

# 查看当前架构设置
echo $ARCH

# 测试编译一个简单 C 文件
arm-linux-gnueabihf-gcc -o hello hello.c
file hello   # 输出应为 ELF 32-bit LSB executable, ARM

环境变量生效检查清单:

  • echo $PATH | grep arm — 确认交叉工具链路径已加入
  • arm-linux-gnueabihf-gcc --version — 确认编译器可执行
  • echo $CROSS_COMPILE — 确认前缀不为空
  • qemu-system-arm --version — 确认 QEMU 已安装

3.6 本章小结