Android - 集成三方模组原厂WiFi Hal库问题

news2024/11/23 18:27:59

Android - 集成三方模组原厂WiFi Hal库问题

       最近Android 11产品平台上需要集成三方WiFi/AP模组厂商提供的hal静态库时遇到一个问题:将三方的库代码集成进系统,并正确配置、编译出lib_driver_cmd_xxx.a(xxx一般是厂商的名字缩写,仅仅是个后缀用于区分不同厂家),根据Android的现有集成架构,这个lib_driver_cmd_xxx.a会被wpa_supplicant/hostapd等工具引用。

    一开始正常集成后万事大吉,实际测试发现不管操作SoftAp,或者WiFi,都会导致hostapd/wpa_supplicant crash,都是蹦在__cfi_check failed:

经过多方测试、查找,最后发现Google在较新的Android Arm64版本上,默认启用了CFI(控制流完整性)特性,这个特性的本意是不允许更改已编译二进制文件的原始控制流图,主要是为了防止黑客更改执行程序导致安全漏洞,具体可以参考Google Developer文档:

控制流完整性

 里面提到:

CFI 由编译器提供,在编译时将插桩添加到二进制文件中。我们支持 Clang 工具链中的 CFI 和 AOSP 中的 Android 构建系统。

对于 Arm64 设备上位于 /platform/build/target/product/cfi-common.mk 的一组组件,CFI 默认处于启用状态,cfi-common.mk的内容:

 根据注释发现,Android默认给wpa_supplicant的代码启用了CFI,同时也看到原生的qcom和broadcom的wpa_supplicant lib也都启用了CFI;因为我们不替换三方hal库,用原生qcom库时不会出现crash,所以参照这里的内容,把自己集成的lib库路径添加进PRODUCT_CFI_INCLUDE_PATHS,再编译测试后发现,功能正常、不会再出现__cfi_check failed异常,问题解决。

问了下chatgpt -_-,PRODUCT_CFI_INCLUDE_PATHS宏的作用为:

用来指定CFI特性所需要的头文件的路径,以便编译器能够正确地识别和使用CFI相关的库和函数。这个宏通常定义在Android系统的makefile文件中,用于指定CFI所需的头文件路径。在编译Android系统时,编译器会根据这个宏定义来查找和包含CFI相关的头文件,以确保编译器能够正确地识别和使用CFI特性,从而提高Android系统的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gazebo simulation

<?xml version"1.0" ?> <!-- --> <!-- | This document was autogenerated by xacro from /home/xrh/ros-project/gazebo_test/src/fmauch_universal_robot/ur_description/urdf/ur3_D455_2f140.urdf.xacro | --> <!-- | EDITING THIS…

C++---string

String C语言中的字符串和C中的string类标准库中的string类string类的常用接口string类对象的常见构造string类对象的容量操作string类对象的访问及遍历操作 C语言中的字符串和C中的string类 在C语言中&#xff0c;字符串是一个字符数组&#xff0c;它以空字符\0结尾&#xff…

【进程7】 2.15 有名管道介绍及使用 2.16有名管道实现简单版聊天功能

2.15 有名管道介绍及使用 有名管道&#xff08;FIFO first in first out&#xff09; 有名管道也可用于具有亲缘关系的进程之间&#xff0c;底层数据结构也是环形队列、循环队列。 有名管道的使用 unlink用于删除一个文件。 创建fifo文件 命令&#xff1a; 文件类型p&…

Android-WebRTC-双人视频

省略开启本机摄像头的过程 以下和WebSocket通信的时候&#xff0c;是通过Gson转对象为字符串的方式传输的数据 整个过程 layout_rtc.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:and…

汽车ECU刷机笔记

汽车ECU刷机笔记 ECU简介ECU刷机的意义点火提前角点火延迟角调整意义 常见刷ECU的方法:成本价格1.通过obd汽车诊断口读写数据2.bdm后台调试模式3.BENCH刷写4.BOOT需要拆开电脑板&#xff0c;焊接电路 ECU刷写程序读取数据OBD tools(汽车诊断器)蓝牙ODB诊断器&#xff1a; 读写设…

<j-editable-table 隐藏一列表格数据

&#xff1c;j-editable-table 隐藏一列表格数据 隐藏条码 本来列代码是这样的 {title: 条码, key: barCode, width: 15%, type: FormTypes.input, defaultValue: , placeholder: 请输入${title},validateRules: [{ required: true, message: ${title}不能为空 },// { pattern…

