嵌入式——10 LinuxC

linuxC:

makefile包含哪几部分

目标、依赖、命令

编译器和编译选项

CC := gcc

CFLAGS := -Wall -Werror -g -c # 目标文件和可执行文件名

OBJ_FILES := main.o utils.o

TARGET := my_program

默认规则:生成可执行文件

(TARGET): (OBJ_FILES)

(CC) (CFLAGS) \^ -o @

生成目标文件 main.o

main.o: main.c utils.h

(CC) (CFLAGS) -c \< -o @

生成目标文件 utils.o

utils.o: utils.c utils.h

(CC) (CFLAGS) -c \< -o @

伪目标:清理临时文件 特殊规则(还可以安装文件)

.PHONY: clean

clean:

rm -f (TARGET) (OBJ_FILES)

注释以 # 开头,@表示目标文件,@ 表示目标文件,@表示目标文件,< 表示第一个依赖文件,$^ 表示所有依赖文件等。

linux命令

  1. 文件和目录操作:
    ls: 列出文件和目录
    cd: 切换目录
    pwd: 显示当前工作目录
    touch: 创建空文件或更新文件的访问时间
    mkdir: 创建新目录
    cp: 复制文件或目录
    mv: 移动文件或目录
    rm: 删除文件或目录
    cat: 查看文件内容
    more 或 less: 分页查看文件内容
    head: 查看文件开头部分
    tail: 查看文件结尾部分
  2. 文件内容处理:
    grep: 在文件中搜索指定字符串
    find: 在目录中查找文件
    wc: 统计文件中的行数、字数和字节数
    sort: 对文件内容进行排序
    uniq: 删除文件中的重复行
    cut: 从文件中截取字段
    sed: 流编辑器,用于处理文本流
  3. 文件权限和所有权管理:
    chmod: 修改文件或目录的权限
    chown: 修改文件或目录的所有者和所属
  4. 系统信息查看:

date: 显示或设置系统时间和日期

uptime: 查看系统运行时间和负载

ps: 显示进程状态

top: 实时显示系统进程状态

df: 查看磁盘空间使用情况

du: 查看文件和目录的磁盘使用情况

  1. 网络命令: ping: 测试网络连通性
    ifconfig 或 ip: 显示或配置网络接口信息
    netstat: 显示网络状态信息
    ssh: 安全远程登录
    scp: 安全复制文件或目录
    wget 或 curl: 下载文件或网页
  2. 系统管理:
    reboot: 重启系统
    shutdown: 关闭系统
    useradd: 添加新用户
    passwd: 修改用户密码

userdel: 删除用户

su: 切换用户

  1. 压缩和解压缩:
    tar: 打包和解包文件 -xvf
    gzip 或 gunzip: 压缩和解压缩文件
    zip 或 unzip: 压缩和解压缩zip文件

<>和""的区别

  1. <>:用于包含系统提供的标准库头文件或编译器所附带的头文件。编译器会在系统默认的头文件搜索路径中查找这些头文件。通常,这些头文件的路径信息已经配置在编译器中,无需指定具体路径。示例:#include <stdio.h>
  2. "":用于包含用户自定义的头文件或在当前工作目录下的头文件。编译器会首先在当前源文件所在的目录中查找头文件,如果没有找到,则在系统默认的头文件搜索路径中查找。示例:#include "my_header.h"

#ifndef的作用

#ifndef是C语言预处理指令中的条件有编译指令之一,其作用是防止头文件被多次包含,从而避免重复定义错误。

#ifndef HEADER_FILE_NAME_H

#define HEADER_FILE_NAME_H

// 头文件内容

#endif

gdb调试

启动GDB:在终端中运行gdb命令,然后在GDB提示符中输入要调试的可执行文件的路径,例如:gdb ./my_program。

设置断点: 使用break命令设置断点,例如:break main在main函数处设置断点。

运行程序:在GDB中使用run或r命令运行程序,例如:run。

单步执行:使用step或s命令单步执行程序,按行执行并进入函数。

运行到断点:使用continue或c命令运行程序,直到遇到下一个断点。

查看变量:使用print或p++命令查看变量的值,例如:print my_variable。++

查看堆栈:使用backtrace或bt命令查看函数调用堆栈。

跟踪变量:使用watch命令跟踪 变量的值变化,例如:watch my_variable。

删除断点:使用delete命令删除断点,例如:delete 1删除序号为1的断点。

退出GDB:使用quit或q命令退出GDB。

gcc编译步骤

预处理:对以#号开头的内容进行替换,不会检查语法错误。

gcc -E hello.c -o hello.i

编译:对代码进行编译,可以检查语法错误 。

gcc -S hello.i -o hello.s

汇编:将汇编代码转换成机器代码。

gcc -c hello.s -o hello.o

链接:将目标文件和其他可能需要的库文件链接在一起,生成可执行文件。

gcc hello.o -o hello

相关推荐
llilian_1616 小时前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
XINVRY-FPGA18 小时前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
asjodnobfy2 天前
生产过程中的电容损坏分析
嵌入式硬件·硬件工程
惶了个恐2 天前
嵌入式硬件第九弹——ARM(5)
arm开发·单片机·嵌入式硬件·arm·硬件工程
码泉3 天前
振荡电路笔记
硬件工程·电路·振荡器
张同学033 天前
220V 转 12V/5V 电源输入电路设计笔记
笔记·嵌入式硬件·硬件工程
qq_189370494 天前
红米note 9 pro掉电快、充不进电、无法开机、电池鼓包等故障的成功解决方法和步骤
硬件工程·红米手机·手机电池更换
零一iTEM4 天前
PPM通信测试—FS-i6X+FS-A8S接收机+ESP32
单片机·嵌入式硬件·硬件工程·学习方法
MARIN_shen6 天前
Marin说PCB之FAKAR中心焊盘的孔径尺寸问题
硬件工程·信号处理·pcb工艺
裕工实验室7 天前
氮化铝陶瓷基板 vs 铜基板:散热性能、绝缘与成本如何选择?
硬件工程·pcb工艺·材料工程