Google Pixel4手机刷机+Root+逆向环境详细教程
Google Pixel4手机刷机+Root+逆向环境配置详细教程
刷机工具下载
Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magisk-v27.0.zip、LSPosed-v1.8.6-6712-zygisk-release.zip
美/欧版判断
Google Pixel 4手机在美版和欧版之间通常有一些区别,其中一个重要的区别就是监管标签。这些标签可通过点击手机的
Settings(设置) → System(系统) → About phone(关于手机) → Regulatory labels(监管标签)
来查看,可以帮助区分手机是针对美国市场还是欧洲市场。但要注意,实际的监管标签可能会因地区而异,以下是一些可能的区别:
- FCC标签(美版):美国版本的Pixel 4手机通常会在包装盒上附有美国联邦通信委员会(FCC)的认证标签。这些标签包含FCC ID号码和其他必要的监管信息,用于在美国销售的设备。
- CE标签(欧版):欧洲版本的Pixel 4手机通常会在包装盒上附有CE认证标签。CE标签表示该设备符合欧盟的技术规范和法规,允许其在欧洲市场销售和使用。
- 其他地区的标签:除了FCC和CE标签之外,其他地区的Pixel 4手机可能会有不同的监管标签,具体取决于当地的监管要求。
要确定您的Pixel 4手机是美版还是欧版,您可以检查监管标签上显示的内容即可!此设备监管标签如下图所示:
解锁Bootloader
注意:解锁 Bootloader 重置设备数据,请注意备份。请务必退出你的Google账号和取消指纹识别及锁屏设置。刷机前最好对手机做双清或恢复出厂设置。
安装「科学上网」工具,并成功接入互联网,不然后续的「OEM解锁」选项应该会显示为灰色,无法点击。
选择「设置→系统→关于手机→版本号」,戳「版本号」7次开启 「开发者选项」,开启后会提示[您已处于开发者模式,无需进行此操作。]
返回「上一页」,进入「系统→高级 →开发者选项」开启「USB调试」和「OEM解锁」两个选项。
如果「OEM解锁」选项显示为灰色,请检查网络连接是否正常;如果为灰色且显示OEM 解锁 引导加载程序已解锁
可直接跳到后续的判断是否解锁成功
的过程即可!
通过数据线将手机连接至电脑,此时,手机端会弹出 USB 调试申请,点击「允许」。
配置相关adb环境变量,网上可以直接搜索配置,完成后可通过命令 adb devices
来验证是否允许adb调试:
C:\Users\Administrator>adb devices
List of devices attached
99xxxxxAZ001RD device
进入Bootloader模式
进入bootloader默认有两种方式:第一种是通过在关机状态下同时按住「按住电源键+音量减键」;第二种是通过「ADB命令」进入。
这里我采用「adb命令」来操作。回到命令提示符窗口,键入 adb reboot bootloader
并回车,手机会立即重启至 Bootloader 模式。
C:\Users\Administrator>adb reboot bootloader
之后,通过 fastboot devices
命令验证 fastboot 是否成功:
C:\Users\Administrator>fastboot devices
99xxxxxAZ001RD fastboot
解锁Bootloader
上一步进入Bootloader页面后,手机界面应该是如下图:
在命令提示符窗口键入 fastboot flashing unlock
并回车,手机进入 Bootloader 解锁界面。
C:\Users\Administrator>fastboot flashing unlock
…
OKAY [ 0.049s]
finished. total time: 0.049s
对于 Pixel 4
机型,要用如下的命令:
fastboot flashing unlock
详情查看:Factory Images for Nexus and Pixel Devices | Google APIs for Android | Google Developers
在 Bootloader 解锁界面中,使用音量键 +/-
来控制光标,选择「Yes」并按下电源键来进行 Bootloader 解锁。
确认完毕后,稍作等待。通过 fastboot reboot
命令重启手机:
C:\Users\Administrator>fastboot reboot
rebooting…finished. total time: 0.050s
稍等片刻之后,你的设备会自动重启。
判断是否解锁成功
当手机重启时出现黑底白字的英文警告页以及屏幕下方出现一把打开的小锁,那 Bootloader 就解锁成功啦!重启手机,出现如下两个界面就算解锁成功:
当然,还有一种更简单的方法,就是再次进入 fastboot
模式,查看:
解锁Bootloader后的两个问题
恢复初始
在解锁 Bootloader 之后,可以看到手机系统已经是完全初始化的状态了,如下图所示:
在进入 「关于手机」 界面后,可以发现之前开启的「开发者选项」也是默认关闭了,需要再次点击7次「版本号」开启。
那么,在执行后面的操作时是否仍需要再次将「OEM解锁」打开呢?答案是:不需要。
然而,因为后面需要用到 adb
命令去操作手机,所以「USB调试」选项还是需要打开的。
关于「OEM锁与bootloader锁的关系」,可以看下面的 疑难解答 。
错误提示
成功解锁Bootloader后,每次手机启动或重启时,都会出现黑底白字的英文警告页,提示 “Your device software can’t be checked for corruption. Please lock the bootloader”。这没有什么可担心的,这是正常的! 这仅仅是提示你 Bootloader 被解锁了,直接忽视即可!
安装驱动及刷机
在工具下载中下载谷歌原生的Android11最新刷机包:flame-rq3a.211001.001-factory-2e1faa99.zip或其它版本你想刷的安卓系统包,将flame-rq3a.211001.001-factory-2e1faa99.zip
文件解压到当前文件夹
,进入解压后的文件夹并将image-flame-rq3a.211001.001.zip
文件再解压到当前文件夹中,最后解压效果,如下图所示:
使用如下命令让手机进入bootloader,运行 flash-all.bat
等待安装
adb reboot bootloaderD:\shuaji\flame-rq3a.211001.001>flash-all.bat
如报异常< waiting for any device >,是USB驱动问题导致,需要安装google usb驱动。
安装USB驱动的步骤:
将手机通过usb连接电脑,打开电脑的设备管理器
,找到你的手机,右键,选择更新驱动程序,选择浏览我的电脑以查找驱动程序
,点击浏览,选择下载好的谷歌usb驱动解压后的文件夹usb_driver
点击确定,点击下一步,最后,关闭设备管理器即可!
这样运行 flash-all.bat
后,手机就开始自动刷机了,过程中会出现下图及重启(不用理会),就等刷机完成,提示Press any key to exit...
即可!
开机后需要对手机进行配置及再次开启USB调试,将手机和电脑USB连接等等,确保没问题后,继续往下操作。
刷入Recovery:TWRP及Root
由于Pixel 4系列都采用A/B升级系统,因而可以理解为手机里有2个系统,如果你按照传统刷入Twrp的方法刷入的话,那么你并不会获得一个永久的Twrp。所以需要先刷入一个临时的Twrp,在通过临时的Twrp来刷入永久的Twrp从而来获取Root权限。
下载软件并push到手机
在工具下载中下载临时的Twrp
、永久Twrp
及Magisk
三个文件。首先,前往 TWRP 官网 Devices 下载最新版 TWRP 压缩包(.zip)和临时 TWRP 镜像文件(.img)。我的Pixel4对应选择从这个页面 Download TWRP for flame 下载的 twrp-3.6.0_11-0-flame.img
版本:
twrp-3.6.0_11-0-flame.img(临时twrp)
twrp-installer-3.6.0_11-0-flame.zip(永久twrp)
从github Releases · topjohnwu/Magisk 下载最新的 Magisk 包。 这里我下载的是 27.0
版本:
通过Adb将文件push到手机,连接手机,在手机端弹出「USB调试」点击确定,我将下载的文件都放在了shuaji
文件夹下,直接使用命令:
adb push twrp-3.6.0_11-0-flame.img /sdcard/Download/
adb push twrp-installer-3.6.0_11-0-flame.zip /sdcard/Download/
adb push Magisk-v27.0.zip /sdcard/Download/C:\Users\Administrator\Desktop\shuaji>adb push twrp-3.6.0_11-0-flame.img /sdcard/Download/
twrp-3.6.0_11-0-flame.img: 1 file pushed, 0 skipped. 45.0 MB/s (67108864 bytes in 1.423s)C:\Users\Administrator\Desktop\shuaji>adb push twrp-installer-3.6.0_11-0-flame.zip /sdcard/Download/
twrp-installer-3.6.0_11-0-flame.zip: 1 file pushed, 0 skipped. 50.0 MB/s (30531523 bytes in 0.582s)C:\Users\Administrator\Desktop\shuaji>adb push Magisk-v27.0.zip /sdcard/Download/
Magisk-v27.0.zip: 1 file pushed, 0 skipped. 80.7 MB/s (12498796 bytes in 0.148s)
然后cd进入到手机的/sdcard/Download/下,用ls
命令查看文件即可!
C:\Users\Administrator\Desktop\shuaji>adb shell
flame:/ $ cd /sdcard/Download/
flame:/sdcard/Download $ ls
Magisk-v27.0.zip twrp-3.6.0_11-0-flame.img twrp-installer-3.6.0_11-0-flame.zip
刷入临时Twrp
进入Bootloader
执行命令 adb reboot bootloader
:
C:\Users\Administrator\Desktop\shuaji>adb reboot bootloader
刷入临时Twrp
执行命令 fastboot boot twrp-3.6.0_11-0-flame.img
来启动临时Twrp:
C:\Users\Administrator\Desktop\shuaji>fastboot boot twrp-3.6.0_11-0-flame.img
Sending 'boot.img' (65536 KB) OKAY [ 1.509s]
Booting OKAY [ 6.097s]
Finished. Total time: 7.645s
之后,手机会自动进入到临时的Twrp中,滑动下面的 Swipe to Allow Modifications
滑条,进入Twrp操作页面 (图片是之前刷机的图懒的换了,真实用的版本为:3.6.0_11-0) :
刷入永久Twrp
选择 Install
– 找到目录 /sdcard/Download/
– 选择 twrp-installer-3.6.0_11-0-flame.zip
文件 – 弹出安装界面 – 直接滑动底部的滑条 Swipe to confirm Flash
安装:
这里也间接验证了为什么要选择
/sdcard
目录:点击Install
按钮后,直接进入的就是/sdcard
目录,即只能操作这个目录。
等待进度条执行完毕,最后会显示 ...done
的提示。说明这一步执行完成。
刷入Root及面具
上一步安装完成后,我们发现界面中只有两个按钮:Wipe cache/dalvik
和 Reboot System
。后一项肯定不能选,如果选择重启,那还有一个 Magisk-v27.0.zip
文件没有刷入,否则的话还需要走一遍上面的 刷入临时Twrp
的操作;而第一项 清除临时缓存文件,只是我不清楚该文件具体是干什么用的,所以也怕点了之后会出问题。所以可点击顶部的 “蓝色条” 左上角部分,返回到Twrp主界面:
依照上面的安装步骤,继续继续点击Install
,安装 Magisk-v27.0.zip
文件。直到界面中提示 ...done
时证明已完成,点击Reboot→System,如下图所示:
安装完成后,点击下面的 Reboot System
按钮,重启系统。不过,这时候发现界面会提示询问是否安装 TWRP App
?这里,千万不要安装。直接点击中间的 Do Not Install
即可。待手机重启进入系统后,可以发现手机APP中多了一个 Magisk
的脸谱Logo图标,如果点击让下载就把Magisk-v27.0.zip
后缀改为.apk
直接安装即可。
启动Magisk后提示需要重新安装重新安装才可以使用Magisk(先不用理会),我们点击右上角设置→Zygisk 开启,然后重启手机。再次进入Magisk提示需要重新安装重新安装才可以使用Magisk,点击安装→选择直接安装(推荐)→开始。等待完成后,再次重启手机即可!
安装LSPosed及其它模块
先将LSPosed-v1.8.6-6712-zygisk-release.zip push到手机中, 然后到Magisk的模块界面从本地安装
,安装完成后重启手机即可!如下图所示:
至此基本已全部结束!
疑难解答
两个解锁Bootloader的命令
fastboot oem unlock
or fastboot flashing unlock
在网上搜索到的一些教程中,有的说是使用 fastboot oem unlock
来解BL,有的说是通过 fastboot flashing unlock
来解BL。
最终在google的官网中,我找到了如下的介绍:
If necessary, unlock the device’s bootloader using one of the following methods:
If you are updating a Nexus or Pixel device that is manufactured in 2015 or later (for example, a Nexus 5X, Nexus 6P, Pixel, Pixel XL, Pixel 2 or Pixel 2 XL device), run this command:
fastboot flashing unlock
If you are updating an older device, run this command:
fastboot oem unlock如有必要,请使用以下方法之一解锁设备的引导加载程序:
如果您要更新 2015 年或之后生产的 Nexus 或 Pixel 设备(例如 Nexus 5X、Nexus 6P、Pixel、Pixel XL、Pixel 2 或 Pixel 2)
XL 设备),运行以下命令:
fastboot flashing unlock
如果您要更新旧设备,请运行以下命令:
fastboot oem unlock
更多介绍,请看: Factory Images for Nexus and Pixel Devices | Google APIs for Android | Google Developers
OEM锁与bootloader锁的关系
OEM锁是限制了bootloader锁,OEM锁系统默认是关闭的,必须在开发者中手动打开。之后 bootloader锁才能进行解锁。
通俗一点的说,OEM锁只跟bootloader锁有关系,和之后的Root操作没有关系。所以当解锁Bootloader后系统配置被重置了,即使 「开发者选项」中的 「OEM解锁」显示为灰色不能操作,也无关紧要了。
参考:关于解锁bootloader的重要性.机友们务必细读,生死问题,请勿忽视! - Pixel | Pixel XL 论坛 - 智友论坛
解锁bootloader的好处
- 最重要是为自己的手机买了份保险,留了条生路.卡死 系统抽风或变砖后,可在bootloader界面下线刷原厂镜像恢复系统。(不解锁的无法刷机救回)
- 作为亲儿子机型,XDA上很多资源,有大量第三方ROM、优化补丁、Recoovery、ROOT
- 解锁bootloader后,不ROOT和修改系统文件,不影响在线OTA升级。
解锁后 开机Google logo下有个小锁和两秒钟的警示语说你的手机已经解了bootloader锁,机友们可以无视之,不影响使用。
参考文章: Google Pixel解锁BL、刷入Twrp及Root折腾小记:https://www.itfanr.cc/2018/10/16/google-pixel-unlock-bl-and-root/
相关文章:

