从0手写自己的Linux x86操作系统

资源简介

《从0手写自己的Linux x86操作系统》

大家好,这是我历时大概两年准备、开发完成的课程。课程采用从0行代码编写的方式,教你如何写一个类似(非相同)Linux 0.11的x86操作系统,从而深入掌握操作系统的工作原理。

资源目录

——/计算机教程QTDLG/10-网易云课堂/085-从0手写自己的Linux x86操作系统/
├──{01}--课前准备  
|   ├──(1.2)--资料下载链接.pdf  795.36kb
|   ├──(1.4)--常见问题.pdf  4.13M
|   ├──[1.1]--课程简介.mp4  35.83M
|   └──[1.3]--资料下载说明.mp4  27.31M
├──{02}--开发环境准备  
|   ├──(2.2)--注意事项(必看!!!).pdf  1.21M
|   ├──[2.1]--开发工具总览.mp4  11.86M
|   ├──[2.3]--Windows平台.mp4  129.27M
|   ├──[2.4]--Linux平台(ubuntu).mp4  74.33M
|   └──[2.5]--Mac平台.mp4  49.44M
├──{03}--前置课(选学,介绍x86保护模式下的编程)  
|   ├──(3.1)--课程说明.pdf  951.42kb
|   ├──[3.10]--进入保护模式(1).mp4  53.83M
|   ├──[3.11]--进入保护模式(2).mp4  66.96M
|   ├──[3.12]--进入保护模式(3).mp4  47.35M
|   ├──[3.13]--打开分页机制(1).mp4  51.86M
|   ├──[3.14]--打开分页机制(2).mp4  52.62M
|   ├──[3.15]--打开分页机制(3).mp4  72.61M
|   ├──[3.16]--开启定时中断(1).mp4  48.73M
|   ├──[3.17]--开启定时中断(2).mp4  50.76M
|   ├──[3.18]--开启定时中断(3).mp4  68.81M
|   ├──[3.19]--切换至低特权级(1).mp4  30.29M
|   ├──[3.20]--切换至低特权级(2).mp4  68.50M
|   ├──[3.21]--切换至低特权级(3).mp4  40.11M
|   ├──[3.22]--两个任务的切换(1).mp4  29.74M
|   ├──[3.23]--两个任务的切换(2).mp4  104.06M
|   ├──[3.24]--两个任务的切换(3).mp4  57.80M
|   ├──[3.25]--增加系统调用(1)..mp4  25.65M
|   ├──[3.26]--增加系统调用(2)..mp4  64.94M
|   ├──[3.27]--增加系统调用(3)..mp4  96.82M
|   ├──[3.28]--使用LDT(1).mp4  57.31M
|   ├──[3.29]--使用LDT(2).mp4  83.82M
|   ├──[3.2]--课程简介.mp4  34.66M
|   ├──[3.30]--使用LDT(3).mp4  16.68M
|   ├──[3.31]--课程总结.mp4  56.56M
|   ├──[3.3]--开发环境安装(与前面部分内容有重复).mp4  47.27M
|   ├──[3.4]--工程组织结构.mp4  20.54M
|   ├──[3.5]--让计算机跑我们的操作系统.mp4  33.29M
|   ├──[3.6]--x86处理器编程模型(1).mp4  41.39M
|   ├──[3.7]--x86处理器编程模型(2).mp4  20.53M
|   ├──[3.8]--加载自己的剩余部分(1).mp4  15.20M
|   └──[3.9]--加载自己的剩余部分(2).mp4  29.26M
├──{04}--引导程序:接管控制权  
|   ├──[4.1]--计算机启动流程简介.mp4  33.30M
|   ├──[4.2]--接管运行控制权.mp4  30.73M
|   ├──[4.3]--创建可引导的启动程序.mp4  53.21M
|   ├──[4.4]--初始化引导程序(1).mp4  19.63M
|   ├──[4.5]--初始化引导程序(2).mp4  14.47M
|   ├──[4.6]--使用BIOS中断显示字符.mp4  16.33M
|   ├──[4.7]--使用BIOS中断读取磁盘.mp4  38.87M
|   ├──[4.8]--进入C语言环境并跳到loader(1).mp4  23.37M
|   └──[4.9]--进入C语言环境并跳到loader(2).mp4  31.44M
├──{05}--加载器loader的实现  
|   ├──[5.10]--创建内核工程.mp4  57.97M
|   ├──[5.11]--向内核传递启动信息(1).mp4  34.63M
|   ├──[5.12]--向内核传递启动信息(2).mp4  38.82M
|   ├──[5.13]--代码段数据段与链接脚本(1).mp4  44.31M
|   ├──[5.14]--代码段数据段与链接脚本(2).mp4  26.71M
|   ├──[5.15]--加载内核映像文件(1).mp4  40.42M
|   ├──[5.16]--加载内核映像文件(2).mp4  83.65M
|   ├──[5.1]--利用内联汇编显示字符串.mp4  53.28M
|   ├──[5.2]--检测内存容量(1).mp4  29.02M
|   ├──[5.3]--检测内存容量(2).mp4  43.90M
|   ├──[5.4]--切换进保护模式(1)-1.mp4  23.45M
|   ├──[5.5]--切换进保护模式(1)-2.mp4  24.78M
|   ├──[5.6]--切换进保护模式(1)-3.mp4  22.29M
|   ├──[5.7]--切换进保护模式(2)-1.mp4  23.24M
|   ├──[5.8]--切换进保护模式(2)-2.mp4  31.36M
|   └──[5.9]--使用LBA模式读取磁盘.mp4  51.81M
├──{06}--中断与异常处理  
|   ├──[6.10]--捕获除0异常(2).mp4  36.12M
|   ├──[6.11]--解析异常栈信息(1).mp4  24.91M
|   ├──[6.12]--解析异常栈信息(2).mp4  39.68M
|   ├──[6.13]--利用宏重用异常处理代码(1).mp4  39.42M
|   ├──[6.14]--利用宏重用异常处理代码(2).mp4  43.79M
|   ├──[6.15]--处理其它类型的异常(1).mp4  34.56M
|   ├──[6.16]--处理其它类型的异常(2).mp4  67.82M
|   ├──[6.17]--初始化中断控制器(1).mp4  31.58M
|   ├──[6.18]--初始化中断控制器(2).mp4  49.38M
|   ├──[6.19]--中断的打开与关闭.mp4  23.23M
|   ├──[6.1]--创建GDT表及其表项(1).mp4  37.00M
|   ├──[6.20]--启动定时器并开中断(1).mp4  18.74M
|   ├──[6.21]--启动定时器并开中断(2).mp4  46.48M
|   ├──[6.22]--启动定时器并开中断(3).mp4  39.43M
|   ├──[6.2]--创建GDT表及其表项(2).mp4  51.09M
|   ├──[6.3]--保护模式下的内存管理简介.mp4  41.88M
|   ├──[6.4]--重新加载GDT(1).mp4  77.72M
|   ├──[6.5]--重新加载GDT(2).mp4  45.15M
|   ├──[6.6]--触发异常与异常简介.mp4  20.69M
|   ├──[6.7]--添加中断门描述符.mp4  35.98M
|   ├──[6.8]--初始化IDT表.mp4  29.85M
|   └──[6.9]--捕获除0异常(1).mp4  42.31M
├──{07}--日志与printf格式化输出  
|   ├──[7.10]--在异常处理程序中打印信息..mp4  43.45M
|   ├──[7.11]--利用assert辅助调试.mp4  50.67M
|   ├──[7.1]--创建日志输出接口.mp4  38.57M
|   ├──[7.2]--实现基本的信息输出.mp4  50.95M
|   ├──[7.3]--实现基本的信息输出(1).mp4  13.07M
|   ├──[7.4]--实现基本的信息输出(2).mp4  37.94M
|   ├──[7.5]--若干字符串和内存操作函数实现.mp4  46.63M
|   ├──[7.6]--实现字符串的格式化输出(1).mp4  49.34M
|   ├──[7.7]--实现字符串的格式化输出(2).mp4  22.24M
|   ├──[7.8]--支持整数的格式化(1).mp4  38.88M
|   └──[7.9]--支持整数的格式化(2).mp4  40.20M
├──{08}--实现简单的进程切换  
|   ├──[8.10]--另一种任务切换方法(1).mp4  35.31M
|   ├──[8.11]--另一种任务切换方法(2).mp4  44.86M
|   ├──[8.1]--创建两个小任务.mp4  24.64M
|   ├──[8.2]--添加任务状态段(1).mp4  33.80M
|   ├──[8.3]--添加任务状态段(2).mp4  28.44M
|   ├──[8.4]--任务的简单初始化(1).mp4  29.14M
|   ├──[8.5]--任务的简单初始化(2)-1.mp4  25.65M
|   ├──[8.6]--任务的简单初始化(2)-2.mp4  45.73M
|   ├──[8.7]--简单双任务相互切换(1).mp4  19.13M
|   ├──[8.8]--简单双任务相互切换(2).mp4  47.18M
|   └──[8.9]--简单双任务相互切换(3).mp4  29.91M
├──{09}--实现链表数据结构  
|   ├──[9.1]--定义结点和链表.mp4  47.24M
|   ├──[9.2]--实现链表的查询函数.mp4  13.77M
|   ├──[9.3]--链表的两种插入.mp4  36.74M
|   ├──[9.4]--链表的两种删除.mp4  45.12M
|   ├──[9.5]--获取结点所在的结构(1).mp4  10.26M
|   └──[9.6]--获取结点所在的结构(2).mp4  40.90M
├──{10}--进程的管理与延时  
|   ├──[10.10]--让所有进程都能延时.mp4  45.60M
|   ├──[10.1]--添加任务管理器.mp4  48.49M
|   ├──[10.2]--将任务加入就绪队列.mp4  37.90M
|   ├──[10.3]--进程主动放弃CPU.mp4  45.29M
|   ├──[10.4]--让进程按时间片运行(1).mp4  8.50M
|   ├──[10.5]--让进程按时间片运行(2).mp4  43.62M
|   ├──[10.6]--临界资源及简单的保护(1).mp4  20.47M
|   ├──[10.7]--临界资源及简单的保护(2).mp4  32.09M
|   ├──[10.8]--临界资源及简单的保护(3).mp4  24.02M
|   └──[10.9]--让进程能够延时运行.mp4  68.76M
├──{11}--进程间的同步与互斥  
|   ├──[11.1]--计数信号量及其初始化.mp4  31.80M
|   ├──[11.2]--发送和等待信号.mp4  33.19M
|   ├──[11.3]--使用计数信号量.mp4  39.98M
|   ├──[11.4]--互斥锁及其初始化.mp4  16.63M
|   ├──[11.5]--互斥锁的加解锁.mp4  28.65M
|   └──[11.6]--应用互斥锁.mp4  30.98M
├──{12}--虚拟内存管理和保护模式  
|   ├──[12.10]--内存分页机制介绍.mp4  24.74M
|   ├──[12.11]--开启内存分页机制(1).mp4  26.91M
|   ├──[12.12]--开启内存分页机制(2)-1.mp4  14.82M
|   ├──[12.13]--开启内存分页机制(2)-2.mp4  41.63M
|   ├──[12.14]--开启内存分页机制(2)-3.mp4  20.70M
|   ├──[12.15]--创建内核页表(1)-建立映射表(1).mp4  16.52M
|   ├──[12.16]--创建内核页表(1)-建立映射表(2).mp4  47.46M
|   ├──[12.17]--创建内核页表(2)-页目录和页表结构.mp4  50.76M
|   ├──[12.18]--创建内核页表(3)-建立映射表(1).mp4  22.05M
|   ├──[12.19]--创建内核页表(3)-建立映射表(2).mp4  49.96M
|   ├──[12.1]--内存管理问题.mp4  36.71M
|   ├──[12.20]--创建内核页表(3)-建立映射表(3).mp4  50.14M
|   ├──[12.21]--创建内核页表(4)-添加权限处理.mp4  38.22M
|   ├──[12.22]--为进程创建页表(1).mp4  26.00M
|   ├──[12.23]--为进程创建页表(2).mp4  76.70M
|   ├──[12.2]--位图数据结构与初始化.mp4  28.70M
|   ├──[12.3]--位图位的分配(1).mp4  6.02M
|   ├──[12.4]--位图位的分配(2).mp4  39.39M
|   ├──[12.5]--创建地址分配结构(1).mp4  24.85M
|   ├──[12.6]--创建地址分配结构(2).mp4  33.75M
|   ├──[12.7]--规划内存空间的分配(1).mp4  8.22M
|   ├──[12.8]--规划内存空间的分配(2).mp4  34.45M
|   └──[12.9]--规划内存空间的分配(3).mp4  33.51M
├──{13}--隔离操作系统与进程  
|   ├──[13.10]--为进程添加特权级0的栈空间.mp4  86.38M
|   ├──[13.1]--隔离操作系统与进程(1)-代码分离.mp4  75.22M
|   ├──[13.2]--隔离操作系统与进程(2)-地址分离.mp4  71.44M
|   ├──[13.3]--隔离操作系统与进程(3)-搬运代码.mp4  70.92M
|   ├──[13.4]--调整应用的特权级(1).mp4  36.70M
|   ├──[13.5]--调整应用的特权级(2).mp4  45.17M
|   ├──[13.6]--调整异常处理函数(1).mp4  37.10M
|   ├──[13.7]--调整异常处理函数(2).mp4  78.30M
|   ├──[13.8]--修改空闲任务的特权级.mp4  28.52M
|   └──[13.9]--切换至应用进程的特权级为最低.mp4  54.78M
├──{14}--建立系统调用  
|   ├──[14.1]--创建调用门.mp4  60.44M
|   ├──[14.2]--实现系统调用的调用和返回(1).mp4  56.26M
|   ├──[14.3]--实现系统调用的调用和返回(2).mp4  26.67M
|   ├──[14.4]--实现msleep系统调用(1).mp4  54.18M
|   ├──[14.5]--实现msleep系统调用(2).mp4  19.43M
|   ├──[14.6]--实现getid系统调用.mp4  63.59M
|   ├──[14.7]--实现pint_msg调用.mp4  22.85M
|   └──[14.8]--使用int$0x80实现系统调用.mp4  62.82M
├──{15}--新进程的加载与创建  
|   ├──[15.10]--实现exec系统调用(6)-为进程传递参数(1).mp4  19.87M
|   ├──[15.11]--实现exec系统调用(6)-为进程传递参数(2).mp4  110.61M
|   ├──[15.12]--添加sys_yield()系统调用.mp4  55.20M
|   ├──[15.1]--实现fork系统调用(1)-添加调用接口.mp4  38.38M
|   ├──[15.2]--实现fork系统调用(2)-分配任务块.mp4  33.19M
|   ├──[15.3]--实现fork系统调用(3)-初始化任务块.mp4  121.47M
|   ├──[15.4]--实现fork系统调用(4)-复制进程地址空间.mp4  107.83M
|   ├──[15.5]--实现exec系统调用(1)-创建一个空应用.mp4  69.54M
|   ├──[15.6]--实现exec系统调用(2)-增加空的exec调用.mp4  25.02M
|   ├──[15.7]--实现exec系统调用(3)-添加虚似文件访问接口.mp4  78.75M
|   ├──[15.8]--实现exec系统调用(4)-解析并加载elf文件.mp4  144.17M
|   └──[15.9]--实现exec系统调用(5)-分配栈并进入进程执行.mp4  62.42M
├──{16}--使用c标准库中的printf输出  
|   ├──[16.1]--增加文件系统调用(1).mp4  77.62M
|   ├──[16.2]--增加文件系统调用(2).mp4  32.85M
|   ├──[16.3]--导入newlibc并调用printf.mp4  70.67M
|   ├──[16.4]--为malloc实现sys_brk调用(1).mp4  8.94M
|   ├──[16.5]--为malloc实现sys_brk调用(2).mp4  114.52M
|   └──[16.6]--简单的printf调用实现.mp4  33.85M
├──{17}--使用控制台与键盘进行输入输出  
|   ├──[17.10]--键盘初始化.mp4  44.86M
|   ├──[17.11]--借助按键映射表进行键值转换(1).mp4  29.85M
|   ├──[17.12]--借助按键映射表进行键值转换(2).mp4  80.06M
|   ├──[17.13]--处理caplock键.mp4  43.37M
|   ├──[17.14]--处理其它特殊功能键.mp4  55.95M
|   ├──[17.1]--控制台简介与初始化(1).mp4  24.67M
|   ├──[17.2]--控制台简介与初始化(2).mp4  41.97M
|   ├──[17.3]--在控制台上显示字符串.mp4  83.54M
|   ├──[17.4]--处理换行和清屏.mp4  91.87M
|   ├──[17.5]--设置光标并重定向日志输出到显示器.mp4  47.15M
|   ├──[17.6]--有趣的转义字符串以及删除字符.mp4  46.84M
|   ├──[17.7]--保存并恢复光标位置.mp4  94.33M
|   ├──[17.8]--更新显示字体的颜色.mp4  91.49M
|   └──[17.9]--移动光标位置及清屏.mp4  66.53M
├──{18}--设备管理与文件系统  
|   ├──[18.10]--打开tty设备并向其写入数据.mp4  86.72M
|   ├──[18.11]--从tty读取键值字符串并显示.mp4  94.59M
|   ├──[18.12]--打开标准输出及错误输出文件.mp4  63.90M
|   ├──[18.13]--允许切换tty窗口(1).mp4  9.34M
|   ├──[18.14]--允许切换tty窗口(2).mp4  83.07M
|   ├──[18.15]--为每个tty窗口创建进程并保护.mp4  66.32M
|   ├──[18.1]--设备管理框架简介.mp4  37.49M
|   ├──[18.2]--增加tty设备.mp4  26.59M
|   ├──[18.3]--实现dev层接口操作.mp4  54.24M
|   ├──[18.4]--为tty设备添加结构描述.mp4  36.78M
|   ├──[18.5]--实现tty设备的打开.mp4  51.59M
|   ├──[18.6]--通过tty设备写显示数据(1).mp4  18.06M
|   ├──[18.7]--通过tty设备写显示数据(2).mp4  101.97M
|   ├──[18.8]--文件系统简介及初始化.mp4  43.63M
|   └──[18.9]--为进程添加文件打开表.mp4  30.80M
├──{19}--实现一个命令行解释器  
|   ├──[19.1]--初始化命令行解释器.mp4  66.29M
|   ├──[19.2]--实现help命令的解析.mp4  79.74M
|   ├──[19.3]--执行echo命令并给输出加点颜色(1).mp4  52.66M
|   ├──[19.4]--执行echo命令并给输出加点颜色(2).mp4  57.08M
|   ├──[19.5]--为进程增加exit接口.mp4  69.83M
|   ├──[19.6]--为进程增加wait接口(1).mp4  39.38M
|   ├──[19.7]--为进程增加wait接口(2).mp4  77.26M
|   ├──[19.8]--为进程增加wait接口(3).mp4  22.60M
|   └──[19.9]--让子进程继承父进程已打开的文件.mp4  51.66M
├──{20}--使用文件系统管理硬件设备  
|   ├──[20.1]--描述一个文件系统.mp4  57.79M
|   ├──[20.2]--挂载设备文件系统(1).mp4  12.49M
|   ├──[20.3]--挂载设备文件系统(2).mp4  41.04M
|   ├──[20.4]--挂载设备文件系统(3).mp4  72.58M
|   ├──[20.5]--打开devtty0文件(1)-只打开devfs中的文件.mp4  108.45M
|   ├──[20.6]--打开devtty0文件(2)-更通用的打开方式.mp4  74.19M
|   └──[20.7]--往devtty0读写数据.mp4  77.43M
├──{21}--磁盘与fat16文件系统  
|   ├──[21.10]--实现磁盘的读取和写入(2).mp4  42.61M
|   ├──[21.11]--FAT16文件系统简介(1).mp4  40.31M
|   ├──[21.12]--FAT16文件系统简介(2).mp4  39.79M
|   ├──[21.13]--挂载FAT16文件系统(1).mp4  58.55M
|   ├──[21.14]--挂载FAT16文件系统(2).mp4  58.17M
|   ├──[21.15]--挂载FAT16文件系统(3).mp4  36.75M
|   ├──[21.16]--遍历目录命令ls的实现(1)-添加系统调用接口.mp4  63.74M
|   ├──[21.17]--遍历目录命令ls的实现(2)-列出虚假的目录内容.mp4  61.19M
|   ├──[21.18]--遍历目录命令ls的实现(3)-列出真实的目录内容(1).mp4  39.48M
|   ├──[21.19]--遍历目录命令ls的实现(3)-列出真实的目录内容(2).mp4  41.50M
|   ├──[21.1]--磁盘基本特性简介.mp4  47.88M
|   ├──[21.20]--遍历目录命令ls的实现(3)-列出真实的目录内容(3).mp4  82.70M
|   ├──[21.21]--文件查看命令less的实现(1)-打开文件.mp4  90.89M
|   ├──[21.22]--文件查看命令less的实现(2)-显示部分文件内容.mp4  80.79M
|   ├──[21.23]--文件查看命令less的实现(3)-显示全部文件内容.mp4  68.60M
|   ├──[21.24]--文件查看命令less的实现(4)-逐行显示文件内容.mp4  87.78M
|   ├──[21.25]--通过文件系统加载shell.mp4  82.59M
|   ├──[21.26]--让shell加载应用程序运行.mp4  62.10M
|   ├──[21.27]--应用运行异常时强制中断运行.mp4  47.13M
|   ├──[21.28]--文件复制命令cp的实现(1)-创建新文件.mp4  87.04M
|   ├──[21.29]--文件复制命令cp的实现(2)-删除文件.mp4  68.50M
|   ├──[21.2]--识别系统中已有的磁盘(1).mp4  16.97M
|   ├──[21.30]--文件复制命令cp的实现(3)-文件写入(1).mp4  67.03M
|   ├──[21.31]--文件复制命令cp的实现(4)-文件写入(2).mp4  109.52M
|   ├──[21.32]--最后的调整.mp4  40.56M
|   ├──[21.3]--识别系统中已有的磁盘(2).mp4  27.68M
|   ├──[21.4]--识别系统中已有的磁盘(3).mp4  41.26M
|   ├──[21.5]--识别系统中已有的磁盘(4).mp4  55.47M
|   ├──[21.6]--解析磁盘分区表(1).mp4  13.69M
|   ├──[21.7]--解析磁盘分区表(2).mp4  75.76M
|   ├──[21.8]--增加磁盘设备管理.mp4  66.42M
|   └──[21.9]--实现磁盘的读取和写入(1).mp4  67.06M
└──{22}--课程总结  
|   └──[22.1]--设计总结.mp4  35.27M

