【嵌入式 Linux 实战 2】高频命令 + 主函数传参:嵌入式开发必备技能

21 阅读7分钟

【嵌入式 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 安装包.debsudo 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. 模块化实现思路

  • 按功能拆分模块(符合嵌入式模块化开发规范):

    1. main.c:主函数,解析命令行参数,调用对应计算函数;
    2. add.c/sub.c/mul.c/div.c:分别实现加减乘除功能;
    3. 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 核心技能要点

  1. 命令是基础:熟练掌握文件操作、权限管理、进程网络命令,提高开发效率;
  2. 权限很重要:嵌入式程序需执行权限(chmod +x),开发板文件共享需配置正确权限;
  3. 主函数传参:是嵌入式程序接收外部参数的常用方式,需掌握argc/argv用法;
  4. 模块化开发:按功能拆分代码,符合嵌入式项目规范(便于调试和移植)。

掌握这些技能后,你就能应对嵌入式开发的日常工作(如编译项目、调试程序、管理开发板文件)。后续我会带大家学习嵌入式交叉编译、开发板与 Linux 的通信等进阶内容,敬请关注!