4、Linux基础命令回顾:文件操作、权限管理、进程管理、网络工具

在嵌入式Linux驱动开发中,熟练使用Linux命令行是基本功。本章将系统回顾文件操作、权限管理、进程管理及网络工具的核心命令,这些命令在后续的交叉编译环境配置、驱动模块加载调试、网络文件系统挂载等场景中会频繁使用。

4.1 文件操作命令

文件操作是驱动开发中最基础的操作,包括文件的创建、查看、复制、移动、删除以及查找。

命令 功能说明 常用示例
ls 列出目录内容 ls -la /dev/ 查看设备文件
cd 切换工作目录 cd /home/developer/kernel
pwd 显示当前绝对路径 pwd
cp 复制文件或目录 cp -r module_src/ /backup/
mv 移动或重命名 mv driver.ko driver_v2.ko
rm 删除文件或目录 rm -rf build/
mkdir 创建目录 mkdir -p arm-buildroot/{bin,lib,etc}
find 查找文件 find / -name "*.ko" 2>/dev/null
grep 文本搜索 grep -rn "module_init" ./drivers/
驱动开发提示: 使用 ls -l /dev/ 查看设备文件的主次设备号(major/minor),这是驱动与设备文件关联的关键信息。使用 find /lib/modules/$(uname -r) -name "*.ko" 查找当前内核已安装的内核模块。

4.2 权限管理

Linux的权限模型基于用户(User)、组(Group)和其他(Others)三类角色,每类角色拥有读(r=4)、写(w=2)、执行(x=1)三种权限。驱动开发中,设备文件的权限管理直接影响用户态程序能否访问硬件。

4.2.1 文件权限表示

使用 ls -l 查看文件权限,输出格式如 -rwxr-xr--,共10个字符:

  • 第1位: 文件类型(- 普通文件,d 目录,c 字符设备,b 块设备)
  • 第2-4位: 所有者(User)权限
  • 第5-7位: 所属组(Group)权限
  • 第8-10位: 其他用户(Others)权限

4.2.2 常用权限管理命令

命令 功能 驱动开发场景示例
chmod 修改文件权限 chmod 666 /dev/mydevice 使所有用户可读写设备
chown 修改文件所有者 chown root:root /dev/ttyS0
umask 设置默认权限掩码 umask 0022 新文件默认 644
id 查看当前用户信息 id 确认UID/GID
权限陷阱: 驱动设备文件通常需要 root 权限或属于 dialout/plugdev 组才能访问。如果用户态程序无法打开设备文件,请先检查 ls -l /dev/设备名 的权限位,并使用 sudo chmod 666 或添加用户到对应组。

4.2.3 权限管理流程SVG

Linux 文件权限管理流程 用户进程请求访问 内核 VFS 权限检查 权限匹配? 拒绝访问 返回 -EACCES 允许访问 调用驱动接口 检查依据:文件所有者UID、所属组GID、其他用户权限位(rwx)

4.3 进程管理

驱动开发中,进程管理用于监控系统资源、调试驱动行为、杀死异常进程。交叉编译环境中,进程管理也用于管理编译任务和后台服务。

命令 功能 驱动开发场景
ps 查看进程快照 ps aux | grep insmod 查看模块加载进程
top 动态监控进程 top -p $(pgrep my_driver) 监控驱动进程资源
kill 发送信号终止进程 kill -9 1234 强制杀死卡死的测试程序
pkill 按名称终止进程 pkill test_app
jobs 查看后台任务 jobs -l 查看编译任务状态
nohup 后台运行并忽略挂断 nohup make -j4 & 后台编译内核
strace 跟踪系统调用 strace -e open,ioctl ./test 调试驱动接口调用
调试技巧: 当驱动加载后,使用 ps -eo pid,comm,state | grep -E "(insmod|modprobe)" 查看模块加载进程状态。如果模块加载卡住,使用 cat /proc/模块名/status 查看驱动进程的详细状态信息。

4.4 网络工具

网络工具在嵌入式Linux开发中至关重要,用于配置开发板网络、测试网络连通性、通过SSH远程登录目标板、使用NFS挂载根文件系统等。

4.4.1 ifconfig — 网络接口配置

ifconfig 用于查看和配置网络接口参数。在嵌入式开发中,经常需要为开发板设置静态IP地址。

# 查看所有网络接口
ifconfig -a