Google Pixel4手机刷机+Root+逆向环境详细教程
Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…...

IT项目管理-小题计算【太原理工大学】
1.合同总价问题 问承包商的利润是? 实际利润目标利润(目标成本-实际成本)*卖方分担比例 解:10 000(100 000 - 90 000)* 0.2 12 000(元) 实际成本有时也写作最终成本,问承…...

ARP欺骗使局域网内设备断网
一、实验准备 kali系统:可使用虚拟机软件模拟 kali虚拟机镜像链接:https://www.kali.org/get-kali/#kali-virtual-machines 注意虚拟机网络适配器采用桥接模式 局域网内存在指定断网的设备 二、实验步骤 打开kali系统命令行:ctrlaltt可快…...

Android动画(四):PathMeasure实现路径动画
文章概览 1 PathMeasure概述2 实现路径加载动画3 实现箭头加载动画4 实现操作成功动画 本系列将介绍以下内容: Android动画 1 PathMeasure概述 PathMeasure是一个单独的类,其全部源码如下(请详细研读注释): package…...

HTTP 连接详解
概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP(Transmission Control Protocol&…...

练习题(2024/5/12)
1二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…...
Day50代码随想录动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
Day50 动态规划part12 股票问题 309.最佳买卖股票时机含冷冻期 leetcode题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 题意:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算…...
【软考】scrum的步骤
目录 1. 明确产品愿景和需求2. 制定计划和任务列表3. 进行迭代开发(Sprint)4. Sprint评审会议5. Sprint回顾会议6. 重复迭代 1. 明确产品愿景和需求 1.这个过程通常由项目所有者和利益相关者参与,目的是确保整个团队对项目的目标和方向有清晰…...

【C语言】编译与链接
✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:C语言 个人主页:Celias blog~ 目录 引言 一、翻译环境 1.1 编译 1.1.1 预处理 1.1.2 编译 …...
Consul 注册的服务地址变成了 127.0.1.1
问题 我们的服务一直用 Consul 作为注册中心,在 AWS 和 阿里云上使用的时候,没出现过问题。最近把一些服务迁到腾讯云的时候,遇到一个问题:注册的服务地址都是 127.0.1.1。 127.0.1.1 这个地址我们平时遇到的比较少,…...
数字水印 | 离散小波变换 DWT 的 Python 代码实现
🍍原文: 【图像处理】图像离散小波变换及 Python 代码实现 🍍写在前面: 本文在原文的基础上补全了代码。 1 环境准备 ① 安装 p y w t \mathsf{pywt} pywt 包: pip install PyWavelets说明: p y w t \…...
[框架] Unity 公共执行器
本篇我们通过使用单例模式来创建一个公共执行器,使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行,且可进行添加和移除操作。 1. 创建单例模式改造器:SingletonMono 我们先创建一个单例模式改造器,使…...

二进制转为HEX数组小工具
在使用RA8889时,JPG的解码只能从FLASH的DMA通道获取,那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办? RA8889支持JPG图片硬解码,但数据流是从FLASH进行DMA读取的,然后再进行解码。因此这种情况下ÿ…...

数据结构-二叉树-红黑树
一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…...
C++11 新特性 decltype 说明符
一、typeof与typeid 1.1、typeof 在C11标准之前,GCC已经提供了一个类似功能的运算符 typeof对类型进行推导,但是这毕竟是编译器的实现,不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符,获取的类型…...

java线程局部变量使用方式
线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在,并且每个线程都有自己的一份拷贝。换句话说,线程局部变量是线程私有的,其他线程无法访问。 使用场景主要包括: 1. 存储线程状态信息ÿ…...
【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙
【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…...

2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享
大家好,从昨天肝到现在,终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解!_哔哩哔哩_bilibili 2024数维杯…...
中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2022年12月 编程题五道 总分:100分一、鸡兔同笼(20分) 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日
每天一分钟,知晓天下事! 2024年5月12日 星期日 农历四月初五 1、 全国多地已推“一次挂号管三天”,部分医院专家门诊适用。 2、 在梅大高速塌方事故中拦车、救援,黄曼秋等5人拟确认为见义勇为。 3、 深圳新能源车指标申请条件调…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...