1. 嵌入式开发入门命令概述
嵌入式系统开发与传统软件开发最大的区别在于其资源受限性和硬件相关性。作为一名嵌入式开发者,掌握基础命令是进行系统调试、程序开发和硬件交互的第一步。嵌入式Linux环境下常用的命令可以分为以下几大类:
- 系统信息查询命令:用于获取处理器、内存、系统版本等硬件信息
- 文件操作命令:在资源受限环境下进行高效文件管理
- 进程管理命令:监控和控制系统资源使用
- 网络调试命令:嵌入式设备联网调试的必备工具
- 硬件操作命令:直接与硬件外设交互的低级操作
2. 基础系统信息查询命令
2.1 硬件信息查询
在嵌入式开发中,首先需要了解目标板的硬件配置。以下命令可以帮助开发者快速获取系统信息:
code复制# 查看CPU信息
cat /proc/cpuinfo
# 查看内存使用情况
free -m
# 查看系统内核版本
uname -a
# 查看系统运行时间
uptime
这些命令在调试交叉编译的程序时特别有用,可以确认目标板的架构(ARM/MIPS等)和内核版本是否与开发环境匹配。
2.2 存储设备信息
嵌入式设备通常使用Flash或SD卡作为存储介质,以下命令可以帮助管理存储空间:
code复制# 查看磁盘分区情况
fdisk -l
# 查看磁盘使用情况
df -h
# 查看目录大小
du -sh /path/to/directory
在资源受限的嵌入式系统中,经常需要监控存储使用情况,避免日志或临时文件占满存储空间导致系统异常。
3. 文件操作与管理命令
3.1 基础文件操作
嵌入式Linux继承了标准Linux的文件操作命令,但需要注意BusyBox实现的差异:
code复制# 复制文件
cp source_file destination
# 移动/重命名文件
mv old_name new_name
# 删除文件
rm file_to_remove
# 创建目录
mkdir new_directory
3.2 文件权限管理
嵌入式系统通常需要严格控制文件权限以确保安全性:
code复制# 修改文件权限
chmod 755 executable_file
# 修改文件所有者
chown user:group file
# 修改特殊权限位
chmod +s setuid_file
在嵌入式开发中,经常需要设置setuid位来允许普通用户执行需要root权限的操作(如硬件控制)。
4. 进程管理与系统监控
4.1 进程查看与控制
嵌入式系统资源有限,需要密切监控进程状态:
code复制# 查看系统进程
ps aux
# 实时监控系统资源
top
# 结束进程
kill -9 pid
4.2 系统日志查看
嵌入式系统的日志通常通过syslog或直接输出到串口:
code复制# 查看内核日志
dmesg
# 查看系统日志
cat /var/log/messages
# 实时查看日志更新
tail -f /var/log/syslog
在资源受限的设备上,可能需要调整日志级别以减少日志量:
code复制# 设置内核日志级别
echo "6" > /proc/sys/kernel/printk
5. 网络调试命令
5.1 基础网络配置
嵌入式设备联网调试是常见需求:
code复制# 查看网络接口
ifconfig -a
# 配置IP地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# 测试网络连通性
ping 192.168.1.1
5.2 高级网络工具
code复制# 网络端口扫描
nmap 192.168.1.1
# 网络抓包
tcpdump -i eth0 -w capture.pcap
# SSH连接
ssh root@192.168.1.100
在嵌入式开发中,经常需要通过网络加载文件系统或程序:
code复制# 通过NFS挂载远程目录
mount -t nfs 192.168.1.1:/path/to/share /mnt/nfs
6. 硬件操作与调试命令
6.1 GPIO控制
嵌入式开发经常需要直接操作硬件引脚:
code复制# 导出GPIO引脚
echo 48 > /sys/class/gpio/export
# 设置方向
echo "out" > /sys/class/gpio/gpio48/direction
# 设置输出值
echo 1 > /sys/class/gpio/gpio48/value
6.2 I2C工具
code复制# 扫描I2C总线
i2cdetect -y 1
# 读取I2C设备寄存器
i2cget -y 1 0x50 0x00
6.3 SPI操作
code复制# 通过SPI接口发送数据
spidev_test -D /dev/spidev0.0 -s 1000000 -p "\x01\x02\x03"
7. 系统启动与初始化
7.1 启动脚本管理
嵌入式系统通常使用init.d或systemd管理服务:
code复制# 列出所有服务
service --status-all
# 启动服务
service ssh start
# 设置开机启动
update-rc.d ssh defaults
7.2 环境变量管理
code复制# 查看所有环境变量
printenv
# 设置环境变量
export PATH=$PATH:/new/path
# 永久保存环境变量
echo "export PATH=$PATH:/new/path" >> ~/.bashrc
8. 调试与性能分析工具
8.1 GDB调试
code复制# 启动GDB调试
gdb ./my_program
# 远程调试
gdbserver :2345 ./my_program
8.2 性能分析
code复制# 统计程序运行时间
time ./my_program
# 分析CPU使用
perf top
# 内存泄漏检查
valgrind --leak-check=yes ./my_program
9. 交叉编译相关命令
嵌入式开发通常需要在主机上交叉编译程序:
code复制# 设置交叉编译工具链
export CC=arm-linux-gnueabihf-gcc
# 交叉编译程序
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
10. 实用技巧与注意事项
- 在资源受限的设备上,尽量使用静态链接减少库依赖:
code复制arm-linux-gnueabihf-gcc -static my_program.c -o my_program
- 使用strip减小可执行文件大小:
code复制arm-linux-gnueabihf-strip my_program
- 嵌入式系统可能没有完整的man手册,可以:
code复制busybox --help
- 使用alias简化常用命令:
code复制alias ll='ls -alh'
- 在嵌入式设备上,优先使用轻量级工具:
code复制# 使用busybox的ps代替完整版
busybox ps