# 配置以太网接口 eth0 的 IP 地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up

# 配置并激活接口(简写)
sudo ifconfig eth0 192.168.1.100/24 up

# 禁用接口
sudo ifconfig eth0 down

4.4.2 ping — 网络连通性测试

ping 使用ICMP协议测试目标主机是否可达。在交叉编译环境中,用于确认开发板与主机之间的网络连接。

# 测试与主机的连通性(开发板上执行)
ping 192.168.1.10 -c 4

# 测试与开发板的连通性(主机上执行)
ping 192.168.1.100 -c 4

# 持续ping并记录时间戳
ping -D 192.168.1.10

4.4.3 ssh — 远程登录与文件传输

SSH(Secure Shell)是嵌入式开发中最常用的远程管理工具,支持加密登录、远程命令执行和文件传输。

命令/工具 功能 示例
ssh 远程登录 ssh root@192.168.1.100
scp 安全复制文件 scp driver.ko root@192.168.1.100:/root/
rsync 增量同步文件 rsync -avz --progress ./rootfs/ root@192.168.1.100:/
ssh-keygen 生成SSH密钥对 ssh-keygen -t rsa -b 4096
ssh-copy-id 复制公钥到远程主机 ssh-copy-id root@192.168.1.100
免密登录配置: 在主机上执行 ssh-keygen -t rsa 生成密钥对,然后执行 ssh-copy-id root@开发板IP 将公钥复制到开发板。之后 scp 和 ssh 不再需要输入密码,大幅提升开发效率。

4.4.4 网络工具工作流程SVG

嵌入式开发网络工具工作流程 开发主机 (Ubuntu) 目标开发板 (ARM) 以太网 / WiFi 网络 ifconfig / ping / ssh sshd / ifconfig / ping scp 传输驱动模块 ssh 远程调试 NFS 挂载根文件系统 TFTP 下载内核 网络配置检查清单 1. 使用 ifconfig 确认开发板 IP 地址与主机在同一子网(如 192.168.1.x) 2. 使用 ping 测试双向连通性(主机→开发板,开发板→主机) 3. 确认开发板 sshd 服务已启动:ps aux | grep sshd

4.5 综合实战:驱动开发中的命令组合

以下是一个典型的驱动开发调试流程,展示了上述命令的综合运用:

# 1. 查看当前内核版本,确认与驱动源码匹配
uname -r

# 2. 查找已安装的内核模块
find /lib/modules/$(uname -r) -name "*.ko" | head -10

# 3. 编译驱动模块(后台运行,避免终端占用)
nohup make -j4 > build.log 2>&1 &

# 4. 查看编译进程状态
ps aux | grep make

# 5. 将编译好的驱动模块传输到开发板
scp my_driver.ko root@192.168.1.100:/root/

# 6. SSH登录开发板并加载驱动
ssh root@192.168.1.100 "insmod /root/my_driver.ko"

# 7. 查看驱动加载后的设备文件权限
ssh root@192.168.1.100 "ls -l /dev/my_device"

# 8. 修改设备文件权限,允许普通用户访问
ssh root@192.168.1.100 "chmod 666 /dev/my_device"

# 9. 运行测试程序并跟踪系统调用
strace -e open,ioctl,write ./test_app /dev/my_device
网络故障排查: 如果 scp 或 ssh 连接失败,按以下步骤排查:
1. ping 开发板IP — 检查物理连接和IP配置
2. telnet 开发板IP 22 — 检查SSH端口是否开放
3. ssh -vvv root@开发板IP — 查看详细连接日志
4. 检查开发板防火墙:iptables -L -n 或 ufw status

4.6 本章命令速查表

类别 命令 核心参数 驱动开发用途
文件操作 find -name, -type, -size 查找内核模块、设备树文件
grep -r, -n, -l 搜索驱动源码中的函数定义
tar -xzf, -czf 解压内核源码、工具链
权限管理 chmod 数字模式, -R 设置设备文件访问权限
chown user:group 修改设备文件所有者
进程管理 kill -9, -15, -2 终止卡死的驱动测试程序
strace -e, -p, -o 跟踪驱动系统调用接口
网络工具 ifconfig up, down, netmask 配置开发板网络接口
scp -r, -P, -C 传输驱动模块到开发板
ssh -X, -L, -R 远程登录开发板调试