当前位置:   article > 正文

VSCode 调试 Linux内核_vscode kgdb

vscode kgdb
  • 内核和gdb在虚拟机上,为了可以图形化方面查看调试,Windows上使用VSCode 
  • 目前环境配置:Host Ubuntu 20.04,Target aarch64,Kernel 4.12,Qemu 4.2.1

1、虚拟机安装工具

sudo apt-get install gcc-aarch64-linux-gnu build-essential libncurses5-dev gdb-multiarch qemu-system-arm

2、编译 busybox

  • 下载 busybox 源码进行编译文件系统,把编译好的busybox拷贝到 Kernel 4.12源码中的 _install 目录下

3、编译内核

  • 1. 下载 Kernel 4.12 源码到虚拟机上,文章编译目标是 aarch64
  • 2. 内核交叉编译需要环境变量准备
  1. export ARCH=arm64
  2. export CROSS_COMPILE=aarch64-linux-gnu-
  • 3. 进入内核目录下 使用 默认的 aarch64配置
    • make defconfig 生成一个默认的 .config文件
make defconfig
  • 4. 修改内核配置 make menuconfig
  1. # initramfs目录修改,即要打包文件系统目录名,这里是_install
  2. # General setup --->
  3. # [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
  4. # (_install) Initramfs source file(s)
  5. # 删除默认的启动参数
  6. # Boot options --->
  7. # () Default kernel command string
  8. # 调整地址总线长度为48位
  9. # Kernel Features --->
  10. # Page size (4KB) --->
  11. # Virtual address space size (48-bit) --->
  12. # 内核编译加入调试信息,一定要选上
  13. # Kernel hacking --->
  14. # Compile-time checks and compiler options --->
  15. # [*] Compile the kernel with debug info
  • 5.  修改后编译,make -j8 ,速度取决你的配置 不多说,一般需要个20分钟左右
  • 编译后两个文件注意:
    • linux-4.12/arch/arm64/boot/Image  没有调试信息内核文件
    • linux-4.12/vmlinux 有调试信息内核文件(较大)

