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 管理软件包。交叉编译环境依赖大量库和工具,必须掌握以下操作:
- 更新索引:
sudo apt update - 安装指定包:
sudo apt install build-essential libncurses-dev - 搜索包:
apt-cache search arm-linux-gnueabihf - 查看已安装:
dpkg -l | grep gcc - 清理缓存:
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)。嵌入式开发中重点关注以下目录:
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 已安装