自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 sys 文件系统与 misc 杂项设备驱动

本帖主要讲述 sysfs 虚拟文件系统与 misc 杂项设备驱动相关知识。sysfs 挂载于`/sys`,属于内存虚拟文件系统,用于向用户空间导出内核设备、驱动信息,借助 class、device 接口创建设备属性,依靠 show、store 完成读写交互,开发需要注意属性权限和函数返回值。misc 是简化封装的字符设备,主设备号固定为 10,自动分配次设备号并生成`/dev`节点与 sys 目录。misc 可结合 sysfs 使用,简化简单外设驱动开发,编码需遵循接口规范,规避权限、阻塞等问题。

2026-10-10 18:40:33 266

原创 iMX6ULL 驱动工程搭建 + LED 灯驱动

本帖围绕 i.MX6ULL 平台,讲解驱动工程搭建与 LED 灯驱动开发。对比用户应用与内核驱动编程差异,介绍内核模块加载方式、基础宏,以及内核内、外部两种工程组织方案,阐述字符设备、sysfs、misc 杂项设备原理。结合 LED 硬件电路与寄存器,讲解地址映射、内核与用户空间数据拷贝,对比 LED 驱动多种实现思路,给出完整编译测试流程,梳理开发关键知识点。

2026-10-09 19:07:00 496

原创 i.MX6ULL 嵌入式 Linux 系统移植

本帖以正点原子 I.MX6ULL‑MINI/ALPHA 开发板(eMMC 版本)为例,系统讲解嵌入式 Linux 系统移植全流程。内容涵盖 Linux 三大组成部分、启动拨码开关、SD 卡存储布局及三种烧录模式对比,并详细演示 Ubuntu 开发环境搭建(双网卡、minicom、TFTP、NFS、交叉工具链)。随后分别介绍烧写 SD 卡、eMMC 及网络开发模式的操作步骤,并给出 U‑Boot 编译、内核编译、rootfs 根文件系统配置及 EMMC 启动环境变量的完整参考。

2026-10-08 18:35:15 436

原创 LCD 显示与触控屏驱动开发

本帖系统整理了 IMX6ULL 平台 LCD 显示与触控屏驱动开发的核心知识点。内容涵盖 LCD 工作原理、分辨率与颜色格式(RGB888、RGB565、ARGB、RGB101010)、显存分配与像素写入方法,以及 PCLK、HSYNC、VSYNC、DE 等时序信号的作用。随后介绍了 LCD 初始化配置步骤、PWM 背光调节原理,并重点讲解了 GT9147 触控屏芯片的寄存器配置、驱动初始化流程和触摸坐标读取实现,为嵌入式显示与触控开发提供了完整参考。

2026-09-28 18:33:54 615

原创 SPI 通信与 ADXL345 三轴加速度传感器

本帖系统讲解了 SPI 高速同步串行通信协议,涵盖其全双工、一主多从的拓扑结构、四线引脚定义,以及由 CPOL 和 CPHA 决定的四种工作模式。随后介绍了 SPI 读写机制与 imx6ull 控制器的 FIFO 缓冲,并结合 ADXL345 三轴加速度传感器演示了通过 SPI 读取原始数据并换算为实际加速度的方法。文末将 SPI 与 UART、I2C 对比,帮助读者根据场景选择合适的通信协议。

2026-09-27 17:40:51 499

原创 IMX6ULL ADC模数转换

本帖讲解了 ADC 模数转换的核心原理,涵盖采样与量化、逐次逼近法、分辨率含义及电压换算公式,并结合 IMX6ULL 硬件特性介绍了裸机操作流程与光敏电阻测量实验。随后介绍了均值、高通、低通和卡尔曼等常用滤波算法,最后通过高危液体存储告警系统串联起信号采集、转换、滤波与告警的完整链路,帮助读者从原理到实践全面掌握 ADC 应用。

2026-09-24 18:02:39 568

原创 I2C 通信协议知识点整理

