【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;
}
相关推荐
_君落羽_3 分钟前
Linux操作系统——TCP服务端并发模型
linux·服务器·c++
望获linux2 小时前
【Linux基础知识系列】第一百一十篇 - 使用Nmap进行网络安全扫描
java·linux·开发语言·前端·数据库·信息可视化·php
花小璇学linux8 小时前
imx6ull-驱动开发篇42——Linux I2C 驱动框架简介
linux·驱动开发·嵌入式软件
凌肖战8 小时前
编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
linux·驱动开发
Wy_编程11 小时前
VS中创建Linux项目
linux
luck_lin11 小时前
linux添加新硬盘挂载分区和数据迁移
linux·运维·分区扩容
iFulling11 小时前
【云原生】CentOS安装Kubernetes+Jenkins
linux·云原生·kubernetes·centos·jenkins
喜欢你,还有大家13 小时前
Linux笔记10——shell编程基础-4
linux·运维·服务器·笔记
不懂机器人13 小时前
linux编程----网络通信(TCP)
linux·服务器·tcp/ip
tanyongxi6614 小时前
简易shell
linux·运维·服务器