网络学习管理系统Moodle-3.1.5安装失败

cyberhero 回复了问题 • 3 人关注 • 2 个回复 • 270 次浏览 • 2019-02-15 03:08 • 来自相关话题

请问有没有办法在普通x86_64的Linux下转换成龙芯系统可用的mips64el的.rpm包?

回复

songshuda 发起了问题 • 1 人关注 • 0 个回复 • 44 次浏览 • 2019-02-14 09:38 • 来自相关话题

龍芯派如何使用pwm

回复

cyberhero 发起了问题 • 1 人关注 • 0 个回复 • 92 次浏览 • 2019-02-02 00:09 • 来自相关话题

如何在龍芯派上給1c編譯

jiangtao9999 回复了问题 • 2 人关注 • 3 个回复 • 229 次浏览 • 2019-01-31 17:23 • 来自相关话题

SUSE 的 OBS 还不错,龙芯还不提供一个平台供开发者们使用?

回复

jiangtao9999 发起了问题 • 1 人关注 • 0 个回复 • 74 次浏览 • 2019-01-31 16:25 • 来自相关话题

FC28 for loongson 更新了

water 发表了文章 • 2 个评论 • 129 次浏览 • 2019-01-30 10:13 • 来自相关话题

 下载地址:     http://mirror.lemote.com:8000/fedora/fedora28-live/Fedora28_for_loongson-MATE-Live-2.iso  SHA512:     ...查看全部
 下载地址:
    http://mirror.lemote.com:8000/fedora/fedora28-live/Fedora28_for_loongson-MATE-Live-2.iso
 SHA512:
    http://mirror.lemote.com:8000/fedora/fedora28-live/Fedora28_for_loongson-MATE-Live-2.iso.sha512

主要更新内容说明:
       1、更新软件中心,增加更多软件选择;
       2、java更新,使用JIT加速版本;
       3、内核升级4.19.5-2;
       4、修正samba,Windows文件共享中的文件大小显示正常,不再显示为0字节;
       5、加入异常时间检查及提示;
       6、安装系统强制使用MBR分区方式,解决在部分固件下可能错误的使用GPT分区方式;
       7、安装程序默认选择为中文;
       8、软件仓库中大量更新的软件包等; 

MIPS 指令集发展历史及 MIPS 公司主要产品

water 发表了文章 • 2 个评论 • 133 次浏览 • 2019-01-29 17:25 • 来自相关话题

参考来源: http://crva.io/documents/OpenISA-OpenSourceChip-Report-v1p0.pdf MIPS 指令集 ...查看全部
参考来源: http://crva.io/documents/OpenISA-OpenSourceChip-Report-v1p0.pdf

微信图片_20190129172340.png


MIPS 指令集及架构在 2010 年以后发展迅速,至 2014 年的 5 年时间共发布了 4 个版本,在传统的整数浮点应用指令基础上逐步增加了多线程、 DSP 模块、 SIMD 模块以及虚拟化模块。这也与移动互联网应用的迅速发展时间相吻合,随着应用需求变化, MIPS 指令集以及架构也在迅速发展
 
TIM截图20190129172454.png

 
在 MIPS 指令集发展过程中,基本上严格保持新版本向后兼容的特点。比如MIPS Release5 可以向下兼容之前的所有指令集版本。但在最新发布的 MIPS Release 6 版本中,这种情况发生了变化。这个版本中增加了一些新的指令并对指令集进行了简化,删除了一些不常用的指令,重新排布了指令的编码,空余出了大量的指令槽用于将来的扩展。因此,可以把 MIPSRelease 6 版本看成一个几乎全新的定义。
 
MIPS 公司主要产品
自 2014 年发布 MIPS R6 版本之后, MIPS 公司的 IP Core 产品全面转向 MIPS R6 版本,形成覆盖高中低不同性能和应用需求的 Warrior 产品系列, 而把 R6 之前的产品全部归为 Classic 系列。 Warrior 产品系列又分为 M-Class, I-Class 和
P-Class 三个级别。 这三个级别的产品的特性如表 5 所示。