二分搜索树的特性

一、顺序性 二分搜索树可以当做查找表的一种实现。 我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor&#xff08;后继&#xff09;、predecessor&#xff08;前驱&#xff09;、floor&#xff08;地板&#xff09;、ceil&#xff08;天…

leetcode 699. 掉落的方块(java)

掉落的方块 leetcode 699. 掉落的方块题目描述线段树解法代码演示 leetcode 699. 掉落的方块 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/falling-squares 题目描述 在二维平面上的 x 轴上&#xff0c;放置着一些方块…

jmeter软件测试实验(附源码以及配置)

jmeter介绍 JMeter是一个开源的性能测试工具&#xff0c;由Apache软件基金会开发和维护。它主要用于对Web应用程序、Web服务、数据库和其他类型的服务进行性能测试。JMeter最初是为测试Web应用程序而设计的&#xff0c;但现在已经扩展到支持更广泛的应用场景。 JMeter 可对服务…

Linux系统入门之-系统编程【open、close函数】

继上一篇环境配置后就正式开始系统编程 RK3568开发板入门之-tftp&nfs的配置 open的使用&#xff0c;使用之前可以先在Ubuntu下查看帮助&#xff0c;了解open的使用和语法&#xff0c;如下&#xff1a; man 2 open对于open函数 *pathname&#xff1a;要打开的文件路径 f…

【JavaWeb】Tomcat底层机制和Servlet运行原理

&#x1f384;欢迎来到dandelionl_的csdn博文&#xff0c;本文主要讲解Java web中Tomcat底层机制和Servlet的运行原理的相关知识&#x1f384; &#x1f308;我是dandelionl_&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一…

Revisiting Personalized Federated Learning:Robustness Against Backdoor Attacks

ACM SIGKDD Conference on Knowledge Discovery and Data Mining 2023 秦泽钰&#xff0c;香港科技大学计算机科学与工程系博士生&#xff0c;联邦学习中个性化的额外增益&#xff1a;对于后门攻击的鲁棒性 https://github.com/alibaba/FederatedScope/tree/backdoor-bench 摘要…

MySQL两种安装方式

数据库&#xff1a; 一、 二、 三、 四、 五、MySQL的两种安装方式 .zip包的安装方式&#xff1a; .msi方式安装的需要到控制面板卸载 密码默认是空密码 5.7和8.0开始&#xff1a;加强安全相关操作&#xff0c;安装有所不同 前三步一样&#xff0c;第四步在cmd&#xff0c;以…

windows系统安装异构虚拟机arm版的银河麒麟服务器

下载qemu UEFI&#xff08;BIOS的替代方案&#xff09;的下载地址&#xff1a;http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd QEMU 软件的下载地址&#xff1a;https://qemu.weilnetz.de/w64/2021/qemu-w64-setup-20210505.exe …

Docker详解及常用命令介绍

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

【5】构建手写数字模型

1 mnist数据集 下载数据集&#xff1a; 手动下载&#xff1a;MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges tf程序下载&#xff1a; tensorflow2.x将数据集集成在Keras中。tensorflow2.0&#xff0c;更新删除了input_data的函数。 import…

19.主题时钟

主题时钟 html部分 <div class"btn">黑色</div><div class"clock-container"><div class"time">21</div><div class"date">21</div><div class"clock"><div class&qu…

经典面试题(力扣,接雨水)

接雨水 方法一思路测试代码复杂度测试结果 方法二思路测试代码复杂度测试结果 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…

Java基础——Stream类

文章目录 1 概述2 获取Stream对象3 常用API4 收集Stream流5 总结 1 概述 Stream类用于简化集合和数组操作的API。 Stream类提供了很多可以简化集合操作的api&#xff0c;比如过滤元素 示例如下&#xff1a; 假如一个List集合中存储着字符串&#xff0c;从这些字符串中找到以“…

Java反射 -- 详细介绍 (框架核心)

反射 是 Java框架 的核心 &#xff0c;无论是Tomcat、SpringMVC、Spring IOC、Spring AOP、动态代理 &#xff0c;都使用到了 反射 反射的作用简单讲就是 无需 new 对象&#xff0c;就可以动态获取到一个类的全部信息&#xff0c;包括 属性、方法&#xff0c;构造器&#xff0…