【Linux】Linux应用开发小经验

基于Petalinux工具链的Linux应用开发小经验,未完待续...

部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。

专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

[1 关于编译命令](#1 关于编译命令)

[1.1 CC](#1.1 CC)

[2 设置自启动](#2 设置自启动)

[3 一些技巧](#3 一些技巧)

[3.1 获取微秒级时间](#3.1 获取微秒级时间)


1 关于编译命令

1.1 $CC

当运行 $CC 命令时,实际上使用的是以下命令:

arm-xilinx-linux-gnueabi-gcc -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/pkg/petalinux_sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi

这些参数定义了编译器的行为和生成的目标代码的特性。下面是每个参数的解释:

**(1) arm-xilinx-linux-gnueabi-gcc:**这是交叉编译器的名称,用于编译针对ARM架构的代码,特别是针对Xilinx FPGA设备的。gnueabi指的是 GNU EABI(嵌入式应用程序二进制接口)。

**(2) -mthumb:**这个选项指定生成Thumb指令集的代码,这是一种16位的指令集,用于ARM架构,可以减少代码大小。

**(3) -mfpu=neon:**这个选项指定浮点单元(FPU)为NEON,这是一种SIMD(单指令多数据)架构,用于ARM处理器,可以加速多媒体和信号处理应用。

**(4) -mfloat-abi=hard:**这个选项指定使用硬浮点ABI(应用程序二进制接口),意味着浮点运算将使用硬件浮点单元。

**(5) -mcpu=cortex-a9:**这个选项指定目标CPU为ARM Cortex-A9。

**(6) -fstack-protector-strong:**这个选项启用了强栈保护,这是一种安全特性,用于防止缓冲区溢出攻击。

**(7) -O2:**这是优化级别,-O2 表示优化编译器生成的代码以提高性能,同时保持代码大小和性能之间的平衡。

**(8) -D_FORTIFY_SOURCE=2:**这个宏定义用于启用额外的安全检查,以检测某些类型的缓冲区溢出。

**(9) -Wformat 和 -Wformat-security:**这些选项启用了对格式化字符串的警告,帮助检测可能导致安全问题的格式化字符串的使用。

**(10) -Werror=format-security:**这个选项将格式化安全警告视为错误,这意味着如果检测到潜在的安全问题,编译将失败。

**(11) --sysroot=/opt/pkg/petalinux_sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi:**这个选项指定了系统根目录,编译器将使用这个目录中的库和头文件来编译程序。

2 设置自启动

可在/etc/profile.d路径新建自己的.sh脚本,然后chmod 777。

但需要注意的是,设置了自启动就不要将uboot中的bootargs环境变量设置为具有console=ttyPS0,115200内容的了,如果指定了串口,那么串口不连接,系统根本启动不了,更别说应用了。会卡在uboot的命令行中。

3 一些技巧

3.1 获取微秒级时间

cpp 复制代码
#include <sys/time.h>
long getMicrotime()
{
    struct timeval currentTime;
    gettimeofday(&currentTime, NULL);
    return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec;
}
相关推荐
吴声子夜歌31 分钟前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
xiaoye-duck2 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
zx_741484813 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS3 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿3 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
做运维的阿瑞4 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲5 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz5 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
susplus6 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)6 小时前
Linux进阶知识1.0
linux·运维·服务器