本帖整理了 I2C 串行通信协议的核心知识点。I2C 使用 SCL 时钟线和 SDA 数据线两根信号线,采用高位先行方式传输,支持一主多从结构。介绍了起始信号与结束信号的判定条件、数据传输时高低电平的采样规则,以及第 9 个时钟周期的 ACK/NACK 应答机制。同时说明了设备地址高 7 位与读写位低 1 位的组成方式。最后通过写时序和读时序的完整步骤,梳理了主机与从机之间从起始信号到停止信号的通信流程,并附有寄存器操作代码示例,便于理解和实践。

2026-09-23 18:56:55 552

原创 IMX6ULL 定时器 & UART

本帖梳理了 IMX6ULL 嵌入式开发中定时器与串口通信的核心知识点。定时器部分重点对比了 EPIT 与 GPT 两种外设:EPIT 为 32 位自减定时器,适合周期性中断与按键软件消抖;GPT 为 32 位自增定时器,支持输入捕获、输出比较与高精度延时。UART 部分介绍了异步全双工通信原理、TTL/RS232/RS485 电气特性、硬件流控以及累加和、奇偶、CRC 三种校验方式。最后补充了频率与周期关系、GPT 微秒级延时思路及 Modbus 协议等实用要点,帮助读者快速建立嵌入式定时与串口通

2026-09-22 18:08:31 309

原创 IMX6ULL 时钟树

本帖系统梳理了 IMX6ULL 时钟树的核心知识点。首先介绍了有源晶振与无源晶振的区别,说明外部低频时钟需经 PLL 锁相环倍频才能获得高频稳定信号;随后讲解了 PFD 相位分数分频器与 Prescale 预分频器的作用,并给出 2 位、3 位预分频器的分频配置表。最后总结了时钟树配置的三大步骤:配置 ARM 时钟、配置 PLL2 和 PLL3 的 PFD、配置三大根时钟,帮助读者快速掌握从晶振到各级总线时钟的完整链路。

2026-09-21 17:29:17 645

原创 51单片机与IMX6ULL中断系统

本文系统整理了51单片机与IMX6ULL的中断系统知识点。51单片机由外设、中断源和内核协作完成中断处理;IMX6ULL则引入GIC通用中断控制器,负责中断源管理、优先级比较与多核分发,内核负责CPU中断开关、工作模式切换及中断服务函数执行。文章还梳理了GIC版本演进(V1至V5)、SPI/PPI/SGI三类中断、EINT按键的外设与GIC寄存器操作,以及协处理器cp15的mrc/mcr汇编指令用法,最后补充了inline内联函数的特点,内容覆盖全面。

2026-09-20 18:26:27 782

原创 IMX6ULL 嵌入式开发

本帖围绕 IMX6ULL 裸机开发展开,讲解异常向量表、GPIO 基础与开发环境搭建,介绍 DDR3 内存布局。详细说明 GNU 交叉工具链 gcc、ld、objcopy、objdump 的用法与链接脚本,区分程序各内存段作用,解释 volatile 关键字防止编译器优化。同时梳理 LED、蜂鸣器的 GPIO 输出实验流程,从引脚复用、寄存器配置到电平控制,完整演示 Cortex‑A7 裸机下硬件驱动开发的实现思路。

2026-09-18 18:32:39 600

原创 ARM嵌入式开发 --- 汇编基础

从一条条跳动的寄存器,到层层叠叠的栈帧,ARM 汇编的世界里藏着计算机最底层的浪漫。本文带你一口气读懂立即数的玄机、mov 与 ldr 的搬运艺术、bic 与 orr 的位操作魔法,还有那让人又爱又恨的跳转指令与栈的四种姿态。更精彩的是,汇编与 C 语言还能携手共舞——参数怎么传、结果怎么回,全在 R0 到 R3 的默契配合里。无论你是初探底层的新手,还是想重温经典的开发者,这份笔记都能让你在寄存器与内存的流转间,感受到编程最纯粹的魅力。翻开它,一起解锁处理器工作模式切换的终极秘密吧!

2026-09-16 18:46:25 564

原创 ARM 嵌入式开发 ---知识点

