自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shevsten的专栏

工作日志

  • 博客(76)
  • 资源 (16)
  • 收藏
  • 关注

翻译 Linux Kernel Development 3rd Edition 读书笔记(6)

第十一章 Timers and Time Management1. Frequency of the Timer Interrupt 2. 全局变量jiffies系统启动后的tick数值.jiffies变量声明在 :extern unsigned long volatile jiffies;jiffies是jiffies_64的低32位,大部分情况用jiffies,只有时

2012-12-24 16:01:45 2404

翻译 Linux Kernel Development 3rd Edition 读书笔记(5)

第九章 An Introduction to Kernel Synchronization1. pseudo-concurrency: 访问不同时发生,但是互相发生交错.2. 内核并发性的原因有:Interrupts, Softirqs and tasklets, Kernel preemption, Sleeping and synchronization with user-space

2012-10-19 17:29:16 2895

翻译 Cortex M3 Bit-banding简介

bit-band是Cortex-M3内核中针对某一段区域进行位和字映射的机制,对于位操作,如IO控制LED,相比传递的C语言的位操作,提供了很大的方便.bit-band 区域将存储器别名区(bit-band alias region)的一个字映射为 bit-band区的一个位. 处理器存储器映射包括两个 bit-banding 区域, 它们分别为 SRAM 和外设存储区域中的最低的 1MB.

2012-06-19 14:30:05 8855

原创 MCU知识总结

1. Brown-Out Reset掉电复位,或电源电压跌落复位, 当输入电压VCC跌到某一门限时芯片复位The MCU is reset when the supply voltage VCC is below the Brown-Out Reset threshold voltageand the Brown-out Detector is enabled. The Brown-o

2012-06-15 16:27:20 5711

翻译 Linux Kernel Development 3rd Edition 读书笔记(4)

