当前位置: 首页 > java >正文

【Linux】Linux应用开发小经验

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

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

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


目录

1    关于编译命令

1.1    $CC

2    设置自启动

3    一些技巧

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    获取微秒级时间

#include <sys/time.h>
long getMicrotime()
{struct timeval currentTime;gettimeofday(&currentTime, NULL);return currentTime.tv_sec * (int)1e6 + currentTime.tv_usec;
}


 

http://www.xdnf.cn/news/3706.html

相关文章:

  • 信息安全导论 第七章 网络边界防御技术
  • 前端面经-VUE3篇(二)--vue3组件知识(二)依赖注入、异步组件、生命周期、组合式函数、插件
  • piccolo-large-zh-v2 和 bge-m3哪个效果好?
  • 【Mytais系列】SqlSession
  • 经典算法 求解硬币组成问题
  • 【Mytais系列】Select语句执行流程
  • 学习笔记:Qlib 量化投资平台框架 — FOR DEVELOPERS
  • 使用线性表实现通讯录管理
  • MySQL表的约束
  • Yocto介绍
  • 【C语言练习】018. 定义和初始化结构体
  • 【c++】模板详解
  • [android]MT6835 Android 移植brctl指令
  • PowerShell从5.1升级到7.X
  • 深挖Java之:运算符与输入器
  • #Paper Reading# DeepSeek-R1
  • DeepSeek与MySQL:开启数据智能新时代
  • Java SE(7)——类和对象(二)
  • 【Java Stream流-59】Java Stream流式编程:高效、优雅的数据处理之道
  • [案例二] 菜单条制作(Menuscript)与工具条制作(Toolbar)
  • Python基础语法
  • 【Arthas】火焰图优化应用CPU(问题原因:获取调用栈)
  • C语言字符函数和字符串函数详解:从基础到实战
  • C语言奇幻指南:宏、头文件与变量的秘密世界
  • 二、机器学习中Python变量基础
  • 防范反序列化攻击:如何安全处理敏感数据序列化
  • 【C/C++】MQTT
  • Git从入门到精通-第三章-获取Git仓库
  • 【Agent搭建】利用coze平台搭建一个AI销售?
  • Spring MVC @RequestBody 注解怎么用?接收什么格式的数据?