基于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(¤tTime, NULL);
return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec;
}