【Semidrive】解决 X9HP reboot 导致 Android 崩溃的问题

本篇文章介绍如何解决 X9HP 平台的 AP1 域中插着 u 盘时运行 reboot 导致 Android 系统崩溃的问题,软件版本是 X9 PTG4.0,硬件环境是 X9H 开发板 X9H_REF_A04。

一、问题原因

在调试过程中遇到插着 u 盘时用 adb shell reboot 命令或直接在串口中 reboot 重启 Android, 重启后系统卡住,Android 这边的启动报错 log 如下:

二、问题分析及解决思路

1. 看 Android 启动 log 可以看出是 kernel rcu 的报错,该报错可能是 kernel 内下发命令时自旋锁上锁,然后有软中断触发,也需要使用自旋锁,此时下发命令的锁还未解锁,就会出现 rcu 的报错并且 Android 会崩溃。

2. 插上 u 盘就会出现该报错,所以有可能是 usb 驱动识别设备时使用了自旋锁,跟启动时 kernel 初始化任务的自旋锁冲突了,随后使用了原厂修复该问题的 patch 《X9-PTG4.0-Normal-Featrue-rebootNcr-patch-1101040.tar.gz》,但打入 patch 后问题依然未解决。

3. 查看 patch 内容,发现 patch 只针对 usb 的 OTG 和 PERIPHERAL 模式进行修复,但当前 dts 配置的 USB1 是 HOST 模式,新增了针对 HOST 模式的修复如下:
--- a/kernel/drivers/usb/dwc3/core.c
+++ b/kernel/drivers/usb/dwc3/core.c
@@ -1420,11 +1420,12 @@ static int dwc3_remove(struct platform_device *pdev)
static void dwc3_shutdown(struct platform_device *pdev)
{
struct dwc3 *dwc = platform_get_drvdata(pdev);
-
if (dwc->dr_mode == USB_DR_MODE_PERIPHERAL)
dwc3_gadget_exit(dwc);
if (dwc->dr_mode == USB_DR_MODE_OTG)
dwc3_drd_exit(dwc);
+ if (dwc->dr_mode == USB_DR_MODE_HOST)
+ dwc3_host_exit(dwc);
}

打上 patch 后,该问题已解决。

点击阅读原文,了解更多精彩内容~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——七大排序[源码+动图+性能测试]

本章代码gitee仓库:排序 文章目录 🎃0. 思维导图🧨1. 插入排序✨1.1 直接插入排序✨1.2 希尔排序 🎊2. 选择排序🎋2.1 直接选择排序🎋2.2 堆排序 🎏3. 交换排序🎐3.1 冒泡排序&#…

QT建立TCP服务器

QT core gui network *************************************************** #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket>//客户端头文件 #include <QList>//存放客户端…

垃圾回收 - 复制算法

GC复制算法是Marvin L.Minsky在1963年研究出来的算法。说简单点&#xff0c;就是只把某个空间的活动对象复制到其它空间&#xff0c;把原空间里的所有对象都回收掉。这是一个大胆的想法。在此&#xff0c;我们将复制活动对象的原空间称为From空间&#xff0c;将粘贴活动对象的新…

海天tech注塑机数据采集测试软件

本测试软件支持采集海天/力劲系列注塑机&#xff0c;弘讯TECH1、弘讯AK628、 弘讯TECH2、弘讯AK668等型号控制器。 采集数据类型示例如下&#xff1a; 设备状态、报警信息、开模总数 输出压力、速度、背压 射出、模座、托模位置 温度一~九段 开模、关模、高压、低压 射…

【爬虫小知识】如何利用爬虫爬网页——python爬虫

前言 网络时代的到来&#xff0c;给我们提供了海量的信息资源&#xff0c;但是&#xff0c;想要获取这些信息&#xff0c;手动一个一个网页进行查找&#xff0c;无疑是一项繁琐且效率低下的工作。这时&#xff0c;爬虫技术的出现&#xff0c;为我们提供了一种高效的方式去获取…

IntelliJ IDEA的远程开发(Remote Development)

DEA的远程开发功能&#xff0c;可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行&#xff0c;而本地仅运行客户端软件进行常规的开发操作即可&#xff0c;官方给出的逻辑图如下&#xff0c;可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…

爬虫源码---爬取小猫猫交易网站

前言&#xff1a; 本片文章主要对爬虫爬取网页数据来进行一个简单的解答&#xff0c;对与其中的数据来进行一个爬取。 一&#xff1a;环境配置 Python版本&#xff1a;3.7.3 IDE:PyCharm 所需库&#xff1a;requests &#xff0c;parsel 二&#xff1a;网站页面 我们需要…

poi-tl设置图片(通过word模板替换关键字,然后转pdf文件并下载)

选中图片右击 选择设置图片格式 例如word模板 maven依赖 <!-- java 读取word文件里面的加颜色的字体 转pdf 使用 --><dependency><groupId> e-iceblue </groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</ver…

Java Web3J :使用web3j监听、查询、订阅智能合约的事件

前面有文章写如何使用Docker-compose方式部署blockscout浏览器+charts图表,区块链浏览器已经部署成功了,同时我们在链上增加了治理投票流程,如何实时的把治理事件快速同步到浏览器呢?这时就想到了Web3J来监听智能合约的事件,来达到同步事件的效果 目录 Web3J简介功能简介m…

无需租云服务器,Linux本地搭建web服务,并内网穿透发布公网访问

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 xlwings模块详解 1、快速入门1、打开Excel2、创建工作簿2.1、使用工作簿2.2、操作…

【Eclipse】搭建python环境;运行第一个python程序helloword

目录 0.环境 1.需准备&搭建思路 2.搭建具体步骤 1&#xff09;查看是否安装过python 2&#xff09;安装eclipse 3&#xff09;安装和配置pyDev 3.创建第一个python程序具体步骤 1&#xff09;新建项目 2&#xff09;输入项目名字&#xff0c;和配置选项 3&#x…