11212.png

从已有信息来看,自 2014 年 MIPS Release 6 发布以来,除 MIPS 公司自己的 Warrior 产品系列之外, 尚无第二个实现 MIPS Release 6 指令集的芯片。

MIPS 公司对 MIPS 开放计划进行了以下澄清:
1) 此次开放计划仅仅针对 MIPS 指令集的最新版本,即 2014 年发布的Release 6 版本。在开放计划中,并不包含早期版本(即 Release 5 或更早期)。不能把 MIPS 开放计划的授权与早期版本的授权混淆。
2) 如果一个公司开发了一个基于 MIPS 开放计划授权的实现,可以不需要开源这部分代码。
3) 合作伙伴如果加入 MIPS 开发计划并且通过认证,有机会把自己的服务放在 MIPS 开源计划中进行销售。
从以上信息可以知道, MIPS 开放计划并不是开放所有版本的 MIPS 指令集,而仅仅是最新的 MIPS Release 6 版本。从 MIPS Release 6 版本的文档可以知道,该版本并不与早期版本完全兼容,其中的修改甚至包括删除大量不常用指令,将回收的指令槽用于新增加的指令,在一定程度上几乎可以看成是一个全新的指
令集。由此可见, MIPS 开放计划中的 MIPS 指令集的初始生态环境并不乐观。这也是很少有产品采用基于 MIPS Release 6 指令集的 IP Core 的主要原因之一。
 

发现 binutils 龙芯部分重构补丁一个 typo

回复

xen0n 回复了问题 • 1 人关注 • 1 个回复 • 203 次浏览 • 2019-01-20 01:25 • 来自相关话题

龙芯 Linux 内核 VDSO 现状测试

xen0n 发表了文章 • 2 个评论 • 231 次浏览 • 2019-01-13 11:13 • 来自相关话题