第七章: Interrupt and Interrupt Handler1. 驱动调用 request_irq()来注册中断,声明在 /* request_irq: allocate a given interrupt line */ int request_irq(unsigned int irq,irq_handler_t handler, unsigned long fl

2012-06-07 17:40:27 2788

翻译 Linux Kernel Development 3rd Edition 读书笔记(3)

第六章: Kernel Data Structures1. Linked Lists(1) singly list/* an element in a linked list */struct list_element { void *data; /* the payload */ struct list_element *next; /

2012-03-16 15:12:03 2501

翻译 Linux Kernel Development 3rd Edition 读书笔记(2)

第四章: Process Scheduling1. 多任务操作系统有2种类型:cooperative and preemptive multitasking, 即非抢占式和抢占式. Linux是抢占式多任务操作系统.2. Linux 2..5版本使用叫o(1)的scheduler, Linux2.6.23使用叫completely fair scheduler(CFS).3. 进程可分

2012-01-12 16:05:29 3207

原创 AVR/GCC设置不链接未调用的函数

在AVR Studio4/5的AVR/GCC默认设置下,未调用的函数也会被link进最终的镜像,从而增大image的大小,这会浪费flash资源.以下是如何在AVR Studio4/5设置,不把未调用的函数link进image.方法是在complier命令中增加-ffunction-sections,linker命令中增加-Wl,--gc-sections.-ffunction-sec

2011-12-07 14:24:58 6834

翻译 Linux Kernel Development 3rd Edition 读书笔记(1)

该书有第二版中文版,第三版还没看到,这里记录下该书的要点,并翻译成中文以加深印象.欢迎指正第一章 Introduction To The Linux Kernel1. Linux内核类型Linux Linux是单一的内核(monolithic kernel),就是说,Linux内核在单一的地址空间中运行,但是Linux借鉴了很多微内核(mircokernel)的优点. Linux使用了

2011-11-23 17:29:24 3552

原创 WinCE6.0 DEVICEEMULATOR BSP的CEDDK简析

WinCE6.0 DEVICEEMULATOR BSP的CEDDK提供了地址转换函数,位于/SRC/DRIVERS/CEDDK/下,有2个目录DDK_BUS和DLL,前者生成ddk_bus.lib,后者生成ceddk.dll,这部分的CEDDK实现了4个函数,data.c中的HalGetBusDataByOffset和HalSetBusDataByOffset,trans.c中的HalTranslateBusAddress和HalTranslateSystemAddress.

2011-03-15 11:55:00 2898

原创 WinCE6.0 DEVICEEMULATOR BSP的BatteryDriver驱动简析

WinCE6.0 DEVICEEMULATOR BSP的Battery驱动,位于/SRC/DRIVERS/BATTDRVR下,只有一个battif.c,内容比较简单.实际上是电池驱动的PDD层,实现PDD层中的一个接口函数,这里简要来分析一下.其中MDD层代码位于/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BATTDRVR下.

2011-03-11 14:26:00 2947

原创 WinCE6.0 DEVICEEMULATOR BSP的BackLight驱动简析

这里就WinCE6.0 DEVICEEMULATOR BSP的BackLight驱动做下分析, 更多关于电源管理的内容可以参考其他资料.这是一个名称为BKL的流接口驱动,实际上流接口函数,如BKL_Open, BKL_Read, BKL_Read,BKL_Write等都未实现,只有一个空函数框架,因为背光驱动并没有数据的输入输出,而是具体的功能设置.

2011-02-24 14:01:00 3944

转载 ARM几条汇编指令的比较

从网上找到一些关于ARM伪指令的资料,现整理如下:1. LDRLDR R0, =0X3FF5000 ;伪指令,把0X3FF5000这个地址送给R0 LDR R0, 0XFF ; 把立即数0xff送给R0LDR R0, =&FF ; &相当于0X

2011-02-23 10:56:00 5118

原创 Windows编程问题汇总

1.我在一个控制台程序中使用了_beginthreadex()函数,并包含了PROCESS.h头文件    但总是编译错误:告诉我函数没有定义?    #include "process.h" ............    error C2065: '_beginthreadex' : undeclared identifier答:运行库必须用多线程的,在VC6中设置:pro

2011-01-24 16:33:00 2136

原创 WinCE6.0 DEVICEEMULATOR BSP在GEC2410开发板上的移植(3)-PwrButton驱动移植及分析

PwrButton驱动实现了按键关机(PowerOff)和重启(Reset)的功能.我们这里定义开发板上的K1为PowerOff,K3为Reset,对应与CPU的EINT0和EINT2中断.DEVICEEMULATOR BSP中已经基本实现了该驱动,在GEC2410.bat中使能PwrButton,即设置BSP_NOPWRBTN不为1:set BSP_NOPWRBTN=

2011-01-19 11:56:00 2613

原创 linux 2.6.24.4及根文件系统在S3C2410上的移植(使用4.3.2编译器支持eabi)(基于GEC2410)

之前移植了linux-2.6.24.4和根文件系统(使用busybox-1.10.1创建)在GEC2410平台上运行。可参考之前的笔记:内核配置: http://blog.csdn.net/shevsten/archive/2010/05/17/5599790.aspx根文件系统: http://blog.csdn.net/shevsten/archive/2010/05/26/5625133.aspx那时候用的是crosstool编译出来的3.4.5的支持softfloat的编译器,如今的

2010-12-24 15:42:00 3450 2

原创 C陷阱与缺陷学习笔记

第一章:词法"陷阱"1. 编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号.

2010-12-23 16:11:00 2448

原创 WinCE6.0 DEVICEEMULATOR BSP在GEC2410开发板上的移植(2)-FAT分区和HIVE注册表在Nand上的实现

FAT分区在Nand上的实现与CE5.0下的实现方法一样,请参考5.0实现的笔记:http://blog.csdn.net/shevsten/archive/2010/03/04/5344716.aspx需要注意的是需要包含Third Party-GEC2410-Storage Devices-PCI NAND Flash Driver组件.使能CE_MODULES_SDNPCID.

2010-09-27 11:38:00 2430

原创 Windows CE USB Function Driver驱动简析(2)-IST函数(基于WinCE5.0 SMDK2410 BSP的UFBFN驱动)

上一篇我们简单分析了UFN驱动中的Ufn_pdd函数,现在我们来看看IST主线程ISTMain函数及相关处理函数.1.ISTMainISTMain在UfnPdd_Start被创建:pContext->hIST = CreateThread(NULL, 0, ISTMain, pContext, 0, NULL);

2010-08-10 15:49:00 3994 1

原创 Windows CE USB Function Driver驱动简析(1)-驱动架构及UfnPdd函数(基于WinCE5.0 SMDK2410 BSP的UFBFN驱动)

s3c2410有2个USB Host接口,一个Device接口.首先介绍下USB的几个概念:USB是主从结构的,PC是主端(Host),连接到PC上的设备就是从端(device或function).因此对应的驱动分别叫做USB Host Driver及USB Function Driver。我们的板子可以做host也可以做device,接U盘,鼠标到板子上,板子就是Host.板子连到PC作为Mass Storage或者用Activesync连接就是function.

2010-07-15 13:35:00 6172

原创 WinCE6.0 DEVICEEMULATOR BSP在GEC2410开发板上的移植(1)-eboot及串口驱动移植

WinCE6.0自带的DEVICEEMULATOR就是基于s3c2410处理器的模拟器,我们可以经过修改让其运行在我们的GEC2410开发板上.之前想直接用5.0的eboot来下载6.0的镜像,但是始终不成功,理论上应该是可以的,网上也有人成功过.这个以后再来研究,我们首先要让CE6.0的在板子上跑起来.

2010-07-09 10:51:00 1320

原创 Windows CE SDHC驱动简析(3)-CSDIOController类(基于WinCE5.0 SMDK2410 BSP的SDHC驱动)

接下来我们来看看CSDIOControllerBase的继承类CSDIOController,实现在sdiocontroller.cpp.这个类的对象在SDH_Init中通过调用CreateSDIOController来创建其对象,这个函数也在sdiocontroller.cpp中实现:

2010-07-07 10:24:00 1591

原创 Windows CE SDHC驱动简析(2)-CSDIOControllerBase类(基于WinCE5.0 SMDK2410 BSP的SDHC驱动)

接下来我们来看看CSDIOControllerBase类,该类实现了主控制器驱动的硬件实现,定义了很多成员变量和函数

2010-07-06 10:49:00 2484

原创 Windows CE SDHC驱动简析(1)-驱动架构(基于WinCE5.0 SMDK2410 BSP的SDHC驱动)

Windows CE的SD卡驱动包括总线驱动(bus driver),主控制器驱动(host controller driver)和客户端驱动(client driver).总线驱动是客户端驱动和主控制器驱动之间的抽象管理层.提供了标准API允许SD卡客户端驱动运行在任何包含Sdbus.dll的Windows CE设备上.总线驱动独立于应用程序和客户端驱动,可以不加修改的移植到不同处理器平台.

2010-06-24 10:01:00 2704

原创 Windows CE串口驱动简析(4)-PDD层实现:CPdd2410Serial1和CPdd2410Serial2(基于WinCE5.0 SMDK2410 BSP的Serial驱动)

最后就需要实现针对特定串口的CPdd2410Uart的继承类CPdd2410Serial1和CPdd2410Serial2.分别对应于串口UART0和UART2.1.CPdd2410Serial1(1)构造函数CPdd2410Serial1和析构函数~CPdd2410Serial1

2010-06-17 09:43:00 2185 7

原创 Windows CE串口驱动简析(3)-PDD层实现:RX,MODEM,LINE,IR部分(基于WinCE5.0 SMDK2410 BSP的Serial驱动)

接下来就是接收函数了:15. GetWaterMarkBit和GetWaterMarkWaterMark存储的实际上是接收中断模式,对应与UFCON的第4,5位:

2010-06-13 11:20:00 2888

原创 Windows CE串口驱动简析(2)-PDD层实现:CReg2410Uart和TX部分(基于WinCE5.0 SMDK2410 BSP的Serial驱动)

现在我们就来看看SMDK2410中串口驱动的PDD部分.MDD层和PDD COMMON层都是由微软提供的,一般情况下我们基本无须改动.微软为开发者提供了一个CSerialPDD类作为开发工作的起点.CSerialPDD是个纯虚类,我们需要将驱动程序的PDD层定义成CSerialPDD类的继承类,其成员必须准确全面的反应目标硬件平台的特定类型串口的属性.

2010-06-10 14:23:00 3692 5

原创 Windows CE串口驱动简析(1)-驱动架构(基于WinCE5.0 SMDK2410 BSP的Serial驱动)

WinCE5.0 SMDK2410 BSP的串口驱动由两个文件组成.一个在BSP目录下的/SRC/DRIVERS/SERIAL/ser_smdk2410.cpp,另一个在/WINCE500/PUBLIC/COMMON/OAK/CSP/ARM/SAMSUNG/S3C2410X/SERIAL/pdds3c2410_ser.cpp,为了实现BSP的完整性,并方便修改,在移植到GEC2410的时候,将该目录下的所有文件放到BSP目录下,特别的对于串口驱动,我把pdds3c2410_ser.cpp同样也放到BSP目录

2010-06-08 15:05:00 3457 2

原创 linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)

内核可以跑起来,接下来就是移植根文件系统了.我们使用BusyBox-1.10.1来创建根文件系统.下载地址为:http://www.busybox.net/downloads/1.设置BusyBox(1)解压#tar -xvjf BusyBox-1.10.1.tar.bz2#cd BusyBox-1.10.1(2)修改Makefile,设置CROSS_COMPILEARCH  ?= armCROS

2010-05-26 13:44:00 4115 4

原创 linux 2.6.24.4在S3C2410上的移植(CS8900网卡驱动)(基于GEC2410)

SMDK2410配置默认使用的是DM9000A的网卡,因此我们需要修改成CS8900A的网卡驱动.网上找到移植方法有两种方法,一种是将以前版本的cs8900.c驱动拿过来用,只要在配置中增加ARM_CS8900选项,这个代码网上有很多,拿过来试了以下,的确没问题.另一种方法是修改2.6.24.4自带的cs89x0.c驱动,这个驱动没有2410的直接支持,我们需要修改.这里采用第二种方法.参考了网上

2010-05-24 14:09:00 3566 1

原创 linux 2.6.24.4在S3C2410上的移植(内核配置)(基于GEC2410)

移植完u-boot后,接下来就是linux内核了.以下记录我移植的步骤,如有问题,欢迎指正.1.下载linux kernel源代码到http://www.kernel.org/下载linux内核源代码,这里我们使用2.6.24.4的内核.解压linux-2.6.24.4.tar.bz2[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz

2010-05-17 11:13:00 2571

原创 UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)

