20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
2025/7/27 23:28


缘起:很容易知道 飞凌OK3576-C开发板 使用的声卡芯片是 NAU88C22YG
新唐科技(NUVOTON) NAU8822LYG NAU88C22YG 新唐立体声音频编解码芯片

原理图:OK3576-C V1.2_20240830.pdf
搜索:HP,耳机,很容易找到第16页/总共21页,

NAU88C22YG
IIC ADDRESS:0011010R/W
0x1A


1、使用【最接近】Rockchip的原厂Android14,KickPi 7的SDK。
DTS适应EVB1编译,没有声音。


2、直接使用 飞凌OK3576-C开发板 的DTS。
Y:\OK3576-android-source\kernel-6.1\arch\arm64\boot\dts\rockchip\OK3576-C-android.dts
还是没有声音。

1|console:/sdcard # 
1|console:/sdcard # cat /proc/asound/cards
0 [rockchipnau8822]: rockchip-nau882 - rockchip-nau8822
rockchip-nau8822

1 [rockchipdp0    ]: rockchip-dp0 - rockchip-dp0
rockchip-dp0
2 [rockchiphdmi   ]: rockchip-hdmi - rockchip-hdmi
rockchip-hdmi
console:/sdcard # 
console:/sdcard # ls -l /dev/snd/
total 0
crw-rw---- 1 system audio 116,   4 2025-07-27 15:17 controlC0
crw-rw---- 1 system audio 116,   6 2025-07-27 15:17 controlC1
crw-rw---- 1 system audio 116,   9 2025-07-27 15:17 controlC2
crw-rw---- 1 system audio 116,   3 2025-07-27 15:17 pcmC0D0c
crw-rw---- 1 system audio 116,   2 2025-07-27 15:17 pcmC0D0p
crw-rw---- 1 system audio 116,   5 2025-07-27 15:17 pcmC1D0p
crw-rw---- 1 system audio 116,   8 2025-07-27 15:17 pcmC2D0c
crw-rw---- 1 system audio 116,   7 2025-07-27 15:17 pcmC2D0p
crw-rw---- 1 system audio 116,  33 2025-07-27 15:17 timer
console:/sdcard # 
console:/sdcard # ll
total 52115
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Alarms
drwxrws--x 5 media_rw media_rw     3452 2025-07-27 15:17 Android
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Audiobooks
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 DCIM
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Documents
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Download
drwxrws--- 3 u0_a74   media_rw     3452 2025-07-27 15:17 Movies
drwxrws--- 3 u0_a74   media_rw     3452 2025-07-27 15:17 Music
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Notifications
drwxrws--- 3 u0_a74   media_rw     3452 2025-07-27 15:17 Pictures
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Podcasts
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Recordings
drwxrws--- 2 u0_a74   media_rw     3452 2025-07-27 15:17 Ringtones
-rw-rw---- 1 u0_a74   media_rw 53268598 2025-07-27 12:45 kiss8.wav
console:/sdcard # tin
tinycap      tinymix      tinypcminfo  tinyplay
console:/sdcard # tinyp                                                        
tinypcminfo  tinyplay
console:/sdcard # tinyplay                                                     
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods] 

1|console:/sdcard # 
1|console:/sdcard # tin
tinycap      tinymix      tinypcminfo  tinyplay
1|console:/sdcard # tinyplay kiss8.wav -D 0 -d 0                               
Playing sample: 2 ch, 44100 hz, 16 bit 53268480 bytes


3、那就分析/比对内核/driver。
直接查找nau88c22*.c,找不到!
很容易/根据经验/艰难得知驱动名是:nau8822.c

rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217$ 
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217$ cd kernel-6.1/
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ 
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ 
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ find . -name nau88c22*.c
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ 
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ find . -name nau8822*.c
./sound/soc/codecs/nau8822 - 副本.c
./sound/soc/codecs/nau8822.c
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ 
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ 


https://blog.csdn.net/qq_39104123/article/details/115752708?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-2-115752708-blog-143410504.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-2-115752708-blog-143410504.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=4
基于imx8mq的NAU8822音频驱动开发
https://blog.csdn.net/qq_39104123/article/details/115752708

CSDN:NAU88C22YG 驱动名:nau8822.c