4、调试前测试

  • 根据自己及其状态,修改内存、cpu等参数
  • 下面代码可以自己写一个脚本 如 run_qemu.sh
  1. #!/usr/bin/bash
  2. qemu-system-aarch64 -machine virt -cpu cortex-a57 \
  3. -nographic -smp 4 -m 2048 \
  4. -kernel Image -append "rdinit=/linuxrc console=ttyAMA0"
  • 这里给出运行后进入文件系统shell下 示例
  1. yexiang@think-pc:<aarch64>$ ./run_qemu.sh
  2. [ 0.000000] Booting Linux on physical CPU 0x0
  3. [ 0.000000] Linux version 4.12.14 (ssji@lenovo) (gcc version 8.4.0 (Ubuntu/Linaro 8.4.0-3ubuntu1) ) #1 SMP PREEMPT Sun May 9 14:30:08 CST 2021
  4. [ 0.000000] Boot CPU: AArch64 Processor [411fd070]
  5. [ 0.000000] Machine model: linux,dummy-virt
  6. [ 0.000000] efi: Getting EFI parameters from FDT:
  7. [ 0.000000] efi: UEFI not found.
  8. [ 0.000000] cma: Reserved 16 MiB at 0x00000000bf000000
  9. [ 0.000000] NUMA: No NUMA configuration found
  10. [ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x00000000bfffffff]
  11. [ 0.000000] NUMA: Adding memblock [0x40000000 - 0xbfffffff] on node 0
  12. [ 0.000000] NUMA: Initmem setup node 0 [mem 0x40000000-0xbfffffff]
  13. [ 0.000000] NUMA: NODE_DATA [mem 0xbefe8b00-0xbefea5ff]
  14. [ 0.000000] Zone ranges:
  15. [ 0.000000] DMA [mem 0x0000000040000000-0x00000000bfffffff]
  16. [ 0.000000] Normal empty
  17. [ 0.000000] Movable zone start for each node
  18. [ 0.000000] Early memory node ranges
  19. [ 0.000000] node 0: [mem 0x0000000040000000-0x00000000bfffffff]
  20. [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x00000000bfffffff]
  21. [ 0.000000] psci: probing for conduit method from DT.
  22. [ 0.000000] psci: PSCIv0.2 detected in firmware.
  23. [ 0.000000] psci: Using standard PSCI v0.2 function IDs
  24. [ 0.000000] psci: Trusted OS migration not required
  25. [ 0.000000] percpu: Embedded 24 pages/cpu @ffff80007efb5000 s59800 r8192 d30312 u98304
  26. [ 0.000000] Detected PIPT I-cache on CPU0
  27. [ 0.000000] CPU features: enabling workaround for ARM erratum 832075
  28. [ 0.000000] CPU features: enabling workaround for ARM erratum 834220
  29. [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 516096
  30. [ 0.000000] Policy zone: DMA
  31. [ 0.000000] Kernel command line: rdinit=/linuxrc console=ttyAMA0
  32. [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
  33. [ 0.000000] Memory: 2027968K/2097152K available (8892K kernel code, 1102K rwdata, 5992K rodata, 2240K init, 401K bss, 52800K reserved, 16384K cma-reserved)
  34. [ 0.000000] Virtual kernel memory layout:
  35. [ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
  36. [ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
  37. [ 0.000000] .text : 0xffff000008080000 - 0xffff000008930000 ( 8896 KB)
  38. [ 0.000000] .rodata : 0xffff000008930000 - 0xffff000008f10000 ( 6016 KB)
  39. [ 0.000000] .init : 0xffff000008f10000 - 0xffff000009140000 ( 2240 KB)
  40. [ 0.000000] .data : 0xffff000009140000 - 0xffff000009253a00 ( 1103 KB)
  41. [ 0.000000] .bss : 0xffff000009253a00 - 0xffff0000092b80b4 ( 402 KB)
  42. [ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
  43. [ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
  44. [ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
  45. [ 0.000000] 0xffff7e0000000000 - 0xffff7e0002000000 ( 32 MB actual)
  46. [ 0.000000] memory : 0xffff800000000000 - 0xffff800080000000 ( 2048 MB)
  47. [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
  48. [ 0.000000] Preemptible hierarchical RCU implementation.
  49. [ 0.000000] RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=2.
  50. [ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
  51. [ 0.000000] NR_IRQS:64 nr_irqs:64 0
  52. [ 0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
  53. [ 0.000000] arch_timer: cp15 timer(s) running at 62.50MHz (virt).
  54. [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
  55. [ 0.000209] sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns
  56. [ 0.009126] Console: colour dummy device 80x25
  57. [ 0.011416] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000)
  58. [ 0.011594] pid_max: default: 32768 minimum: 301
  59. [ 0.013171] Security Framework initialized
  60. [ 0.015443] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
  61. [ 0.021669] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
  62. [ 0.024714] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
  63. [ 0.024868] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes)
  64. [ 0.153895] ASID allocator initialised with 65536 entries
  65. [ 0.249592] EFI services will not be available.
  66. [ 0.411219] smp: Bringing up secondary CPUs ...
  67. [ 0.820675] Detected PIPT I-cache on CPU1
  68. [ 0.821393] CPU1: Booted secondary processor [411fd070]
  69. [ 0.824500] smp: Brought up 1 node, 2 CPUs
  70. [ 0.824581] SMP: Total of 2 processors activated.
  71. [ 0.825076] CPU features: detected feature: 32-bit EL0 Support
  72. [ 0.828533] CPU: All CPU(s) started at EL1
  73. [ 0.829238] alternatives: patching kernel code
  74. [ 0.889558] devtmpfs: initialized
  75. [ 0.899109] DMI not present or invalid.
  76. [ 0.900367] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
  77. [ 0.900637] futex hash table entries: 512 (order: 4, 65536 bytes)
  78. [ 0.903859] pinctrl core: initialized pinctrl subsystem
  79. [ 0.965044] NET: Registered protocol family 16
  80. [ 1.033952] cpuidle: using governor menu
  81. [ 1.039365] vdso: 2 pages (1 code @ ffff000008937000, 1 data @ ffff000009145000)
  82. [ 1.039684] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
  83. [ 1.098071] DMA: preallocated 256 KiB pool for atomic allocations
  84. [ 1.119816] Serial: AMBA PL011 UART driver
  85. [ 1.178089] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 39, base_baud = 0) is a PL011 rev1
  86. [ 1.192223] console [ttyAMA0] enabled
  87. [ 1.354242] HugeTLB registered 2 MB page size, pre-allocated 0 pages
  88. [ 1.363437] ACPI: Interpreter disabled.
  89. [ 1.384287] vgaarb: loaded
  90. [ 1.386800] SCSI subsystem initialized
  91. [ 1.399828] usbcore: registered new interface driver usbfs
  92. [ 1.400767] usbcore: registered new interface driver hub
  93. [ 1.401663] usbcore: registered new device driver usb
  94. [ 1.404212] pps_core: LinuxPPS API ver. 1 registered
  95. [ 1.404736] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
  96. [ 1.405590] PTP clock support registered
  97. [ 1.406812] dmi: Firmware registration failed.
  98. [ 1.408783] Advanced Linux Sound Architecture Driver Initialized.
  99. [ 1.433257] clocksource: Switched to clocksource arch_sys_counter
  100. [ 1.437196] VFS: Disk quotas dquot_6.6.0
  101. [ 1.438664] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
  102. [ 1.441856] pnp: PnP ACPI: disabled
  103. [ 1.507206] NET: Registered protocol family 2
  104. [ 1.518610] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
  105. [ 1.519608] TCP bind hash table entries: 16384 (order: 6, 262144 bytes)
  106. [ 1.520332] TCP: Hash tables configured (established 16384 bind 16384)
  107. [ 1.522443] UDP hash table entries: 1024 (order: 3, 32768 bytes)
  108. [ 1.527777] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
  109. [ 1.546594] NET: Registered protocol family 1
  110. [ 1.559255] RPC: Registered named UNIX socket transport module.
  111. [ 1.559919] RPC: Registered udp transport module.
  112. [ 1.560111] RPC: Registered tcp transport module.
  113. [ 1.560228] RPC: Registered tcp NFSv4.1 backchannel transport module.
  114. [ 1.776013] hw perfevents: enabled with armv8_pmuv3 PMU driver, 5 counters available
  115. [ 1.780724] kvm [1]: HYP mode not available
  116. [ 1.817828] audit: initializing netlink subsys (disabled)
  117. [ 1.848104] audit: type=2000 audit(0.914:1): state=initialized audit_enabled=0 res=1
  118. [ 1.850627] workingset: timestamp_bits=44 max_order=19 bucket_order=0
  119. [ 1.963242] squashfs: version 4.0 (2009/01/31) Phillip Lougher
  120. [ 2.012842] NFS: Registering the id_resolver key type
  121. [ 2.018538] Key type id_resolver registered
  122. [ 2.019158] Key type id_legacy registered
  123. [ 2.020421] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
  124. [ 2.029638] 9p: Installing v9fs 9p2000 file system support
  125. [ 2.076946] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
  126. [ 2.077410] io scheduler noop registered
  127. [ 2.078275] io scheduler cfq registered (default)
  128. [ 2.078434] io scheduler mq-deadline registered
  129. [ 2.078587] io scheduler kyber registered
  130. [ 2.125385] pl061_gpio 9030000.pl061: PL061 GPIO chip @0x0000000009030000 registered
  131. [ 2.141348] OF: PCI: host bridge /pcie@10000000 ranges:
  132. [ 2.144845] OF: PCI: IO 0x3eff0000..0x3effffff -> 0x00000000
  133. [ 2.149004] OF: PCI: MEM 0x10000000..0x3efeffff -> 0x10000000
  134. [ 2.152275] OF: PCI: MEM 0x8000000000..0xffffffffff -> 0x8000000000
  135. [ 2.155441] pci-host-generic 4010000000.pcie: ECAM at [mem 0x4010000000-0x401fffffff] for [bus 00-ff]
  136. [ 2.169474] pci-host-generic 4010000000.pcie: PCI host bridge to bus 0000:00
  137. [ 2.170552] pci_bus 0000:00: root bus resource [bus 00-ff]
  138. [ 2.171042] pci_bus 0000:00: root bus resource [io 0x0000-0xffff]
  139. [ 2.171340] pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff]
  140. [ 2.171693] pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff]
  141. [ 2.183905] pci 0000:00:01.0: BAR 6: assigned [mem 0x10000000-0x1007ffff pref]
  142. [ 2.187256] pci 0000:00:01.0: BAR 4: assigned [mem 0x8000000000-0x8000003fff 64bit pref]
  143. [ 2.191994] pci 0000:00:01.0: BAR 1: assigned [mem 0x10080000-0x10080fff]
  144. [ 2.192440] pci 0000:00:01.0: BAR 0: assigned [io 0x1000-0x101f]
  145. [ 2.243214] virtio-pci 0000:00:01.0: enabling device (0000 -> 0003)
  146. [ 2.246888] xenfs: not registering filesystem on non-xen platform
  147. [ 2.258244] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
  148. [ 2.265352] SuperH (H)SCI(F) driver initialized
  149. [ 2.267566] msm_serial: driver initialized
  150. [ 2.291855] cacheinfo: Unable to detect cache hierarchy for CPU 0
  151. [ 2.360923] loop: module loaded
  152. [ 2.376207] hisi_sas: driver version v1.6
  153. [ 2.408898] libphy: Fixed MDIO Bus: probed
  154. [ 2.409945] tun: Universal TUN/TAP device driver, 1.6
  155. [ 2.468145] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
  156. [ 2.483904] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
  157. [ 2.492937] igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k
  158. [ 2.493821] igb: Copyright (c) 2007-2014 Intel Corporation.
  159. [ 2.495130] igbvf: Intel(R) Gigabit Virtual Function Network Driver - version 2.4.0-k
  160. [ 2.502320] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
  161. [ 2.512974] sky2: driver version 1.30
  162. [ 2.520379] VFIO - User Level meta-driver version: 0.3
  163. [ 2.538213] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
  164. [ 2.539512] ehci-pci: EHCI PCI platform driver
  165. [ 2.541416] ehci-platform: EHCI generic platform driver
  166. [ 2.542212] ehci-orion: EHCI orion driver
  167. [ 2.542953] ehci-exynos: EHCI EXYNOS driver
  168. [ 2.543439] ehci-msm: Qualcomm On-Chip EHCI Host Controller
  169. [ 2.543986] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
  170. [ 2.544343] ohci-pci: OHCI PCI platform driver
  171. [ 2.544911] ohci-platform: OHCI generic platform driver
  172. [ 2.545436] ohci-exynos: OHCI EXYNOS driver
  173. [ 2.547269] usbcore: registered new interface driver usb-storage
  174. [ 2.571334] rtc-pl031 9010000.pl031: rtc core: registered pl031 as rtc0
  175. [ 2.577226] i2c /dev entries driver
  176. [ 2.605723] sdhci: Secure Digital Host Controller Interface driver
  177. [ 2.606011] sdhci: Copyright(c) Pierre Ossman
  178. [ 2.607088] Synopsys Designware Multimedia Card Interface Driver
  179. [ 2.609256] sdhci-pltfm: SDHCI platform and OF driver helper
  180. [ 2.614616] ledtrig-cpu: registered to indicate activity on CPUs
  181. [ 2.620391] usbcore: registered new interface driver usbhid
  182. [ 2.620820] usbhid: USB HID core driver
  183. [ 2.630729] NET: Registered protocol family 17
  184. [ 2.632364] 9pnet: Installing 9P2000 support
  185. [ 2.633092] Key type dns_resolver registered
  186. [ 2.635953] registered taskstats version 1
  187. [ 2.644272] input: gpio-keys as /devices/platform/gpio-keys/input/input0
  188. [ 2.649743] rtc-pl031 9010000.pl031: setting system clock to 2021-06-25 07:23:15 UTC (1624605795)
  189. [ 2.654719] ALSA device list:
  190. [ 2.654912] No soundcards found.
  191. [ 2.658676] uart-pl011 9000000.pl011: no DMA platform data
  192. [ 3.005047] Freeing unused kernel memory: 2240K
  193. Please press Enter to activate this console.
  194. / # ls
  195. bin etc mnt sbin tmp
  196. dev linuxrc proc sys usr
  197. / #
  • 提示:进入qemu中退出 按 ctrl+a 然后再按 x 才能退出去

5、虚拟机中使用 gdb调试

  • 为了调试内核需要让 gdb 与 qemu 关联
  • 调试环境启动Qemu ,下面可以自己写个脚本 如 dbg_qemu.sh 
    • -s: 在1234端口接受GDB调试
    • -S:冻结CPU直到远程GDB输入相应命令
  1. #!/usr/bin/bash
  2. qemu-system-aarch64 -machine virt -cpu cortex-a57 \
  3. -nographic -smp 4 -m 2048 \
  4. -kernel Image -append "rdinit=/linuxrc console=ttyAMA0" -S -s
  • 运行后就会停住

  • 新开一个窗口 启动 gdb 运行步骤如下
  1. $ cd linux-4.12
  2. $ gdb-multiarch vmlinux
  3. (gdb) target remote localhost:1234
  4. (gdb) b start_kernel
  5. (gdb) c
  6. (gdb) layout src
  7. # 可以看到GDB停留在start_kernel处
  • 示例流程如下:
  1. yexiang@think-pc:<linux-4.12>$ gdb-multiarch vmlinux
  2. GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
  3. Copyright (C) 2020 Free Software Foundation, Inc.
  4. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  5. This is free software: you are free to change and redistribute it.
  6. There is NO WARRANTY, to the extent permitted by law.
  7. Type "show copying" and "show warranty" for details.
  8. This GDB was configured as "x86_64-linux-gnu".
  9. Type "show configuration" for configuration details.
  10. For bug reporting instructions, please see:
  11. <http://www.gnu.org/software/gdb/bugs/>.
  12. Find the GDB manual and other documentation resources online at:
  13. <http://www.gnu.org/software/gdb/documentation/>.
  14. For help, type "help".
  15. Type "apropos word" to search for commands related to "word"...
  16. Reading symbols from vmlinux...
  17. (gdb)
  18. (gdb)
  19. (gdb) target remote localhost:1234
  20. Remote debugging using localhost:1234
  21. 0x0000000040000000 in ?? ()
  22. (gdb)
  23. (gdb) b start_kernel
  24. Breakpoint 1 at 0xffff000008f10790: file init/main.c, line 493.
  25. (gdb) c
  26. Continuing.
  27. Thread 1 hit Breakpoint 1, start_kernel () at init/main.c:493
  28. 493 set_task_stack_end_magic(&init_task);
  29. (gdb)
  30. (gdb) layout src
  • layout中调试界面等都不友好,所以下面准备 vscode调试

6、VSCode 图形化调试 kenrel

  • 1. 调试前先看 VSCode 配置远程登入 Remote-SSH 把 VSCode 远程连接虚拟机配置好
  • 2. VSCode 中打开 linux4.2 文件夹 找到 init/main.c ,在 _start_kernel 中打断点

  • 3. 按F5进入调试,VSCode 自动生成 .vscode 并且会提示 修改 launch.json 文件

  • 4. launch.json 文件 修改如下:
  1. {
  2. // 使用 IntelliSense 了解相关属性。
  3. // 悬停以查看现有属性的描述。
  4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "name": "(gdb) 启动",
  9. "type": "cppdbg",
  10. "request": "launch",
  11. // workspaceFolder 是你当前打开文件夹的路径
  12. "program": "${workspaceFolder}/vmlinux",
  13. "args": [],
  14. "stopAtEntry": false,
  15. "cwd": "${workspaceFolder}",
  16. "environment": [],
  17. "externalConsole": false,
  18. "MIMode": "gdb",
  19. // 如果远程登入到linux 服务器上面,路径不用写 /user/bin/gdb-multiarch
  20. "miDebuggerPath": "gdb-multiarch",
  21. "miDebuggerServerAddress": "localhost:1234",
  22. "setupCommands": [
  23. {
  24. "description": "为 gdb 启用整齐打印",
  25. "text": "-enable-pretty-printing",
  26. "ignoreFailures": true
  27. }
  28. ]
  29. }
  30. ]
  31. }
  • 5.  虚拟机运行 dbg_qemu.sh (上面给出的命令)
  • 6.  VSCode 再次 F5 运行

7、可能出现的问题

  • 调试过程中有可能会出现乱跳的现象,主要是内核编译优化导致,默认是 -O2,可查资料修改重编内核,如修改为 -O0  (但是 -O0 编译一般会出现问题,具体原因等有时间再查)
  • 修改的位置 linux4.2/Makefile
  1. ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
  2. KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
  3. KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
  4. else
  5. ifdef CONFIG_PROFILE_ALL_BRANCHES
  6. KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
  7. #KBUILD_CFLAGS += -O0
  8. else
  9. KBUILD_CFLAGS += -O2
  10. #KBUILD_CFLAGS += -O0
  11. endif
  12. endif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/239869
推荐阅读
相关标签
  

闽ICP备14008679号