- 博客(545)
- 收藏
- 关注
原创 Yocto:开启中国嵌入式新时代 —— 记我在四方维 × 西门子Xcelerator深圳创新中心的技术交流
摘要:本文记录了作者在四方维与西门子Xcelerator深圳创新中心举办的嵌入式系统沙龙上的技术分享。作为Yocto项目专家,作者通过"你用过Linux,但你真正拥有过它吗?"的主题演讲,阐述了Yocto项目如何改变传统嵌入式开发的碎片化问题,强调标准化和开源协作对中国嵌入式生态发展的重要性。文章分享了树莓派、i.MX等平台的Yocto应用案例,并展望了AI时代标准化构建工具的价值。作者呼吁更多工程师加入Yocto生态,共同推动中国嵌入式技术走向国际前沿。
2025-06-28 11:40:29
603
原创 当当 & 京东双榜第一!《Yocto项目实战教程》专业实力获认可
《Yocto项目实战教程:高效定制嵌入式Linux系统》近日登上当当、京东图书榜首,获得业界广泛认可。本书以实战为导向,系统讲解Yocto项目核心架构、构建流程、BSP移植等关键技术,融入丰富案例和前沿应用场景。适合嵌入式工程师、BSP开发人员及技术团队参考学习,助力国产芯片、AI边缘计算等领域发展。配套京东购买链接和B站视频资源,欢迎交流探讨嵌入式技术生态发展。
2025-06-27 10:13:50
405
原创 Linux Regulator 子系统核心逻辑与关键问题全解析
Linux regulator子系统是内核用于统一管理多路可控电源的框架,通过三层结构(PMIC驱动层、框架层、用电模块层)实现软硬件解耦。设备树定义regulator属性,驱动通过regulator_desc/ops等结构体注册电源,用户模块通过regulator_get/enable等API控制电源。核心优势在于标准化管理、硬件无关性和可扩展性,关键点包括设备树配置、API调用流程和分层设计。该系统解决了多路电源的复杂管理问题,是嵌入式开发中的重要组件。
2025-06-26 19:50:47
622
原创 谁在用Yocto项目?
《Yocto项目:嵌入式Linux开发的工业化基石》深入剖析了Yocto项目在产业应用中的核心价值。文章指出,Yocto已成为芯片原厂(如NXP、TI)、汽车电子(AGL平台)、数据中心(OpenBMC)、工业自动化(西门子等)等领域的标准构建体系,其Layer机制支持多团队协作与平台化管理。相比Buildroot,Yocto更适合大规模产品开发,具备工程化构建、安全合规、长期维护等优势。通过标准化硬件适配和软件分发,Yocto推动嵌入式Linux从"手工艺"走向"工业化&qu
2025-06-26 15:14:44
816
原创 一文读懂 Python 基础语法 —— C/C++ 工程师转 Python 最佳入门指南
本文为C/C++工程师提供Python基础语法快速入门指南,通过对比C/C++讲解Python核心语法特点。主要内容包括:Python采用缩进替代{}控制代码块,动态类型变量无需声明,内置丰富数据结构(列表、字典、元组等),简洁的列表推导式,函数参数处理(默认参数、可变参数),面向对象编程(类、继承、dataclass),以及异常处理和模块系统。文章强调Python的简洁语法设计,如f-string格式化、lambda匿名函数等特性,帮助有C/C++背景的开发者高效掌握Python编程范式。
2025-06-26 10:40:33
1141
原创 深入理解RTOS的特点:以FreeRTOS为例与Linux对比分析
本文深入探讨实时操作系统RTOS的核心特性,以FreeRTOS为例,分析其确定性调度、低资源占用、高效通信等特点,并与Linux进行对比。FreeRTOS适用于强实时、资源受限场景(如工业控制),而Linux更适合复杂但实时性要求不高的应用。文章包含任务创建、消息队列等实战代码示例,帮助开发者理解RTOS实现机制。最后提供系统选型建议:根据项目实时需求和资源限制选择合适操作系统。更多内容可关注作者书籍和视频教程。
2025-06-25 11:41:31
971
原创 i.MX平台下 Linux + FreeRTOS 协同启动与通讯全解(含Yocto实战与核心机制分析)
在现代嵌入式系统中,“异构多核”架构已成为趋势。例如 NXP 的 i.MX8M Plus(i.MX8MP)平台,拥有四核 Cortex‑A53 与独立的 Cortex‑M7 核心。A 核一般运行 Linux,M7 可用于实时、低延迟任务(如工业控制、音频处理等)。\*\*如何让 Linux 与 FreeRTOS(或裸机)并行启动、可靠通讯,并实现跨核协作?\*\*本文将系统梳理开发实践与原理机制,结合 Yocto 自动化构建与 remoteproc/RPMsg 通讯,给你最系统的一站式方案。
2025-06-24 19:26:38
1310
原创 Jenkins 全面解析:作用、功能、优势与对比
《Jenkins全面解析:核心功能与应用实践》 本文系统介绍了开源自动化服务器Jenkins的核心作用与优势。作为持续集成和持续交付领域的代表性工具,Jenkins通过强大的插件系统(支持1000+插件)和灵活的流水线机制,可以实现从代码提交到部署的完整自动化流程。文章详细对比了Jenkins与Azure DevOps的特点,指出Jenkins在开源免费、配置灵活性方面的优势。同时展示了10个典型应用场景,包括前端构建、Docker镜像推送等。Jenkins凭借其活跃的社区生态和跨平台支持,仍然是现代Dev
2025-06-24 11:48:13
774
2
原创 NXP i.MX SoC GPU:核心原理、工程实战与考点全解
本文全面解析NXP i.MX系列SoC中Vivante GPU的核心原理与工程实践。从GPU硬件架构、渲染流程入手,深入分析Linux驱动设计要点,包括设备树配置、内核模块实现及用户态配合。重点探讨i.MX平台GPU驱动适配难点、与DRM子系统的协作机制,并针对工程中的典型问题提供解决方案。文章还梳理了常见考点,如驱动加载失败排查、显示异常分析等,为嵌入式Linux开发者提供GPU开发的全方位指导。
2025-06-23 13:18:35
836
原创 信号量原理全解:同步利器与互斥锁的比较
本文深入解析信号量机制,从基础原理到实际应用,帮助开发者掌握这一并发编程利器。文章首先阐明信号量的本质——一个可自动增减的计数器,用于控制资源访问数量,并详细说明其P/V操作原理。通过停车场问题和生产者-消费者模型等经典案例,展示信号量的实际应用场景。同时,对比分析信号量与互斥锁、条件变量等其他同步工具的异同,提供场景选择建议。本文为开发者提供了信号量从理论到实践的完整指南,适合需要实现资源池、连接池等多线程同步控制的程序员阅读学习。
2025-06-23 09:52:31
865
原创 项目实战:valgrind与kmemleak——内存泄漏的终极“体检神器”
本文介绍了Linux系统中检测内存泄漏的两大工具:valgrind(适用于应用层)和kmemleak(适用于内核/驱动层)。valgrind通过拦截内存操作追踪生命周期,可发现应用内存泄漏、越界访问等问题;kmemleak通过扫描内核内存,标记未被引用的可疑泄漏。文章对比了两者的优势与局限,提供了使用示例和输出解读,并给出工程实践建议:开发测试阶段结合两者,可覆盖99%内存安全风险。最后强调定期检测、自动化集成的重要性,帮助解决"系统越跑越慢"的世界性难题。
2025-06-22 16:37:19
726
原创 内核与驱动的内存管理那些坑:实战性能隐患与防护全解
本文深入剖析了Linux内核与驱动开发中的内存管理隐患,通过典型场景案例揭示了内存泄漏、缓存常驻、脏页堆积等问题的表现和原理。文章提供了实战代码示例与优化方案,重点强调分配/释放配对原则、多分支资源回收机制、定期清理策略等最佳实践。针对系统性能下降、OOM等问题,给出了详细的排查思路和工具链建议(如valgrind、kmemleak等)。最后总结内存管理对系统稳定性的决定性影响,呼吁开发者在编码严谨性、部署监控和压力测试三方面加强措施,确保系统高效稳定运行。
2025-06-22 15:53:24
1084
原创 # 内存管理中的缓存分类与分页机制关系 —— 实战代码与现象解读
本文详细解析Linux内存管理中的缓存分类与分页机制的关系。首先介绍CPU Cache、Page Cache、Buffer Cache、Slab/Slub Cache和用户态缓存等常见缓存类型,并通过代码示例说明其工作原理。重点阐述分页机制如何统一管理物理内存页,并图解物理页的不同用途分配。通过工程实践分析缓存占用、释放及压力测试现象,揭示Page Cache和Slab Cache的实际运作。最后总结分页机制与缓存的核心逻辑,提出经典自测问题,强调"缓存即物理页"的本质认知。文章结合代码
2025-06-22 15:24:04
668
原创 四方维和西门子Xceletrator联合发起的校园知识共创活动【校园知识分享官】
本期视频,500强企业资深工程师孙杰,带你看清嵌入式行业趋势,解读AI与嵌入式的深度结合,并为在校生和初学者提供成长建议。嵌入式开发已进入全新时代,AI、国产芯片与智能终端融合加速,产业变革下,如何构建真正的工程师核心竞争力?#嵌入式系统 #AI融合 #国产化 #工程师成长 #学习路线 #Yocto项目 #孙杰。无论你是专业学生还是转行工程师,Yocto项目将是你迈向高阶的关键一步!点击观看,开启你的嵌入式进阶之路!
2025-06-21 19:28:25
259
原创 嵌入式Linux系统内存占用率高的原因、后果与防控全解析
《嵌入式Linux系统内存占用率高的原因、后果与防控全解析》深入剖析了嵌入式设备内存问题的根源与解决方案。文章从硬件层面(成本限制、芯片资源内耗)和软件层面(内存泄漏、缓存管理不善、系统服务过多)分析高内存占用的成因,并列举系统卡顿、进程被kill等严重后果。作者提出一套完整的实战方法论:通过监控工具定位问题,结合硬件选型优化、系统裁剪、开发规范等预防措施。特别强调要区分buff/cache与真实内存占用,并推荐了valgrind等诊断工具。最后推荐《Yocto项目实战教程》作为系统优化参考。全文150字,
2025-06-21 15:33:20
949
原创 Linux 内核同步管理全解:原理 + 实战 + 考点
《Linux内核同步机制详解》文章摘要:本文系统讲解了Linux内核中五种核心同步机制(原子变量、自旋锁、信号量、互斥锁、RCU)的原理与适用场景,通过代码示例对比其特性差异。重点剖析了中断上下文与睡眠场景下的选择策略,并提供共享计数器保护等实战案例。文末总结同步机制的选用指南,并附面试高频问题解析,帮助开发者掌握多核并发环境下的资源保护技术。推荐结合《Yocto项目实战教程》深化嵌入式Linux系统开发能力。(150字)
2025-06-20 20:15:13
290
1
原创 DRM 显示控制与硬件参数配置链路总结(以 i.MX8MP 为例)
DRM显示控制与硬件参数配置链路解析(i.MX8MP为例) 核心机制:显示参数(分辨率、时序、色深)最终由用户空间通过DRM API设置,经DRM框架传递给LCD控制器驱动实现硬件配置。设备树通常只定义接口,不固定参数。 参数分类: 用户可控参数:分辨率(通过modetest/Weston设置) 驱动固定参数:像素时钟、同步时序(panel-simple驱动定义) 硬件特性参数:色深、总线格式(Panel描述中定义) 关键实现: 多模式支持:panel驱动可定义多个display_timing 默认模式:当
2025-06-20 14:48:21
901
原创 i.MX8MP LVDS 显示子系统全解析:设备树配置与 DRM 架构详解
本文详细解析了i.MX8MP平台LVDS显示系统的设备树配置与Linux DRM架构映射关系。通过CRTC→LDB Bridge→LVDS Panel的完整链路分析,展示了lcdif2控制器、ldb桥接器和面板的设备树节点配置方法,并提供了DRM架构逻辑图。文章还总结了各组件类型、设备树节点对应关系,列出关键源码路径,给出常见调试建议。该内容有助于开发者理解LVDS显示链路,快速完成嵌入式显示系统的配置与调试。推荐结合Yocto项目实战教程和NXP官方文档进行深入实践。
2025-06-20 11:50:19
972
原创 LCD硬件配置全解:核心原理、参数详解与DRM配置实战
本文系统讲解了LCD硬件配置的核心原理与实战技巧。主要内容包括:LCD接口类型概述(RGB并口、LVDS、MIPI DSI等)、关键硬件参数(分辨率、像素时钟、时序、色深等)详解;设备树和Linux DRM框架下的配置方法,并给出典型代码示例;常见问题分析与解决方案。文章强调严格对照LCD规格书配置参数,并提供了分层调试建议。适合嵌入式开发人员参考,掌握LCD驱动开发与优化的核心技术。
2025-06-19 20:46:41
669
原创 Valgrind:你开发路上的代码安全与性能瑞士军刀
几乎是每个做C/C++、嵌入式、系统底层开发的工程师都该掌握的一把“瑞士军刀”。很多人发现自己的for循环慢得不可思议,其实是Cache没用好。【案例2:cachegrind定位缓存瓶颈,秒变“性能专家”】【Valgrind:你开发路上的代码安全与性能瑞士军刀】三、Valgrind实战案例(看得见的效果)你再复杂的内存bug,它都能帮你定位出来,六、Valgrind对性能和开发质量的意义。二、Valgrind常用子工具(全家桶)一、Valgrind是什么?五、Valgrind的局限与注意事项。
2025-06-19 20:43:59
897
原创 【性能优化硬核实战】一行代码让你的嵌入式系统提速数十倍:从缓存友好访问到极致初始化的全流程揭秘
《嵌入式系统性能优化实战:从缓存友好访问到极致初始化》 摘要:本文以医疗监护仪开发为例,揭示内存访问顺序对嵌入式系统性能的关键影响。通过对比1920x1080分辨率缓冲区初始化测试(行优先vs列优先),实测数据表明:列优先访问导致99.7%的Cache未命中率,性能下降5倍。文章深度剖析Cache工作原理,结合perf/valgrind工具分析,给出内存优化三原则:1)优先按内存布局顺序访问 2)避免跨行随机访问 3)善用memset等优化库函数。最后指出,缓存友好设计在医疗、车载等实时系统中,既是性能保障
2025-06-18 22:20:11
1156
原创 《Yocto项目实战教程:高效定制嵌入式Linux系统》 京东618正版促销, 只要46元, 支持作者,赶紧点击抢购
《Yocto项目实战教程》京东618特惠46元,限时抢购中!本书系统讲解如何高效定制嵌入式Linux系统,涵盖Yocto项目核心技术与实战经验。适合嵌入式开发者学习参考,现正版促销支持作者。点击链接直达购买页面:https://item.jd.com/15020438.html
2025-06-18 22:19:38
301
原创 深入理解CPU缓存:原理、结构、案例与市场趋势全解析
**CPU缓存(Cache)**是位于CPU与主存(物理内存)之间的高速、容量较小的临时存储区。它专门缓存最近访问、最频繁使用的数据和指令,目的是**加速CPU访问速度,减少等待内存的延迟**。* 通俗类比: * Cache像你办公桌上常用的文件,主存(物理内存)像远处的档案柜。 * 取用办公桌文件(Cache)很快,去档案柜(主存)则慢许多。
2025-06-18 11:47:30
571
原创 深度解析Linux进程状态(含不可中断睡眠、僵尸进程成因与防范)【内核工程师必备】
本文深度解析Linux进程的六种核心状态(运行、可中断睡眠、不可中断睡眠、停止、僵尸、退出),重点剖析可中断与不可中断睡眠的区别,以及僵尸进程的成因与防范。文章通过代码示例演示进程状态流转,并介绍调试观测方法。关键点包括:不可中断睡眠(D)进程无法被信号终止,需确保驱动健壮;僵尸进程(Z)会消耗系统资源,可通过父进程wait、信号忽略或init收养来避免。最后提供了ps、top、/proc等工具的使用方法,帮助开发人员诊断进程状态问题。
2025-06-17 13:15:13
815
原创 Linux 进程管理核心问题全解
本文全面解析Linux进程管理核心问题,涵盖进程创建生命周期(fork/exec/exit/wait)、用户空间与内核空间划分、进程内存区域布局等基础概念。深入探讨进程调度机制、task_struct关键字段、上下文切换时机等内核原理,并介绍ps/top/proc等观测工具和strace/gdb等调试方法。针对进程异常状态(僵尸/死锁)提供诊断方案,强调父子进程正确回收的重要性。最后推荐通过实验验证结合《Yocto项目实战教程》系统学习,为理解Linux内核和嵌入式开发奠定基础。
2025-06-17 08:00:00
825
原创 如何选择和切换下一个进程 —— Linux进程调度原理与代码全解
Linux进程调度机制解析与实现 本文深入剖析了Linux内核的进程调度机制,从基础概念到核心实现。主要内容包括: 核心概念:调度器负责选择与切换进程,通过task_struct统一表示进程/线程,调度实体sched_entity作为调度算法基础。 选择机制:CFS调度器通过红黑树选取vruntime最小的sched_entity,对应进程通过pick_next_task()函数确定。 切换流程:schedule()函数关闭抢占后,完成上下文切换(保存寄存器、切换页表等),核心路径是schedule()→_
2025-06-16 19:39:04
1070
原创 从 malloc 到页表:一次用户态内存访问背后的全流程
本文以ARMv7架构为例,详细解析了Linux系统下malloc(8)内存分配的全过程:从用户空间调用glibc分配器,到内核通过brk/mmap创建VMA区域,再到首次访问触发缺页异常,最后内核分配物理页帧并建立页表映射。文章揭示了用户态内存访问背后涉及的系统调用、虚拟内存管理和页表构建机制,并通过流程图展示了从malloc到物理内存映射的完整链路。作者还推荐了相关技术书籍和文章,帮助读者深入理解Linux内存管理机制。
2025-06-16 13:16:35
992
原创 Arm32 Memory Model:内核空间与用户空间的真相解析
本文解析了ARM32架构下内核空间与用户空间的内存管理机制。关键点包括:1)用户态/内核态与用户空间/内核空间的本质区别;2)ARM32采用3GB/1GB的虚拟地址空间划分;3)进程独立用户页表与共享内核页表的设计原理;4)页表初始化与切换流程。文章揭示了Linux通过"共享+隔离"策略实现内存保护与资源优化的平衡机制,为理解嵌入式系统内存管理提供了清晰框架。最终解释了为何每个进程需要独立页表却能共享内核页表的本质原因。
2025-06-16 10:53:13
1032
原创 Yocto vs Buildroot:SDK(软件开发套件)创建能力全面对比
《Yocto vs Buildroot:SDK创建能力全面对比》文章摘要 本文深入对比了Yocto和Buildroot两大嵌入式Linux构建系统在SDK(软件开发套件)创建方面的能力差异。Buildroot支持生成基础工具链,但缺乏安装脚本和环境封装功能,适合快速验证;而Yocto提供完整的populate_sdk和eSDK机制,包含一键安装、环境变量设置和开发工具集成,更适合产品级开发和团队协作。文章通过配置示例、功能对比表和实际应用场景分析,为开发者提供了清晰的选型建议:轻量级验证选Buildroot
2025-06-15 22:12:51
784
原创 用户空间与内核空间:小内存访问背后的完整真相
本文深入解析用户空间与内核空间在小内存访问中的完整流程。通过分析malloc(8)和kmalloc(8)的调用路径,揭示二者关键差异:用户空间通过glibc分配器管理,首次访问触发Page Fault才分配物理页;内核空间则直接使用slab分配器。文章详细剖析了Page Fault处理、页表建立、MMU/TLB工作原理等底层机制,并通过流程图展示完整访问路径,帮助开发者理解表象背后的完整真相。最后对比总结了两种内存分配方式的核心差异,包括API、分配策略、物理页帧分配等关键区别。
2025-06-15 17:21:34
723
原创 嵌入式底层开发中的核心问题与实践经验总结
摘要:本文总结了嵌入式底层开发中的核心问题与实践经验,涵盖C++多态、SPI/I2C通信协议、DDR验证优化以及Linux/RTOS驱动开发等关键技术点。文章详细解析了静态/动态多态的实现机制,对比了SPI全双工高速通信与I2C半双工总线架构的特点,提出了SoC芯片DDR验证的4步流程,并针对驱动开发中的典型问题给出了解决方案。最后强调嵌入式开发需要建立从协议理解到系统调试的完整能力体系。(149字)
2025-06-15 16:05:37
807
原创 嵌入式系统通识精讲:架构 · 内存 · 算法 · 引导加载 · 性能优化全解
《嵌入式系统核心技术精讲》摘要:本文深入解析嵌入式系统五大关键技术。1)页表机制:详解多级映射原理与优化策略;2)螺旋矩阵算法:分析边界控制遍历方法;3)Cortex-A架构:剖析其MMU/NEON/TrustZone特性与局限;4)网页加载优化:提出前端压缩、系统精简等多层优化方案;5)Bootloader移植:总结SPL初始化、功能裁剪等关键步骤。全文贯穿工程实践建议,强调调试优先原则,并推荐结合Yocto项目进行系统定制。适合嵌入式开发者全面提升系统级开发能力。
2025-06-15 13:35:53
534
原创 Linux内核内存管理高含金量面试题·实战解析(含技巧总结与源码分析)
Linux内核内存管理面试实战解析(摘要) 本文系统剖析Linux内核内存管理的核心机制与高频面试题,涵盖9大关键知识点: 伙伴系统:详解2的幂分配算法、合并拆分流程及源码实现(rmqueue_buddy/__free_one_page) 物理页管理:解析struct page结构体核心字段及物理地址映射原理 内存分配API:对比kmalloc/vmalloc/alloc_pages等接口的适用场景与限制条件 GFP机制:剖析内存分配标志组合(如GFP_KERNEL/ATOMIC)对分配行为的影响 zone
2025-06-14 18:49:34
619
原创 Buildroot vs Yocto:谁才是嵌入式软件包管理的真正主角?
摘要:本文对比嵌入式Linux构建工具Buildroot与Yocto在包管理系统的核心差异。Buildroot采用一次性固化构建,直接安装软件到rootfs,适合简单快速部署;Yocto支持.ipk/.deb/.rpm等包格式,提供运行时包管理功能,适用于需要动态升级的企业级应用。文章从原理、构建流程、行业应用等多维度分析,指出Buildroot优势在于轻量易用,而Yocto更适合复杂需求如OTA更新和组件化管理。最后建议根据项目规模、生命周期等需求选择合适工具,并推荐相关技术书籍作为延伸阅读。
2025-06-14 17:25:15
1159
原创 Buildroot 与 Yocto 项目 : 软件包集成机制上的技术差异全解析
摘要:本文深入对比了Buildroot与Yocto项目在嵌入式Linux系统构建中的技术差异,重点分析软件包集成机制。Buildroot采用Makefile模型,简单易用但扩展性有限;Yocto基于BitBake元数据描述,支持复杂依赖管理和并行构建。两者在依赖模型、构建过程、输出结构等方面存在显著不同:Buildroot适合快速构建小型系统,Yocto更适合企业级复杂系统开发。文章最后给出选择建议,小型项目推荐Buildroot,大型复杂项目建议采用Yocto。
2025-06-13 23:41:18
791
原创 实战精讲:用户空间分配到内核页帧管理的全流程(含真实log)
本文通过实战演示Linux用户空间内存申请触发内核页帧分配的全流程。作者编写8MB内存分配程序强制触发物理页分配,并在内核关键函数(__alloc_pages、zone_watermark_ok、rmqueue_buddy)添加log跟踪分配过程。实验显示用户大块虚拟内存被拆分为单页(order=0)物理分配,日志清晰反映空闲页递减、伙伴算法分配过程。文章深入解析内核水位检查、伙伴算法机制,并建议拓展高阶分配实验和碎片分析,帮助开发者建立内存管理思维模型。文末推广作者嵌入式Linux相关书籍和视频教程。
2025-06-13 20:03:44
837
原创 Linux 内核物理内存管理核心机制与代码分析(附面试常问问题)
> * 内核内存分配失败时,应该怎么看日志、分析原因?> * 内存碎片化如何影响系统稳定性?> * 伙伴算法和回收、碎片整理各自的职责与联系是什么?> * 面试中常被问到的 `__alloc_pages()`、`zone_watermark_ok()`、`rmqueue_buddy()` 都是怎么协作的?
2025-06-13 17:04:45
1078
原创 链表算法经典问题全解析
本文系统梳理了链表常见题型,包括反转链表、环检测、删除倒数第k节点、合并排序链表、回文判断等核心算法。通过快慢指针、虚拟头节点等技巧,配合代码示例与解题思路,帮助读者掌握链表操作要点,提升算法能力。涵盖迭代与递归实现,适合面试备考与日常练习。
2025-06-13 12:34:05
941
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人