4、和 飞凌OK3576-C开发板 原厂的 内核/driver 进行比对,很容易知道 飞凌对 Rockchip的原厂Android14的SDK进行过魔改了!
修改之后,可以在命令行让 tinyplay播放器通过耳机发生了。
但是在Android界面还是不能播音。还需要修正!

Y:\rk3576-android14.0-20250217\kernel-6.1\sound\soc\codecs\nau8822.h
Y:\OK3576-android-source\kernel-6.1\sound\soc\codecs\nau8822.h

/* SPDX-License-Identifier: GPL-2.0 */
/*
* nau8822.h  --  NAU8822 ALSA SoC Audio driver
*
* Copyright 2017 Nuvoton Technology Crop.
*
* Author: David Lin <ctlin0@nuvoton.com>
* Co-author: John Hsu <kchsu0@nuvoton.com>
* Co-author: Seven Li <wtli@nuvoton.com>
*/

#ifndef __NAU8822_H__
#define __NAU8822_H__
#include <linux/clk.h>


/* Codec Private Data */
struct nau8822 {
struct device *dev;
struct regmap *regmap;
int mclk_idx;
struct nau8822_pll pll;
int sysclk;
int div_id;
    struct clk *clk;
};

Y:\rk3576-android14.0-20250217\kernel-6.1\sound\soc\codecs\nau8822.c
Y:\OK3576-android-source\kernel-6.1\sound\soc\codecs\nau8822.c

static int nau8822_i2c_probe(struct i2c_client *i2c)
{
struct device *dev = &i2c->dev;
struct nau8822 *nau8822 = dev_get_platdata(dev);
int ret;

    if (!nau8822) {
nau8822 = devm_kzalloc(dev, sizeof(*nau8822), GFP_KERNEL);
if (nau8822 == NULL)
return -ENOMEM;
}
i2c_set_clientdata(i2c, nau8822);

    /* Setup clocks */
nau8822->clk = devm_clk_get(&i2c->dev, NULL);
if (IS_ERR(nau8822->clk)) {
dev_err(&i2c->dev, "codec clock missing or invalid\n");
ret = PTR_ERR(nau8822->clk);
}

       ret = clk_prepare_enable(nau8822->clk);
if (ret) {
dev_err(&i2c->dev, "unable to prepare codec clk\n");
}

    nau8822->regmap = devm_regmap_init_i2c(i2c, &nau8822_regmap_config);
if (IS_ERR(nau8822->regmap)) {
ret = PTR_ERR(nau8822->regmap);
dev_err(&i2c->dev, "Failed to allocate regmap: %d\n", ret);
return ret;
}
nau8822->dev = dev;

    /* Reset the codec */
ret = regmap_write(nau8822->regmap, NAU8822_REG_RESET, 0x00);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to issue reset: %d\n", ret);
return ret;
}

    ret = devm_snd_soc_register_component(dev, &soc_component_dev_nau8822,
&nau8822_dai, 1);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
return ret;
}

    return 0;
}


【这里还需要进一步修正!】
Y:\OK3576-android-source\hardware\rockchip\audio\tinyalsa_hal\codec_config\config_list.h


参考资料:
声卡

百度:RK3576 默认声卡
Error: 'kiss8.mp3' is not a riff/wave file
tinyplay 制定声卡
rk3588 nau8822
RK3588 nau8822
RK3576 NAU88C22YG
NAU88C22YG

BING:rk平台怎么调试nau8822
rk3576 nau8822

CSDN:nau8822

https://www.nuvoton.com/resource-files/NAU8822DataSheetRev3.3.pdf

https://www.eeworld.com.cn/qrs/eic698427.html
基于RK3576开发板的声卡资源介绍
aplay -l


https://blog.csdn.net/weixin_68294039/article/details/124248608?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-124248608-blog-148433086.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-124248608-blog-148433086.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=5
RK3566,ES7202声卡驱动添加
https://blog.csdn.net/weixin_68294039/article/details/124248608

4.修改安卓hal层
在hardware/rockchip/audio/tinyalsa_hal/下的audio_hw.c,修改内容:


https://blog.csdn.net/lingzhou0909/article/details/148433086
RK3576 Android14 DMIC调制

使用tinycap工具来录音,如下
tinycap /sdcard/rec.wav -D 1 -d 0 -c 2 -r 44100 -b 16 -p 1024 -n 3