本帖整理了 ARM 嵌入式开发的核心知识点。首先介绍了计算机 CPU 的两大分类,随后梳理了 ARM 内核版本体系,包括经典内核 ARM7/ARM9/ARM11 以及 Cortex-A/R/M 三大系列。在寄存器部分,重点讲解了通用寄存器和状态寄存器的作用。文章还涵盖了 CPU 核心部件、三级流水线、函数调用与栈机制、存储体系、内存大小端、中断与异常向量表、移位运算以及 ARM 总线架构等关键内容。最后通过表格总结了常见芯片的内核与指令集对应关系,帮助读者建立完整的 ARM 嵌入式知识框架。

2026-09-15 18:50:38 413

原创 DS18B20 数字温度传感器

本帖系统整理了 DS18B20 数字温度传感器的核心知识点。首先介绍其量程、精度、分辨率(9 至 12 位可选)及工作电压等关键指标;随后讲解 51 单片机通过 One-Wire 单总线与传感器通信的原理,包括线与特性、GPIO 输入输出模式及 16 位二进制补码读数格式。文章还梳理了完整的温度采集流程(复位、跳过 ROM、开启转换、读取温度),并详细解析复位、写、读三类时序的电气要求,最后给出关键指令(0xCC、0x44、0xBE)及配套 C 语言代码示例,便

2026-09-14 17:33:38 473

原创 UART 通信协议

本帖系统梳理了 UART 串口通信的核心知识点,涵盖通信方式(单工、半双工、全双工)、串口传输顺序、串行与并行传输的区别、串口通信时序、同步与异步通信、波特率及串口参数配置、校验规则、电气特性与电平标准(TTL、RS232、RS485)等内容。同时介绍了 51 单片机串口编程的寄存器配置、定时器初值计算、中断与收发方式,以及主从应答机制和 Modbus 协议报文格式,帮助读者全面掌握串口通信的原理与实战应用。

2026-09-13 17:17:11 396

原创 51单片机 --- GPIO、中断、定时器、PWM

本帖整理了 51 单片机的核心知识点,涵盖 GPIO、中断系统、定时器、PWM 与蜂鸣器五大模块。GPIO 部分介绍了输入输出模式、按键原理及车载中控应用;中断系统讲解了中断源、优先级、嵌套及处理流程;定时器部分重点说明 16 位自增计数原理、1ms 定时计算与初始化配置;PWM 部分阐述了周期、占空比及背光调节等应用;蜂鸣器部分对比有源与无源蜂鸣器,并给出定时器配合 PWM 实现指定频率发声的完整计算过程。

2026-09-11 18:06:54 357

原创 嵌入式开发 --- 51单片机与ARM核心知识

本帖系统整理了嵌入式开发的核心知识点,涵盖嵌入式系统概述、软硬件知识体系、51单片机基础、处理器概念、频率与时间单位换算、存储器与总线、引脚寄存器、位运算、电阻标注、数码管显示及三极管原理等内容。文章从嵌入式系统的定义与特点出发,逐步深入到51单片机的组成、最小系统与开发板,再到CPU、MCU、GPU等处理器概念,并详细讲解了频率与时间单位换算、内存与外存、RAM与ROM、三大总线交互流程等基础理论。

2026-09-10 19:04:02 522 2

原创 Linux应用层开发 --- 数据库

本篇数据库学习笔记,区分关系型与非关系型数据库,补充 Redis 相关知识点,重点讲解嵌入式数据库 SQLite3。涵盖 SQLite3 安装、基础命令,完整梳理建表、增删改查、主键自增、时间函数等 SQL 语法,介绍数据库可视化工具。同时整理 sqlite3_open、sqlite3_exec 等 C/C++ API 接口,覆盖数据库打开、执行语句、错误信息获取、关闭数据库等常用操作,适合嵌入式开发场景学习,可用于嵌入式设备本地数据存储开发复盘。

2026-09-06 11:58:39 560

原创 Linux应用层开发 --- TCP并发服务器

本篇是 Linux 高并发编程学习笔记,梳理多进程、多线程、线程池以及 IO 多路复用核心知识。对比多进程与多线程的资源开销、使用场景;讲解线程池的任务管理思想;重点剖析 IO 多路复用三大实现 select、poll、epoll,分析各自机制、优缺点与适用场景。覆盖网络服务开发常用并发模型,梳理阻塞 IO、事件驱动相关原理,适合嵌入式、后端网络编程学习复盘,帮助理解高并发服务器底层实现思路。