之前做过u-boot-1.1.6在AT91RM9200的移植,虽然2410和9200这两款ARM9芯片都是ARM920T核的,但还是有不少区别的,特别是启动方式(当然前者是工业级后者是民用级不必说)。at91rm9200内部本身有128k的片内rom,其固化了一个bootloader和uploader, 用来支持程序的下载和引导,而且其内部固化的程序提供了很多内部服务接口(Internel Ser

2010-05-14 14:40:00 2930 1

原创 链表常见操作

面试常会考到链表和C库函数的操作,特地整理下了链表的常用函数,以供参考:一.链表链表定义如下:为了程序的可读性,LinkList表示链表头节点指针,用于表示一个链表,pNode表示节点指针#include#include#includetypedef struct Node{ int data; struct Node *next;}Node,*Link

2010-05-12 22:00:00 1419 1

原创 Embedded linux移植常见错误及使用总结

在移植嵌入式Linux中碰到了不少错误(u-boot,BusyBox,kernel),搜索了网上不少资源,得到了解决办法,这里整理如下:一. u-boot1.arm-linux-gcc: installation problem, cannot exec `cpp0': ?????????这是由于没有把arm-linux-gcc安装在他的默认目录导致的2.95版本

2010-05-11 15:38:00 1301

原创 WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(19)-Nand Flash驱动(FMD)及其简析(2)

接下来我们来看看对应的流接口驱动函数:1.FMD_InitFMD_Init进行了NAND控制器的初始化,复位Nand Flash(使用CMD_RESET命令),读FlashID看是否成功.具体参数命令见如下代码:附上复位的时序图:代码及注释如下:PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegO

2010-04-29 11:24:00 1253

原创 WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(18)-Nand Flash驱动(FMD)及其简析(1)

CE下的Nand Flash使用了很多,eboot存储及其配置信息到Nand,CE Image存储到Nand, Nand上实现BINFS和FAT分区.这些都离不开Nand驱动的支持.在SMDK2410的BSP提供了FMD,编译成库和dll供eboot和OS调用.在直接移植到GEC2410开发板时,并不能正常使用,特别是erase的时候.经检查后发现需要增加了一些Nand命令才能正常完成操作.也许原

2010-04-27 11:52:00 1625

原创 Windows CE 触摸屏(TouchPanel)驱动简析(2)-DDSI函数-(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)

接下来我们来看看具体的DDSI函数.1.DdsiTouchPanelAttach和DdsiTouchPanelDetachDLL entry进入或结束执行,这里不需要任何工作,直接返回0LONGDdsiTouchPanelAttach(VOID){ return(0);}LONGDdsiTouchPanelDetach(VOID){ return

2010-04-23 10:28:00 2182

原创 Windows CE 触摸屏(TouchPanel)驱动简析(1)-原理及驱动架构(基于WinCE5.0 SMDK2410 BSP的TouchPanel驱动)

之前的文章http://blog.csdn.net/shevsten/archive/2010/01/14/5188898.aspx介绍了如何获得触摸屏坐标,设置注册表,将CSP下的Touch搬运到BSP目录下等移植应用工作.现在我们来具体分析下WinCE下触摸屏驱动是如何实现的.1.首先简单介绍下触摸屏的原理.从网上搜集了一些资料:很多LCD模块都采用了电阻式触摸屏,这些触摸屏等效于将物理位置转

2010-04-21 10:19:00 2581

原创 C专家编程学习笔记(3)

第8章:再论数组1.什么时候数组和指针是相同的C语言标注对此作了如下说明:规则1: 表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针.int a[10], *p, i=2;可以通过以下任何一种方法访问a[i];p = a; p[i];p = a; *(p+a);p = a + i; *p在表达式中,指针和数组是可以互换的,因为它们在编译器里的最终形式都是指针,并且都可以进行

2010-04-19 14:48:00 834

原创 Windows CE LCD显示驱动简析(2)(基于WinCE5.0 SMDK2410 BSP的LCD显示设备驱动)

现在就来看看我们需要实现的GPE继承类S3C2410DISP.在ddi_if_cpp(/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/DISPLAY/GPE)实现了一个SafeGetGPE函数,其代码如下:GPE *SafeGetGPE( HANDLE hDriver ){ GPE * pGPE = NULL; __try

2010-04-16 09:22:00 3072

IAR_uCOS-II_SMARTARM2200_uCFS_SD

uCFS1.34在SD卡上的移植,平台为SMARTARM2200,开发环境IAR5.3

2009-11-06

IAR_uCOSII_SMARTARM2200_LwIP1.2

LwIP1.2在SMARTARM2200的移植,IAR5.3下的工程

2009-09-14

IAR_uCOSII_SmartARM2200_ZLGGUI

SMARTARM2200中的ZLG-GUI从ADS移植到IAR5.3下,包括ZLG-GUI源代码及LCD测试任务

2009-08-24

IAR_uCOSII_SMARTARM2200_ZLGTCPIP

ZLG-TCPIP协议栈在IAR5.3下的移植,基于uCOSII2.86,硬件为SMARTARM2200,包括ZLG-TCPIP源代码及TCP,UDP测试任务

2009-08-05

IAR_uCOSII_SMARTARM2200

uCOSII2.86在SMARTARM2200上基于IAR5.3下的工程,包括uCOSII移植和测试任务代码,由ZLG ADS下工程及Micrium2148的IAR例子修改而成

2009-07-13

SmartARM2200开发板配套光盘实验代码

SmartARM2200SmartARM2200开发板配套光盘实验代码,包括基础实验,基于uCOS-II的基础实验,基于uCOS-II的综合实验,开发板出厂编程程序等。由于原光盘中uCLinux部分文件太大没有包括

2009-06-24

NBOOT(2410 2440).rar

NBOOT-用以在s3c2410开发板上引导NandFlash(我用的是K9F1208 64M)中的bootloader或操作系统镜像(如CE Image),我用的板子是GEC2410 其中NBoot_2410采用直接复制NandFlash中的image NBoot_2410(Eboot)用以引导EBoot,Eboot存于Sector 2,大小256K,具体参数可以修改 NBoot_2410(toc)可以引导Eboot或者CE Image,但需要Toc结构事先存在NandFlash Sector 1中

2008-09-11

uCOS_projects-2.rar

整理了一下uCOS-II的相关资源,里面包含了uCOS2.86(VC6/2003) uC/TCPIP(VC2003/05)等在windows上的模拟例子,还有Wsim的一个模拟工程,供参考

2008-07-22

uCOS-projects-1.rar

整理了一下uCOS-II的相关资源,里面包含了uC/FS,uC/GUI在windows上的demo例子

2008-07-22

uCOS-II Souce Code

整理了一下uCOS-II的相关资源,里面包含了2.52 2.76 2.86 uC/FS uC/GUI uC/TCPIP shell的源代码供参考

2008-07-22

《嵌入式实时操作系统uCOS-II》(第二版).part6.rar

因文件较大,分卷压缩成6个文件<br>《嵌入式实时操作系统uCOS-II》(第二版).pdf<br>MicroC/OS The Real-Time Kernel Second Edition<br>Jean J. Labrosse著 邵贝贝等译

2008-07-10

《嵌入式实时操作系统uCOS-II》(第二版).part5.rar

因文件较大,分卷压缩成6个文件<br>《嵌入式实时操作系统uCOS-II》(第二版).pdf<br>MicroC/OS The Real-Time Kernel Second Edition<br>Jean J. Labrosse著 邵贝贝等译

2008-07-10

《嵌入式实时操作系统uCOS-II》(第二版).part4.rar

因文件较大,分卷压缩成6个文件<br>《嵌入式实时操作系统uCOS-II》(第二版).pdf<br>MicroC/OS The Real-Time Kernel Second Edition<br>Jean J. Labrosse著 邵贝贝等译<br>

2008-07-10

《嵌入式实时操作系统uCOS-II》(第二版).part3.rar

因文件较大,分卷压缩成6个文件 《嵌入式实时操作系统uCOS-II》(第二版).pdf MicroC/OS The Real-Time Kernel Second Edition Jean J. Labrosse著 邵贝贝等译

2008-07-10

《嵌入式实时操作系统uCOS-II》(第二版).part2.rar

因文件较大,分卷压缩成6个文件 《嵌入式实时操作系统uCOS-II》(第二版).pdf MicroC/OS The Real-Time Kernel Second Edition Jean J. Labrosse著 邵贝贝等译

2008-07-10

《嵌入式实时操作系统uCOS-II》(第二版).part1.rar

因文件较大,分卷压缩成6个文件 《嵌入式实时操作系统uCOS-II》(第二版).pdf MicroC/OS The Real-Time Kernel Second Edition Jean J. Labrosse著 邵贝贝等译 如嫌下载6个分卷文件麻烦,可以到http://shevsten.qupan.com/1194869.html 或者http://www.pudn.com/downloads119/ebook/detail508157.html下载

2008-07-10

空空如也

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

TA关注的人

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