https://blog.csdn.net/qq_38312843/article/details/124868449
RK声卡调试

cat /proc/asound/cards
ls -l /dev/snd/
tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
hardware/rockchip/audio/tinyalsa_hal/codec_config/rt5640_config.h

【付费】
https://blog.csdn.net/radianceblau/article/details/64125411
linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一

https://blog.csdn.net/lf12345678910/article/details/102497454
tinyplay 声卡播放

https://blog.csdn.net/wenjin359/article/details/83006820
tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)

/dev/snd/pcmC*

vendor/brand/kernel/linaro/sound/core/init.c
snd_card_create
vendor/brand/kernel/linaro/sound/usb/card.c
snd_usb_audio_probe


root@:/ # cat proc/asound/cards                                            
0 [No00           ]: brand ALSA Drv - brand MAD No.00
brand MPEG Audio Decoder No.00

root@:/ # tinypcminfo -D /proc/asound/cards
Info for card 0, device 0:
PCM out:

root@:/ # tinyplay mnt/usb/17EC-1152/file.wav -D 0 -d 2 -n 2
//tinyplay mnt/usb/17EC-1152/file.wav -D 0 -d 3 -n 2                          


root@:/ # ls -al dev/snd/pcm*                                            
crw-rw---- system   audio    116,  24 2007-01-01 20:00 pcmC0D0c
crw-rw---- system   audio    116,  16 2007-01-01 20:00 pcmC0D0p
crw-rw---- system   audio    116,  25 2007-01-01 20:00 pcmC0D1c
crw-rw---- system   audio    116,  17 2007-01-01 20:00 pcmC0D1p
crw-rw---- system   audio    116,  18 2007-01-01 20:00 pcmC0D2p
crw-rw---- system   audio    116,  19 2007-01-01 20:00 pcmC0D3p 


【付费】
https://wenku.csdn.net/answer/407dbnsft2
rk平台怎么调试nau8822 - CSDN文库.mhtml


https://blog.csdn.net/weixin_43245753/article/details/123915015
Rockchip RK3588 kernel dts解析之音频模块


https://bbs.16rd.com/thread-584429-1-1.html
[瑞芯微RK资料] 瑞芯微RK3328/RK3366/RK3368/RK3399平台Audio开发指南

2.2.4 声卡调试
1. 通过如下命令确认声卡是否注册成功
root@rk3366:/ # cat /proc/asound/cards
0 [rockchiprt5640c]: rockchip_rt5640 - rockchip,rt5640-codec
rockchip,rt5640-codec
root@rk3366:/ # ls -l /dev/snd/
crw-rw---- system audio 116, 2 2013-01-18 08:51 controlC0
crw-rw---- system audio 116, 4 2013-01-18 08:51 pcmC0D0c
crw-rw---- system audio 116, 3 2013-01-18 08:51 pcmC0D0p
2. 通过命令行播放录制调试声卡:
播放:一般播放 1khz 0db 正弦波,然后在 codec 输出端示波器简单测量是否失真,杂音,然后再使用音频分析仪测试指标。
root@rk3366:/ # tinyplay
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
|root@rk3366:/ # tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
Playing sample: 2 ch, 44100 hz, 32 bit
......


https://blog.csdn.net/2301_76587520/article/details/145768380?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-8-145768380-blog-106573423.235^v43^pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.5&utm_relevant_index=11
开发板适配之SAI i.MX6ULL NAU88C22【驱动driver + DTS】

SAI音频接口只是传输音频数据的数字接口,所以这些音频编解码的工作需要一个专有的编解码芯片来完成,ELF 1使用的是NAU88C22芯片,NAU88C22可连接mic和扬声器或耳机用于录音和播放声音。i.MX6ULL使用I2S总线与NAU88C22进行音频数据的传输,I2S(Inter—IC Sound)总线,又称集成电路内置音频总线,是Philips公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。


https://www.elecfans.com/d/6382666.html
RK3588核心板多媒体功能一览

先在EVM-RK3588底板接好MIC设备,再执行下面指令;采集声音 10 秒,并且保存为 wav 格式。
$ arecord -D default:CARD=rockchipnau8822 -d 10 -f cd -t wav test1.wav


