【嵌入式 Linux 实战 2】高频命令 + 主函数传参:嵌入式开发必备技能
大家好,我是学嵌入式的小杨同学。在上一篇博客中,我们搞定了 Ubuntu 环境搭建和目录结构,今天就进入核心实战 —— 掌握 Linux 高频命令(文件操作、权限管理、进程网络等),再结合主函数传参实现模块化计算器,这些技能是嵌入式开发的 “日常必备”(如编译项目、调试程序、管理开发板文件)。
一、嵌入式开发高频 Linux 命令(按场景分类)
Linux 命令是嵌入式开发的 “左手”,以下按使用频率排序,附实战示例:
1. 文件 / 目录操作(最常用)
嵌入式开发中,创建项目、编写代码、管理文件都离不开这些命令:
| 命令 | 功能 | 实战示例 |
|---|---|---|
pwd | 查看当前目录绝对路径 | pwd → 输出/home/zcy/project |
ls | 列出目录内容 | ls -l(详细信息)、ls -a(显示隐藏文件) |
cd | 切换目录 | cd ..(上一级)、cd /home/zcy(绝对路径)、cd ~(主目录) |
mkdir | 创建目录 | mkdir project(创建单个目录)、mkdir -p a/b/c(递归创建多级目录) |
touch | 创建空文件 | touch main.c(创建 C 语言源文件) |
cat | 查看文件内容 | cat main.c(直接查看)、cat -n main.c(显示行号) |
cp | 复制文件 / 目录 | cp main.c test.c(复制文件)、cp -r project/ backup/(复制目录) |
mv | 移动 / 重命名 | mv test.c src/(移动文件)、mv main.c app.c(重命名) |
rm | 删除文件 / 目录 | rm app.c(删除文件)、rm -r backup/(删除目录,慎用!) |
find | 查找文件 | find ~ -name "*.c"(查找主目录下所有.c 文件) |
2. 用户与权限管理(嵌入式开发板常用)
嵌入式开发中,常需切换用户(如 root 权限操作开发板)、配置文件权限(如可执行程序):
(1)用户管理命令
| 命令 | 功能 | 实战示例 |
|---|---|---|
useradd | 新增用户(需手动创建主目录) | sudo useradd xyd |
adduser | 新增用户(自动创建主目录) | sudo adduser xyd1(按提示设置密码、信息) |
su | 切换用户 | su root(切换到 root 用户)、su xyd1(切换到普通用户) |
passwd | 修改密码 | sudo passwd xyd1(修改 xyd1 用户密码) |
userdel | 删除用户 | sudo userdel -r xyd1(-r删除主目录,避免残留) |
groups | 查看用户组 | groups zcy(查看 zcy 用户所属组) |
(2)权限管理命令(chmod)
Linux 文件权限分为 “所有者(u)、组用户(g)、其他用户(o)”,每种权限包含 “读(r=4)、写(w=2)、执行(x=1)”:
-
符号模式(直观易懂):
bash
运行
chmod u+x main.c # 给所有者添加执行权限 chmod g-w main.c # 给组用户取消写权限 chmod a+r main.c # 给所有用户添加读权限(a=all) -
八进制模式(嵌入式开发常用,简洁高效):
bash
运行
chmod 755 main.c # 所有者rwx,组用户rx,其他用户rx(最常用,可执行程序) chmod 644 main.c # 所有者rw,组用户r,其他用户r(普通文件) chmod 700 main.c # 仅所有者有rwx权限(保密文件)
3. 进程与网络管理(嵌入式调试必备)
嵌入式开发中,需查看程序运行状态、网络连接(如开发板与 PC 通信):
(1)进程管理命令
| 命令 | 功能 | 实战示例 |
|---|---|---|
ps | 查看进程 | ps -ef(查看所有进程)、ps -aux(显示进程资源占用) |
top | 动态查看进程 | top(实时显示 CPU、内存占用,按 q 退出) |
kill | 终止进程 | kill -9 1234(-9强制终止 PID 为 1234 的进程) |
uptime | 查看系统运行时间与负载 | uptime → 输出系统运行时长、CPU 负载 |
(2)网络管理命令
| 命令 | 功能 | 实战示例 |
|---|---|---|
ifconfig | 查看 IP 地址 | ifconfig → 查看 ens33 网卡的 IP(如 192.168.0.81) |
ping | 测试网络连通性 | ping 192.168.0.100(测试与开发板的连通性) |
4. 压缩解压与安装命令(工具 / 代码管理)
(1)压缩解压(tar命令,嵌入式代码包常用)
| 功能 | 命令 | 示例 |
|---|---|---|
| 压缩(打包为.gz 文件) | tar -cvf test.tar.gz test/ | 压缩 test 目录为 test.tar.gz |
| 解压(.gz 文件) | tar -xvf test.tar.gz | 解压到当前目录 |
| 解压到指定目录 | tar -xvf test.tar.gz -C /home/zcy/ | 解压到 /home/zcy 目录 |
(2)软件安装(嵌入式工具链安装常用)
| 安装方式 | 命令 | 示例 |
|---|---|---|
| 在线安装(apt) | sudo apt install 软件名 | sudo apt install gcc(安装 C 编译器) |
| 离线安装(dpkg) | sudo dpkg -i 安装包.deb | sudo dpkg -i code_1.85.deb(安装 VSCode) |
5. 其他高频命令
-
echo:回显内容(常用于脚本、创建简单文件):bash
运行
echo "hello embedded" # 回显到终端 echo "int main(){}" > main.c # 回显内容到文件(覆盖原有内容) echo "printf("hello");" >> main.c # 追加内容到文件 -
ln:创建链接文件(嵌入式开发中共享库常用):bash
运行
ln -s main.c link.c # 创建软链接(类似Windows快捷方式,删除原文件失效) ln main.c hard_link.c # 创建硬链接(复制原文件属性,删除原文件仍可用)
二、实战:主函数传参实现模块化计算器
在嵌入式开发中,主函数传参常用于 “通过命令行传递程序参数”(如指定串口波特率、IP 地址),以下基于资料实现模块化计算器(支持 +、-、*、/)。
1. 主函数传参核心概念
C 语言主函数的两个参数用于接收命令行参数:
int argc:传入参数的个数(包含程序名本身);char *argv[]:参数数组,每个元素是字符串类型的参数(argv[0]是程序名,argv[1]及以后是用户传入参数)。
2. 模块化实现思路
-
按功能拆分模块(符合嵌入式模块化开发规范):
main.c:主函数,解析命令行参数,调用对应计算函数;add.c/sub.c/mul.c/div.c:分别实现加减乘除功能;calc.h:声明计算函数,供主函数调用。
3. 完整代码实现
(1)头文件calc.h(函数声明)
c
运行
#ifndef CALC_H
#define CALC_H
// 计算函数声明
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
#endif
(2)计算模块add.c(其他模块类似)
c
运行
#include "calc.h"
// 加法实现
int add(int a, int b) {
return a + b;
}
(3)主函数main.c(参数解析 + 调用)
c
运行
#include <stdio.h>
#include <stdlib.h>
#include "calc.h"
int main(int argc, char *argv[]) {
// 检查参数个数(需传入3个参数:程序名 数字1 运算符 数字2 → argc=4)
if (argc != 4) {
printf("参数错误!用法:./calc 数字1 运算符 数字2\n");
return 1;
}
// 字符串转整型(嵌入式常用atoi函数)
int num1 = atoi(argv[1]);
int num2 = atoi(argv[3]);
char op = argv[2][0]; // 运算符(argv[2]是字符串,取第一个字符)
// 调用对应计算函数
int result = 0;
switch (op) {
case '+':
result = add(num1, num2);
break;
case '-':
result = sub(num1, num2);
break;
case '*':
result = mul(num1, num2);
break;
case '/':
if (num2 == 0) {
printf("错误:除数不能为0\n");
return 1;
}
result = div(num1, num2);
break;
default:
printf("错误:不支持的运算符(仅支持+、-、*、/)\n");
return 1;
}
// 输出结果
printf("%d %c %d = %d\n", num1, op, num2, result);
return 0;
}
4. 编译与运行(嵌入式开发编译流程)
bash
运行
# 1. 编译所有模块,生成可执行文件calc
gcc main.c add.c sub.c mul.c div.c -o calc
# 2. 运行计算器(命令行传参)
./calc 10 + 5 # 输出:10 + 5 = 15
./calc 20 * 3 # 输出:20 * 3 = 60
./calc 15 / 2 # 输出:15 / 2 = 7(整型除法)
5. 嵌入式应用场景
- 开发板程序:通过命令行传递参数(如
./uart_tool /dev/ttyUSB0 115200,指定串口设备和波特率); - 模块化开发:将不同功能拆分为单独的.c 文件,便于维护和复用(如嵌入式驱动的不同功能模块)。
三、总结:嵌入式 Linux 核心技能要点
- 命令是基础:熟练掌握文件操作、权限管理、进程网络命令,提高开发效率;
- 权限很重要:嵌入式程序需执行权限(
chmod +x),开发板文件共享需配置正确权限; - 主函数传参:是嵌入式程序接收外部参数的常用方式,需掌握
argc/argv用法; - 模块化开发:按功能拆分代码,符合嵌入式项目规范(便于调试和移植)。
掌握这些技能后,你就能应对嵌入式开发的日常工作(如编译项目、调试程序、管理开发板文件)。后续我会带大家学习嵌入式交叉编译、开发板与 Linux 的通信等进阶内容,敬请关注!