资源下载

抱歉,只有登录并在本文发表评论才能阅读隐藏内容,切记不要恶意刷,否则会被限制,先阅读用户规则,一旦进入黑名单,不可能再放出来。同时注意,暂停在线支付,请联系客服QQ2441105221。
  1. qq1069说道:

    感谢分享

  2. 嘿嘿嘿说道:

    学习一下

  3. 灰格说道:

    :biggrin: 学一下

  4. Explore说道:

    学习

  5. jackwei说道:

    哇学习学习

  6. 姜红苕说道:

    感谢分享

  7. 洛玖说道:

    感谢分享

  8. xzf164说道:

    :biggrin: :biggrin: :biggrin: :biggrin: 感谢分享

  9. gujinfeng说道:

    感谢分享

  10. icaner说道:

    感谢分享

  11. ruyi88说道:

    学习

  12. dran说道:

    感谢分享

  13. 岚风13说道:

    感谢分享

  14. 小王说道:

    学习

  15. 季秋说道:

    学习一下!

  16. keke125077说道:

    学习一下

  17. 圣ASD说道:

    感谢分享

  18. youngNe说道:

    学习学习

  19. yhm说道:

    感谢分享

  20. 175826说道:

    实现OS

  21. hello-world-123说道:

    感谢分享

  22. admin1说道:

    感谢分享

  23. iAmClever说道:

    感谢分享

  24. evan11说道:

    学习诶下诶

  25. 寒云衣说道:

    :razz: 狠狠地学

  26. xinxin说道:

    感谢

  27. sanqian921说道:

    感谢

  28. lcxsdhr3说道:

    感谢分享

  29. thex说道:

    感谢分享,看看如何手写OS。

  30. CRACKRAMMER说道:

    感谢分享

  31. 说道:

    了解一下

  32. zeand说道:

    非常好的学习资料呢。

  33. youngfutao说道:

    :evil: :evil: :evil: 学习一下

  34. jj1165922611说道:

    学习

  35. zswit说道:

    非常好的学习资料呢。

  36. uc说道:

    感谢分享

  37. uc说道:

    感谢分享

  38. AA说道:

    感谢分享

  39. shenchao说道:

    感谢分享

  40. 绯红暗炎说道:

    感谢分享

  41. hemiao3000说道:

    非常好的学习资料呢。

  42. yuanql210说道:

    感谢分享

  43. 海星说道:

    感谢分享

1 4 5 6

发表回复