2026-09-05 23:17:30 525

原创 Linux应用层开发 --- HTTP

本篇帖子围绕万维网核心知识展开,先介绍 WWW 基本概念、C/S 架构、URL 资源定位与 Web 服务器作用;接着重点讲解 HTTP 协议,包括 80 端口、请求报文与响应报文结构、浏览器与服务器的一次完整通信流程;随后补充 HTTPS 协议,说明其在 HTTP 基础上加入 SSL/TLS 加密层,实现数据机密性、完整性和身份认证,并对比 HTTP 与 HTTPS 的差异。内容适合网络基础复习,也可作为计算机网络、Web 协议入门速记资料。

2026-09-03 18:48:24 504

原创 Linux应用层开发 --- UDP&TCP

本篇学习笔记围绕 Linux 网络编程中 UDP 与 TCP 两大传输层协议展开,对比梳理两种协议核心特点,讲解网络通信模型,重点解析 TCP 三次握手、四次挥手原理,介绍 TCP 报文头部关键字段。结合 C 语言 socket 编程,分别实现 UDP、TCP 客户端与服务端代码,完成双人聊天、文件传输实战案例。同时介绍网络抓包工具的基础使用,将理论概念与代码实践相结合,夯实套接字网络开发的基础。

2026-09-01 21:08:31 614

原创 Linux应用层开发 --- 网络通信

本篇笔记梳理计算机网络基础核心内容,对比 OSI 七层参考模型与 TCP/IP 四层参考模型,讲解两种模型层级对应关系。介绍 IP 协议工作原理,重点学习 IP 地址划分规则,理解网络协议栈数据封装解封装完整流程。同时包含 Linux 网络配置相关内容,梳理各层作用、数据包封装解封过程,区分各层数据单元,理清网络数据传输完整流程,适合嵌入式 Linux 网络编程复习巩固基础理论。

2026-08-31 22:25:21 244

原创 Linux应用层开发 --- 信号

本篇笔记梳理 Linux 进程间通信核心知识,涵盖信号注册发送、pause 与 alarm 函数、消息队列、共享内存以及 SystemV 信号量集。重点讲解信号量集,它是内核维护的信号量数组,依靠 semget、semop、semctl 完成创建、PV 操作、初始化与删除。区分 SystemV 信号量集与 Posix 信号量,点明创建不会自动初始化、内核对象残留等高频易错点,完整梳理各类 IPC 接口用法、操作流程与坑点,适合嵌入式 Linux C 编程复习使用。

2026-08-30 23:05:00 466

原创 Linux应用层开发 --- 管道

本篇笔记讲解 Linux 进程间通信 IPC 的管道技术,分为无名管道与有名管道两大模块。依次剖析二者本质、通信特点、完整操作流程,重点讲解有名管道的阻塞特性、读写规则、内核缓冲区、半双工属性以及生命周期管理。最后对比无名管道和有名管道在适用进程、创建方式、生命周期等维度的区别。配套梳理 mkfifo、open、read、write 等核心函数,帮助学习者理清管道通信原理,掌握两种管道代码实现思路,区分两类管道的适用开发场景。

2026-08-28 19:50:35 504

原创 Linux应用层开发 --- 线程

本篇 Linux 线程学习笔记从线程基础概念入手,讲解线程创建、调度、消亡等完整生命周期,详解pthread_create、pthread_join核心接口。对比进程与线程的本质差异,剖析线程资源共享特性。重点梳理线程同步、互斥两种并发控制机制,解析互斥锁使用原理,最后介绍死锁产生的原因与规避思路。配套基础代码示例,适合 Linux C 并发编程初学者理清多线程知识框架,掌握多任务开发核心知识点,区分进程、线程的开发使用场景。

2026-08-27 18:16:27 487

原创 Linux应用层开发 --- 进程

本篇为 Linux 进程基础学习笔记,主要讲解进程的概念、创建、调度、状态与消亡过程,并介绍进程相关常用命令。内容重点围绕 fork() 函数展开,说明父子进程的生成方式、执行流程差异与基础使用逻辑。整体从理论概念到函数接口逐步递进,帮助学习者理解操作系统中进程管理的基本机制,以及如何通过系统调用完成进程创建与控制。