好久之前记得龙芯上 VDSO 支持很有问题,前一阵终于获得少量空闲时间,又测了一下,发现还是不行,跑这么一个脚本发现大量 clock_gettime 系统调用。(amd64 上除了用于实现 sleep 的 select 之外没有任何 gettimeofday ...查看全部
好久之前记得龙芯上 VDSO 支持很有问题,前一阵终于获得少量空闲时间,又测了一下,发现还是不行,跑这么一个脚本发现大量 clock_gettime 系统调用。(amd64 上除了用于实现 sleep 的 select 之外没有任何 gettimeofday 或者 clock_gettime 的调用。)
#!/usr/bin/env python3

import time

for i in range(100):
time.sleep(0.01)
_ = time.time()

翻 glibc 源码时候 git log 看到一个叫 vdsotest 的工具,于是弄下来跑了一遍。
 
测试环境:
  
clock-gettime-monotonic: syscall: 409 nsec/callclock-gettime-monotonic:    libc: 476 nsec/callclock-gettime-monotonic:    vdso: 462 nsec/callNote: vDSO version of clock_getres not foundclock-getres-monotonic: syscall: 323 nsec/callclock-getres-monotonic:    libc: 346 nsec/callclock-getres-monotonic:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-monotonic-coarse: syscall: 374 nsec/callclock-gettime-monotonic-coarse:    libc: 115 nsec/callclock-gettime-monotonic-coarse:    vdso: 98 nsec/callpassing UINTPTR_MAX to clock_gettime (VDSO): terminated by unexpected signal 10clock-gettime-monotonic-coarse/abi: 1 failures/inconsistencies encounteredNote: vDSO version of clock_getres not foundclock-getres-monotonic-coarse: syscall: 357 nsec/callclock-getres-monotonic-coarse:    libc: 379 nsec/callclock-getres-monotonic-coarse:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-monotonic-raw: syscall: 406 nsec/callclock-gettime-monotonic-raw:    libc: 455 nsec/callclock-gettime-monotonic-raw:    vdso: 425 nsec/callNote: vDSO version of clock_getres not foundclock-getres-monotonic-raw: syscall: 323 nsec/callclock-getres-monotonic-raw:    libc: 346 nsec/callclock-getres-monotonic-raw:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-tai: syscall: 422 nsec/callclock-gettime-tai:    libc: 472 nsec/callclock-gettime-tai:    vdso: 449 nsec/callNote: vDSO version of clock_getres not foundclock-getres-tai: syscall: 323 nsec/callclock-getres-tai:    libc: 345 nsec/callclock-getres-tai:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-boottime: syscall: 421 nsec/callclock-gettime-boottime:    libc: 471 nsec/callclock-gettime-boottime:    vdso: 450 nsec/callNote: vDSO version of clock_getres not foundclock-getres-boottime: syscall: 324 nsec/callclock-getres-boottime:    libc: 346 nsec/callclock-getres-boottime:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-realtime: syscall: 405 nsec/callclock-gettime-realtime:    libc: 474 nsec/callclock-gettime-realtime:    vdso: 457 nsec/callNote: vDSO version of clock_getres not foundclock-getres-realtime: syscall: 323 nsec/callclock-getres-realtime:    libc: 348 nsec/callclock-getres-realtime:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-realtime-coarse: syscall: 367 nsec/callclock-gettime-realtime-coarse:    libc: 114 nsec/callclock-gettime-realtime-coarse:    vdso: 97 nsec/callpassing UINTPTR_MAX to clock_gettime (VDSO): terminated by unexpected signal 10clock-gettime-realtime-coarse/abi: 1 failures/inconsistencies encounteredNote: vDSO version of clock_getres not foundclock-getres-realtime-coarse: syscall: 357 nsec/callclock-getres-realtime-coarse:    libc: 379 nsec/callclock-getres-realtime-coarse:    vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundNote: vDSO version of getcpu not foundgetcpu: syscall: 274 nsec/callgetcpu:    libc: 287 nsec/callgetcpu:    vdso: not testedNote: vDSO version of getcpu not foundNote: vDSO version of getcpu not foundgettimeofday: syscall: 406 nsec/callgettimeofday:    libc: 455 nsec/callgettimeofday:    vdso: 440 nsec/callgettimeofday(valid, UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1gettimeofday(valid, UINTPTR_MAX) (VDSO): exited with status 1, expected 0gettimeofday(valid, page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1gettimeofday(valid, page (PROT_NONE)) (VDSO): exited with status 1, expected 0gettimeofday(valid, page (PROT_READ)) (VDSO): unexpected return value -14, expected -1gettimeofday(valid, page (PROT_READ)) (VDSO): exited with status 1, expected 0gettimeofday(NULL, UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1gettimeofday(NULL, UINTPTR_MAX) (VDSO): exited with status 1, expected 0gettimeofday(NULL, page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1gettimeofday(NULL, page (PROT_NONE)) (VDSO): exited with status 1, expected 0gettimeofday(NULL, page (PROT_READ)) (VDSO): unexpected return value -14, expected -1gettimeofday(NULL, page (PROT_READ)) (VDSO): exited with status 1, expected 0gettimeofday(UINTPTR_MAX, valid) (VDSO): unexpected return value -14, expected -1gettimeofday(UINTPTR_MAX, valid) (VDSO): exited with status 1, expected 0gettimeofday(UINTPTR_MAX, NULL) (VDSO): unexpected return value -14, expected -1gettimeofday(UINTPTR_MAX, NULL) (VDSO): exited with status 1, expected 0gettimeofday(UINTPTR_MAX, UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1gettimeofday(UINTPTR_MAX, UINTPTR_MAX) (VDSO): exited with status 1, expected 0gettimeofday(UINTPTR_MAX, page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1gettimeofday(UINTPTR_MAX, page (PROT_NONE)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(UINTPTR_MAX, page (PROT_READ)) (VDSO): unexpected return value -14, expected -1gettimeofday(UINTPTR_MAX, page (PROT_READ)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_NONE), valid) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_NONE), valid) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_NONE), NULL) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_NONE), NULL) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_NONE), UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_NONE), UINTPTR_MAX) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_NONE), page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_NONE), page (PROT_NONE)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_NONE), page (PROT_READ)) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_NONE), page (PROT_READ)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_READ), valid) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_READ), valid) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_READ), NULL) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_READ), NULL) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_READ), UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_READ), UINTPTR_MAX) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_READ), page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_READ), page (PROT_NONE)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday(page (PROT_READ), page (PROT_READ)) (VDSO): unexpected return value -14, expected -1gettimeofday(page (PROT_READ), page (PROT_READ)) (VDSO): exited with status 1, expected 0Failure threshold (10) reached; stopping test.gettimeofday/abi: 21 failures/inconsistencies encountered
  这个结果显然有改进空间,主要是 clock_gettime 系统调用在各种程序里用得还是不少的,要求实时性的应用,如音视频应用,使用更多。让获取时间操作开销尽量减少,对系统交互体验一定有所帮助。  2019.01.15 编辑:新增我 MBP 上 Docker for Mac(Linux 虚拟机)以及我一台服务器上的测量结果。  实验表明 amd64 架构的裸金属上,以下这几项的 VDSO 调用是有优化的:
  • clock-gettime-monotonic (约 30ns)
  • clock-gettime-monotonic-coarse (<10ns)
  • clock-gettime-realtime (约 30ns)
  • clock-gettime-realtime-coarse (<10ns)
  • getcpu (约 10ns)
  • gettimeofday (约 30ns)

 