https://bbs.elecfans.com/jishu_2477148_1_1.html
[活动] 【ELF 2学习板试用】05 ASoC中的machine class


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

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

相关文章

正向代理和反向代理的理解

**正向代理&#xff08;Forward Proxy&#xff09;和反向代理&#xff08;Reverse Proxy&#xff09;**是两种不同类型的代理服务器&#xff0c;它们在数据传输过程中扮演的角色、使用场景以及工作方式都有所不同。 正向代理&#xff08;Forward Proxy&#xff09; 定义与作用&…

Java 后端 Cookie Session Token会话跟踪技术

概述 会话从字面理解就是"两方交流"&#xff0c;那问题就来了&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;里面的"传输"不就包含了"两方交流"的意思吗&#xff1f;为什么要多此一举提出会话技术呢&#xff1f; 谈到这个&#xff0c;…

智谱AI GLM大模型 GLM-4-Plus的快速使用 ChatOpenAI类来调用GLM-4模型

智谱AIGLM-4&#xff0c;2024年1月16日发布的第四代基座大模型&#xff0c;其整体性能相较前代提升近60%&#xff0c;多维度指标逼近OpenAI的GPT-4水平。该模型支持128K上下文窗口&#xff08;约300页文本处理能力&#xff09;&#xff0c;在长文本信息处理中实现100%精度召回。…

AsyncLocal浅复制的问题解决方案

针对C#中AsyncLocal<T>浅复制问题&#xff0c;以下是几种主要的解决方案&#xff1a; 1. 使用不可变对象&#xff08;推荐&#xff09; 将存储在AsyncLocal<T>中的对象设计为不可变的&#xff0c;避免修改共享状态&#xff1a; public class ImmutableUserContext …

IIS发布.NET9 API 常见报错汇总

记录工作过程中发现的IIS常见错误。 1. HTTP Error 500.19 - Internal Server Error .NET 9 API --》vs打包方式如下&#xff1a; 发布到IIS后报错HTTP Error 500.19 - Internal Server Error。 解决方案&#xff1a; 下载ASP.NET Core Hosting Bundle&#xff08;ASP.NET Co…

Google Chrome V8< 13.7.120 沙箱绕过漏洞

【严重】Google Chrome V8< 13.7.120 沙箱绕过漏洞 漏洞描述 V8 是 Google 开发的一款开源高性能 JavaScript 和 WebAssembly 引擎&#xff0c;广泛用于 Chrome 浏览器和 Node.js 等项目中。 受影响版本中&#xff0c;JsonParser::MakeString 函数在处理长度为 1 的转义字…

基于Spring Boot和Vue电脑维修平台整合系统的设计与实现

用户&#xff1a;注册&#xff0c;登录&#xff0c;在线报修&#xff0c;维修接单&#xff0c;维修报告&#xff0c;维修评价&#xff0c;个人资料维修工&#xff1a;登录&#xff0c;在线报修&#xff0c;维修接单&#xff0c;维修报告&#xff0c;维修评价&#xff0c;通知公…

InsightFace(RetinaFace + ArcFace)人脸识别项目(预训练模型,鲁棒性很好)

背景介绍 这是一个 简单的人脸识别项目&#xff0c;用 FastApi 在本地实现&#xff0c;使用预训练模型&#xff0c;直接可用。 新方案比之前的FaceNet强太多了&#xff0c;甚至不用数据增强等操作&#xff0c;就可以识别戴眼镜、不戴眼镜、歪着的人脸等。 充分证明了选型的重要…

App Inventor 2 使用 MaterialIcons 图标字体,快捷展示专业图标

平时布局的话&#xff0c;如果要使用图标&#xff0c;一般需要去找 png 图片&#xff0c;且透明背景的。如果需要根据不同常见图标进行变色的话&#xff0c;就需要准备多张不同样式的图标&#xff0c;还要考虑图片的分辨率等等因素&#xff0c;非常的麻烦。 这时&#xff0c;如…

C语言——关于指针(逐渐清晰版)

为了更好地理解本篇文章的知识内容&#xff0c;读者可以将以下文章作为补充知识进行阅读 &#xff1a; C语言————原码 补码 反码 &#xff08;超绝详细解释&#xff09;-CSDN博客 C语言————二、八、十、十六进制的相互转换-CSDN博客 C语言————斐波那契数列的理解…