2026-08-25 18:39:51 473

原创 Linux应用层开发 --- 目录&函数

本篇为 Linux 目录 IO、出错处理与 framebuffer 相关笔记,主要梳理目录文件的打开、读取和关闭操作,重点包括 opendir、readdir、closedir 等目录流函数。同时介绍全局错误编号 errno 的概念与工作流程,以及 perror、strerror 等错误处理函数,并对比二者使用区别。最后讲解 framebuffer 帧缓存技术与基本操作方法,帮助学习者理解 Linux 下目录遍历、错误提示和图形显示底层机制。

2026-08-24 19:22:47 354

原创 Linux应用层开发 --- 文件

本篇为 Linux 文件 IO 与标准 IO 的学习笔记,主要梳理文件打开、读写、关闭、定位等基础操作,重点介绍 open、read、write、close、lseek 等文件描述符相关函数。同时对比文件 IO 与标准 IO 的区别,讲解缓冲区、行缓冲、全缓冲和无缓冲等概念,并补充 printf 相关函数接口,帮助学习者系统掌握 C 语言文件编程中的输入输出机制。

2026-08-22 18:01:51 599

原创 Linux应用层开发 --- 文件操作

本篇为 Linux 下文件与时间相关函数的学习笔记,主要梳理文件概念、Linux 下文件类型、文件操作方法和标准 IO 接口。内容重点包括文件的打开、读写、定位与关闭,以及 fopen、fgetc、fputc、fgets、fputs、fread、fwrite、fclose 等常用文件操作函数,并补充时间相关函数的基本使用,适合作为 C 语言文件编程入门复习资料。

2026-08-21 19:21:25 547

原创 数据结构 --- 算法

本篇为算法基础学习笔记,围绕算法设计要求、时间复杂度与空间复杂度展开,介绍顺序查找、二分查找等常见查找算法,并系统梳理插入排序、希尔排序、快速排序、冒泡排序、选择排序等排序算法。内容结合目录结构与算法对比表,帮助学习者理解不同算法的适用场景、执行效率和实现思路,适合作为数据结构与算法入门复习资料。

2026-08-20 19:58:04 619

原创 数据结构 --- 二叉树&哈希表

本篇数据结构学习笔记分为二叉树、哈希表两大板块。二叉树部分讲解树形基础概念、链式存储方式、前 / 中 / 后序遍历算法,介绍带占位符字符串递归创建二叉树的方法,配套结点计数、深度计算、内存销毁等递归代码实现,补充二叉树核心数学性质。哈希表板块梳理哈希函数、哈希冲突概念,对比开放定址法、链地址法两种冲突解决方案,分析操作的时间复杂度。最后完整给出拉链哈希表五大功能模块的 C 语言实现代码,讲解插入、查找、打印、销毁的执行流程,同时点明现有代码的缺陷与优化方向。

2026-08-19 18:46:54 745

原创 数据结构 --- 栈

本帖主要讲解了数据结构中栈的相关知识点,从栈后进先出的核心特性入手,讲解顺序栈、链式栈两种存储实现方式。结合函数调用、括号匹配、浏览器前进后退等生活案例剖析栈的实际应用,拓展介绍最小栈、单调栈等进阶变体。同时梳理栈相关高频算法考点,覆盖基础操作、表达式求值、括号校验,由基础理论到代码实战层层递进,帮助学习者系统掌握栈的原理、代码实现与解题思路。

2026-08-18 19:38:50 480

原创 数据结构 --- 队列

本帖系统介绍了队列数据结构。首先阐述了队列的 FIFO 特性、基本术语(队头、队尾、长度)和广泛应用场景(任务调度、BFS、消息队列等)。接着对比了顺序队列(含循环队列)与链式队列两种实现方式,分析了各自优缺点和时间复杂度。最后,详细给出了链式队列和循环队列的 C 语言实现代码,包括创建、入队、出队、判空/判满、遍历等核心操作,并简要介绍了双端队列、优先队列等常见变体。

2026-08-17 18:30:23 547

原创 数据结构 --- 链表