这台机器的 CPU 是 Xeon X3323,标称频率 2.5GHz,可供参考。个人感觉龙芯优化上来了应该完全没问题。
 
MBP Docker for Mac 容器(随便用了个 golang:latest,Debian Stretch):
clock-gettime-monotonic: syscall: 3222 nsec/call
clock-gettime-monotonic: libc: 3234 nsec/call
clock-gettime-monotonic: vdso: 3246 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic: syscall: 282 nsec/call
clock-getres-monotonic: libc: 286 nsec/call
clock-getres-monotonic: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-monotonic-coarse: syscall: 288 nsec/call
clock-gettime-monotonic-coarse: libc: 4 nsec/call
clock-gettime-monotonic-coarse: vdso: 3 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic-coarse: syscall: 293 nsec/call
clock-getres-monotonic-coarse: libc: 293 nsec/call
clock-getres-monotonic-coarse: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-monotonic-raw: syscall: 3229 nsec/call
clock-gettime-monotonic-raw: libc: 3263 nsec/call
clock-gettime-monotonic-raw: vdso: 3203 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic-raw: syscall: 282 nsec/call
clock-getres-monotonic-raw: libc: 282 nsec/call
clock-getres-monotonic-raw: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-tai: syscall: 3209 nsec/call
clock-gettime-tai: libc: 3246 nsec/call
clock-gettime-tai: vdso: 3233 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-tai: syscall: 278 nsec/call
clock-getres-tai: libc: 279 nsec/call
clock-getres-tai: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-boottime: syscall: 3245 nsec/call
clock-gettime-boottime: libc: 3219 nsec/call
clock-gettime-boottime: vdso: 3275 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-boottime: syscall: 276 nsec/call
clock-getres-boottime: libc: 281 nsec/call
clock-getres-boottime: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-realtime: syscall: 3222 nsec/call
clock-gettime-realtime: libc: 3250 nsec/call
clock-gettime-realtime: vdso: 3216 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-realtime: syscall: 282 nsec/call
clock-getres-realtime: libc: 283 nsec/call
clock-getres-realtime: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-realtime-coarse: syscall: 288 nsec/call
clock-gettime-realtime-coarse: libc: 4 nsec/call
clock-gettime-realtime-coarse: vdso: 3 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-realtime-coarse: syscall: 290 nsec/call
clock-getres-realtime-coarse: libc: 291 nsec/call
clock-getres-realtime-coarse: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
getcpu: syscall: 277 nsec/call
getcpu: libc: 11 nsec/call
getcpu: vdso: 9 nsec/call
gettimeofday: syscall: 3184 nsec/call
gettimeofday: libc: 3217 nsec/call
gettimeofday: vdso: 3222 nsec/call
gettimeofday(valid, UINTPTR_MAX) (VDSO): unexpected return value -14, expected -1
gettimeofday(valid, UINTPTR_MAX) (VDSO): exited with status 1, expected 0
gettimeofday(valid, page (PROT_NONE)) (VDSO): unexpected return value -14, expected -1
gettimeofday(valid, page (PROT_NONE)) (VDSO): exited with status 1, expected 0
gettimeofday(valid, page (PROT_READ)) (VDSO): unexpected return value -14, expected -1
gettimeofday(valid, page (PROT_READ)) (VDSO): exited with status 1, expected 0
gettimeofday/abi: 3 failures/inconsistencies encountered