SVG 在线编辑器

SVG 在线编辑器 引言 随着互联网技术的发展&#xff0c;矢量图形在网页设计和数据可视化中扮演着越来越重要的角色。SVG&#xff08;可缩放矢量图形&#xff09;因其文件小、无限缩放不模糊的特性&#xff0c;成为了网页设计中常用的图形格式。SVG 在线编辑器的出现&#xff0c…

libpostproc 已经从 ffmpeg 中移除,导致编译 ffmpeg 时没有 libpostproc

今天编译 ffmpeg 时突然发现 libpostproc 不见了&#xff0c;-enable-postproc 也变成了非法的选项。用搜索引擎搜索相关信息找不到一点&#xff0c;于是去 github 看。 从提交记录可以看到 libpostproc 已经被移除了 链接 主线中已经看不到了 libpostproc 这个目录了

基于 Dell PowerEdge T440 搭建的 Proxmox VE 配置 RTX 3060 显卡直通虚拟机、切换直通

基于 Dell PowerEdge T440 搭建的 Proxmox VE 配置 RTX 3060 显卡直通虚拟机、切换直通 文章目录 基于 Dell PowerEdge T440 搭建的 Proxmox VE 配置 RTX 3060 显卡直通虚拟机、切换直通 1. 前言 2. 前提条件 3. 配置步骤 3.1. 启用 VT-d 3.2. 激活 IOMMU 3.3. 添加 VFIO 模块 …

如何解决pip安装报错ModuleNotFoundError: No module named ‘voila’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘voila’问题 摘要 在开发过程中&#xff0c;我们常常会遇到pip安装包时出现各种错误&#xff0c;特别是在使用PyCharm进行开发时。本文将详细介绍如何解决安装…

[spring6: @EnableWebMvc]-源码分析

源码 EnableWebMvc EnableWebMvc 是用于启用 Spring MVC 的注解&#xff0c;它通过导入 DelegatingWebMvcConfiguration 来加载默认的 MVC 配置&#xff0c;同时允许开发者通过实现 WebMvcConfigurer 接口来自定义部分配置&#xff1b;若需更高阶的控制&#xff0c;则可直接继承…

Jmeter的元件使用介绍:(四)前置处理器详解

Jmeter的前置处理器可以用来在取样器执行前做一些数据准备操作&#xff0c;也需要注意使用的作用域问题。常用的前置处理器有&#xff1a;用户参数、BeanShell预处理器、JDBC预处理器。一、用户参数 【用户参数】与前面介绍过的【用户定义的变量】有相似之处&#xff0c;先来介…

十七、K8s 可观测性:全链路追踪

十七、K8s 可观测性&#xff1a;全链路追踪 文章目录十七、K8s 可观测性&#xff1a;全链路追踪1、Skywalking 初识1.1 为什么需要全链路追踪平台1.2 全链路追踪核心组件及工作原理1.2.1 全链路追踪核心概念1.2.2 全链路追踪工作原理1.3 什么是Skywalking&#xff1f;1.4 Skywa…

2025 Gitee vs. GitLab:全面对比与选择指南

在软件研发持续加速、合规要求日益严格的背景下&#xff0c;选择合适的代码托管平台成为团队数字化能力建设的关键环节。尤其在中国本土市场&#xff0c;Gitee正凭借其深度本地化能力、全面生态整合和开源社区支撑&#xff0c;成为国内团队首选的开发协作平台。 一、Gitee&…

期货反向跟单忌讳问题(一): 不断调整盘手交易规则

在期货反向跟单领域&#xff0c;不少运营者在摸着石头过河的过程中&#xff0c;容易陷入一个致命误区——对盘手交易规则的频繁调整。这种看似“优化策略”的举动&#xff0c;往往会让整个跟单体系陷入恶性循环&#xff0c;最终偏离盈利初衷。期货反向跟单的核心逻辑是&#xf…

Effective C++ 条款07:为多态基类声明virtual析构函数

Effective C 条款07&#xff1a;为多态基类声明virtual析构函数核心思想&#xff1a;当通过基类指针删除派生类对象时&#xff0c;如果基类没有虚析构函数&#xff0c;会导致派生类资源泄漏。因为此时只会调用基类的析构函数&#xff0c;而不会调用派生类的析构函数。 ⚠️ 1. …