本帖系统梳理数据结构的基本概念、逻辑与物理结构分类,并深入讲解单向链表的C语言实现。内容涵盖数据结构定义、四种逻辑结构(集合、线性、树形、图形)、四种物理存储方式(顺序、链式、索引、散列),以及单向链表的完整API实现(创建、插入、删除、查找、修改、遍历、销毁),最后介绍内存泄漏检测工具valgrind的使用方法。文章条理清晰,知识点完整,并补充了实践中的注意事项。

2026-08-13 19:18:13 575

原创 基于framebuffer & C项目:五子棋游戏

本项目基于 Linux Framebuffer 帧缓冲设备,使用 C 语言开发一款双人五子棋对弈游戏。程序通过二维数组存储棋盘状态,利用 W/A/S/D 控制红色光标移动,空格键完成落子,加入边界校验防止越界,同时禁止重复落子。落子后从最新棋子位置向四个方向检测五子连珠实现胜负判断,获胜后延时 1 秒再显示 BMP 胜利图片。项目采用模块化设计,区分绘图底层与游戏业务逻辑,借助 Makefile 管理多文件编译。开发过程中解决下标传参、BMP 结构体对齐等问题,巩固数组、系统调用与 Linux 工程开发能力

2026-08-12 17:39:45 605

原创 C语言 --- 内存管理&位运算&程序调试

这份C语言进阶笔记分为三大板块。第一部分讲解操作系统内存分布,对比堆与栈的存储特性;第二部分系统学习各类位运算符、实操用法和运算符优先级,掌握高效的二进制运算技巧;最后介绍两种程序调试手段,简易的打印调试和专业 gdb 调试工具。整套内容补齐 C 语言底层知识,打通内存原理、位运算、程序排错重难点,适合学习者夯实底层编程功底。

2026-08-10 17:41:02 484

原创 C语言总结 --- 构造数据类型

本帖梳理 C 语言三大构造类型与 typedef 关键字。结构体板块完整覆盖声明、变量创建、初始化、成员访问、内存对齐、函数传参、结构体数组全套基础用法;共用体讲解基础语法、共用一块内存的特性,借助它学习大小端存储原理;枚举介绍常量枚举的基础使用;最后讲解 typedef,掌握给原有数据类型起别名的方法。整套内容循序渐进,分清三类构造体的内存区别,夯实构造数据类型的编程基础。

2026-08-07 20:20:24 610

原创 指针专栏2 --- 区分:指针函数 & 函数指针

本专栏完整梳理指针函数与函数指针两大易混知识点,依靠运算符优先级区分二者语法。指针函数本质是函数,返回内存地址,严格规范合法返回地址类型,杜绝返回局部栈变量引发野指针;函数指针本质是指针变量,存储函数入口地址,核心用于实现回调函数。笔记包含语法定义、代码示例、内存特性、易错坑点对比汇总,整理四类易混指针语法辨析口诀,清晰区分语法、本质、用途差异,覆盖考试高频易错考点。

2026-08-06 18:11:26 670

原创 指针专栏1 --- 区分:数组指针&指针数组

本专栏重点区分数组指针与指针数组,依靠运算符优先级快速判别:char *p[]为指针数组,本质是数组,存储多个字符串指针,占用空间仅和指针数量相关,排序时只需交换指针地址效率高;char (*p)[]是数组指针,本质单个指针,指向完整一维字符数组,常作为形参接收二维数组。二者内存分布、读写权限不同,二维字符数组需拷贝字符串交换,指针数组仅存放常量字符串地址不可修改内容,整理了语法、内存、实操对比,扫清易混淆考点。

2026-08-05 18:59:04 552

原创 C语言总结 --- 指针

本部分围绕指针与一维整型数组展开学习。先掌握指针基础,理解指针变量定义、初始化、取值 & 取地址运算符与指针算术运算;再学习指针作为函数参数的传递特性,利用指针直接操作原始数据。重点梳理一维数组与指针的等价关系:数组名等价于首元素地址,a[i]与*(a+i)可以互换。结合冒泡、选择排序案例练习,运用指针偏移访问数组元素,体会指针操作数组的优势,夯实指针实操能力。

2026-08-03 19:18:25 503

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除