# uname -a
Linux 3054d8c1d709 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 GNU/Linux




我的一台服务器:
clock-gettime-monotonic: syscall: 574 nsec/call
clock-gettime-monotonic: libc: 34 nsec/call
clock-gettime-monotonic: vdso: 32 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic: syscall: 524 nsec/call
clock-getres-monotonic: libc: 523 nsec/call
clock-getres-monotonic: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-monotonic-coarse: syscall: 541 nsec/call
clock-gettime-monotonic-coarse: libc: 9 nsec/call
clock-gettime-monotonic-coarse: vdso: 7 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic-coarse: syscall: 529 nsec/call
clock-getres-monotonic-coarse: libc: 527 nsec/call
clock-getres-monotonic-coarse: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-monotonic-raw: syscall: 570 nsec/call
clock-gettime-monotonic-raw: libc: 579 nsec/call
clock-gettime-monotonic-raw: vdso: 564 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-monotonic-raw: syscall: 520 nsec/call
clock-getres-monotonic-raw: libc: 519 nsec/call
clock-getres-monotonic-raw: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-tai: syscall: 592 nsec/call
clock-gettime-tai: libc: 602 nsec/call
clock-gettime-tai: vdso: 587 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-tai: syscall: 521 nsec/call
clock-getres-tai: libc: 519 nsec/call
clock-getres-tai: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-boottime: syscall: 582 nsec/call
clock-gettime-boottime: libc: 588 nsec/call
clock-gettime-boottime: vdso: 585 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-boottime: syscall: 520 nsec/call
clock-getres-boottime: libc: 518 nsec/call
clock-getres-boottime: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-realtime: syscall: 584 nsec/call
clock-gettime-realtime: libc: 34 nsec/call
clock-gettime-realtime: vdso: 33 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-realtime: syscall: 525 nsec/call
clock-getres-realtime: libc: 525 nsec/call
clock-getres-realtime: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
clock-gettime-realtime-coarse: syscall: 532 nsec/call
clock-gettime-realtime-coarse: libc: 9 nsec/call
clock-gettime-realtime-coarse: vdso: 7 nsec/call
Note: vDSO version of clock_getres not found
clock-getres-realtime-coarse: syscall: 531 nsec/call
clock-getres-realtime-coarse: libc: 528 nsec/call
clock-getres-realtime-coarse: vdso: not tested
Note: vDSO version of clock_getres not found
Note: vDSO version of clock_getres not found
getcpu: syscall: 455 nsec/call
getcpu: libc: 17 nsec/call
getcpu: vdso: 14 nsec/call
gettimeofday: syscall: 563 nsec/call
gettimeofday: libc: 34 nsec/call
gettimeofday: vdso: 34 nsec/call

$ uname -srvmpio
Linux 4.15.0-39-generic #42~16.04.1-Ubuntu SMP Wed Oct 24 17:09:54 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

龙芯cpu 主频2.2G 以上,有图有真相

water 发表了文章 • 1 个评论 • 378 次浏览 • 2019-01-02 09:51 • 来自相关话题

   

TIM图片20190102094822.png

 
TIM图片20190102094813.jpg