•  GalaxyS10运行Android9.0 Pie

    GalaxyS10运行Android9.0 Pie

    经过几个月的等待,三星终于启动了最后一个星系和恒星:三星星系S10。事实上,该设备有一个新功能,可以全屏显示穿孔。 此外,三星的10周年纪念版Android手机也引起了很多关注。内部有一个强大的硬件,包括一个8纳米八核处理器,8 GB RAM和128 GB内部存储器。 在外部,Galaxy S10配备了动态AMOLED Infinity显示屏,该显示屏配备打孔双像素10MP前置摄像头。在后部,这款手机具有多摄像头设置。双像素12MP宽传感器具有光学图像稳定器和F1.5 / F2.4孔径;还有带OIS的16MP F2.2超广角镜头和12MP F2.4远摄镜头。 三星Galaxy S10开箱即用地运行Android 9.0 Pie,配备了三星专有的AI助手Bixby。它还具有IP68防水防尘等级。 新Galaxy移动电话的其他功能包括快速无线查询2.0和无线网络需求,这使得三星Galaxy S10可以在无负载的情况下访问其他设备装上。那个该装置具有超声指纹识别和面部识别功能。

    时间:2020-10-24 关键词: galaxys10 android9.0 pie

  • 苹果实行 iOS 游戏版号新规

    苹果实行 iOS 游戏版号新规

    10月23日,电脑公司获悉中国建立了游戏编号系统苹果。苹果今年,他通过电子邮件通知出版商,游戏将在7月31日前开始,但没有透露他的版本号,稍后提交的游戏将附带游戏编号会的。 据七麦数据今日分析,在 8 月 1 日 - 9 月 30 日的两个月之中,App Store 中上架的游戏 App 共有 11145 款,其中有版号的游戏 App 仅有 157 款,占比仅有 1.41%,无版号游戏 App 有 10988 款,占比高达 98.59%。 作为对比, 6 月 1 日 - 7 月 31 日期间,App Store 中上架的游戏 App 共有 17738 款,其中有版号的游戏 App 有 208 款,占比 1.17%,无版号的游戏 App 有 17530 款,占比达 98.83%。 仅从七麦数据的统计情况来看,这两个月 iOS 游戏中有版号的游戏比例仅提升了 0.24%,涨幅几乎可以忽略不计。 ▲ 图源七麦数据,下同 可能会有很多用户认为,以上游戏中免费游戏占比较高,但是IT之家从分析报告中得知,以上游戏 App 中,共有 275 款付费游戏,其中拥有版号的游戏仅 4 款;内购游戏共计 735 款,拥有版号的仅有 115 款;付费游戏或含内购买游戏 App 中,版号占有率仅为 12.32%。 在此次版号新规中,一次性买断的内购类型(非消耗型项目)是监管重点,带有广告性质或解锁功能的内购项目或许不受新规影响。而以上统计的游戏 App 中,内购带有 “ads”、“广告”字样的 App 占比进一步降低,目前仅占 21.09%。 研究发现,在其他地区,只有9.95%的有序列号的游戏被保留;大多数注册的游戏是没有序列号的游戏;其他大部分游戏都是重新安装的。

    时间:2020-10-24 关键词: app iOS 游戏

  • 浅谈机器学习是大数据走向嵌入式智能化应用的捷径

    浅谈机器学习是大数据走向嵌入式智能化应用的捷径

    我们生活在一个特定的世界,几乎每个人都在谈论数据和潜在价值。绘制大量的原始数据是复杂且难以解释的。近年来,学习机器使我们能够实现在线公司迄今为止所做的大部分价值,但现在它们正在扩展到物理世界。然而,对于许多人来说,传感器数据和集成KI模型之间的路径似乎几乎无法逾越。 WriTIngembeddedsoftwareisnotoriouslyTIme-consuming,andisknowntotakeatleast10-20TImeslongerthandesktopsoftware被发展的状态开发区[1].Itdoesnothavetobethatway.Here,wewillwalkyouthrougharealAIproject—fromtoembeddedapplicaTIon—usingourefficient,time-savingmethod. 今天,处理和解释传感器数据的绝大多数软件都是基于传统的方法:变换、滤波、统计分析等。这些方法是由一个人设计的,他参考他们的个人领域知识,在数据中寻找某种“指纹。通常,这种指纹是数据中事件的复杂组合,需要机器学习才能成功地解决问题。 Tobeabletoprocesssensordatainreal-time,themachinelearningmodelneedstorunlocallyonthechip,closetothesensoritself—usuallycalled“theedge.”Here,weexplainhowamachinelearningapplicationcanbecreated,fromtheinitialdatacollectionphasetothefinalembeddedapplication.Asanexample,welookataprojectweatImagimobcarriedouttogetherwiththeradarmanufacturerAcconeer. (左)Acconeer生产世界上最小、最节能的产品雷达系统。 在2019年,Imagimob与Acconeer合作,创建了一个带有手势识别的嵌入式应用程序。两家公司都专注于为小型电池供电设备提供解决方案,对能源效率、处理能力和BOM成本提出了极端要求。我们的目标硬件包含一个基于ArmCortex-M0-M4架构的MCU,它提供了市场上最节能的平台。对于我们Imagimob来说,边缘计算几乎已经成为最小ArmCortexM系列MCU上的高级计算的同义词。重要的是,能够运行我们的应用程序在下端的ArmCortexM系列MCU,因为它向世界表明,我们正在瞄准地球上最小的设备。这就是我们希望从市场角度出发的地方。 Acconeer生产世界上最小、最节能的雷达系统。数据包含大量信息,对于手势控制等高级用例,需要复杂的解释。在数据输出流的顶部运行机器学习软件对这些案例有很大的好处。因此,Imagimob-Aconeer协作在创建全新的和创造性的嵌入式应用程序方面是一个很好的匹配。 我们与Acconeer的项目的目标是创建一个嵌入式应用程序,该应用程序可以使用雷达数据实时分类五种不同的手势(包括用于唤醒应用程序的一个手势)。由于雷达体积小,可以放置在一对耳机中,手势将作为虚拟按钮来引导功能,通常被编程成物理按钮。该项目的最终产品被确定为一个运行在ArmCortex-M4架构上的C库,该库于2020年1月在拉斯维加斯的CES上被展示为一个健壮的现场演示。对于演示,我们使用耳朵耳机。然而,我们的长期产品目标是在耳内耳机中使用这项技术。我们认为,手势检测特别会改变耳内耳机的可用性,因为它们的面积有限,这使得物理按钮的放置变得困难。 在其核心,(监督)机器学习是关于找到一个函数(F),根据y=f(X)将一些输入数据(X)映射到一些输出数据(Y)。该函数或“模型”是通过处理许多不同的输入/输出对(x,y)和“学习”它们之间的关系来找到的。如果y是一个连续的值,那么这个问题被称为回归问题。但如果y取离散值,则被认为是一个分类问题。因此,机器学习项目的第一步是收集这些数据对。模型构建是第二步。嵌入式项目的最后一步是在目标平台上部署模型。下面,我们以手势识别项目为指导示例,通过这些步骤。 机器学习项目的第一步是收集数据对。模型构建是第二步,a嵌入式项目的最后一步是在目标平台上部署模型。 (左)我们为初始阶段建造了一个粗糙的试验台datacollectionwhich由雷达传感器组成安装在上面development板和放置在一个一对耳机。 从表面上看,数据收集似乎不是一项艰巨的任务。但这一步通常被低估了,根据我们的经验,这是大部分时间都花在这里的。首先要考虑的是如何从传感器中物理地获取数据。许多传感器带有一个开发板,可以从中提取数据,通常是通过某种电缆连接到PC机。对于手势识别项目,我们搭建了一个粗糙的试验台,用于初始数据采集,由安装在开发板上的雷达传感器组成,放置在一对耳机上,如下图所示。在这种情况下,我们使用了AcconeerXM112雷达传感器和XB112突破板。 接下来要考虑的是如何有效地标记数据。换句话说,你需要弄清楚如何为每个“x”标记适当的“y”。这可能看起来很琐碎,但当涉及到最小化这一步所需的人工工作量时,这是至关重要的。考虑到大量的数据,如果您不能正确地理解这一点,它将成为一项非常耗时的任务。对于传感器时间序列数据,通常不可能仅仅通过查看数据来标记数据,否则,例如图像数据可能是可能的。 帮助标记过程的一种方法是将视频记录附加到数据中。ImagimobCapture是一个Android应用程序,它将同步视频记录附加到每个传感器数据流中。标签可以直接在应用程序中完成,也可以在桌面应用程序ImagimobStudio中完成。在我们的雷达手势识别项目中,数据流看起来如下: 雷达手势识别项目中的数据流。 在这里,数据从传感器,带有USB串口,发送到PC。在PC上,服务器运行并将数据发送到手机上的ImagimobCapture,而手势则被视频记录。标记的数据,连同其视频记录,然后发送回PC,或云存储,如果数据是远程收集。从存储中,数据可以下载到ImagimobStudio,当它是建模阶段的时候。 我们定义了以下一组手势(“覆盖传感器”仅用于唤醒应用程序),并记录了大约七个不同的人的数据。 从七个不同的人记录了上述一组手势的数据。 数据收集过程的一个例子如下图所示。手势识别模型仅限于特定的手势,但可以很容易地用其他手势进行再训练。 手势数据采集过程的一个例子。 一旦数据到位并贴上标签,就该建立机器学习模型了。通常,人们开始建立模型只是为了很快意识到他们需要调整一些标签。你是做什么的?手动进入并编辑文本文件和更新数据是很麻烦的,这是我们都希望尽可能避免的。相反,图形工具是可取的。ImagimobStudio将数据与视频记录一起加载,并允许用户以图形方式拖动和修剪标签。一个例子,以一个记录的手势,显示在下面的图像。视频与绿色数据一起可见。在底部,蓝色的标签显示出来,我们可以看到它们紧紧地放在手势周围(非零数据)。 ImagimobStudio将数据与视频记录一起加载,并允许用户以图形方式拖动和修剪标签。这是一个有记录的手势的例子。 如果数据已经在ImagimobCapture中预先标记,那么通过文件并确保数据是正确的,并且标签已经到位,这是一个相对较小的任务。没有正确标记的数据,很难找到一个好的模型。找到一个高精度的好模型通常需要多次迭代和实验。首先要决定使用什么机器学习技术,例如随机森林、支持向量机或人工神经网络等。在过去的几年里,深度学习由于具有原始数据的令人印象深刻的学习能力而受到欢迎。深度学习的主要吸引力之一是它排除了手动查找功能的需要,这是更传统的机器学习方法所需要的。它具有提高精度和消除大量手工工作的潜力。然而,仍有许多所谓的超参数有待选择,例如网络的体系结构、所谓的学习率和许多其他参数。 在ImagimobStudio中,用户经历了构建深度神经网络的过程。用户定义要试用多少种不同类型的超参数,然后程序自动搜索所有组合并保存最佳模型。 在ImagimobStudio中,用户被引导通过构建深度神经网络的过程。用户定义要试用多少种不同类型的超参数,然后程序自动搜索所有组合并保存最佳模型。 一旦您对模型的健壮性感到满意,就该是过程中的最后一步了:将模型导出到C代码并为嵌入式硬件构建库。 当从PC环境中的高级语言软件开发到微控制器(MCU)上的低级编程时,复杂性急剧增加。发育时间增加的因子为10-20并不少见[1]。例如,障碍可能包括更难的内存和处理限制,更长的调试周期,以及更难找到的更糟糕的错误类型。 在ImagimobStudio中,以.h5文件形式训练的模型很容易转换为特定硬件类型的C代码,如“Edge”选项卡所示。 在ImagimobStudio中,以.h5文件形式(用于从Tensorflow、Keras和其他深度学习框架导出模型权重和体系结构的通用格式)的经过训练的模型可以很容易地转换为特定硬件类型的C代码,如上一幅图像中的“Edge”选项卡所示。 然后编译C代码并将其闪烁到硬件上。我们通常构建一个库,可以集成到C应用程序中。右边,可以看到现场演示的嵌入式版本。它有一个电池驱动的Acconeer物联网模块XM122与蓝牙连接。人工智能应用程序运行在XM122模块上,其中包括来自北欧半导体的NRF52840SoC,该模块基于ArmCortexM4MCU。 现场演示的嵌入式版本。 在这里,你可以看看最后的演示: 图像手势检测库的核心是针对时间序列数据的人工神经网络。它是专门设计的,脑海中有一个小的记忆足迹。库用C编写并在静态库中编译,然后与主AcconeerC应用程序一起编译。 ·TheGesturedetectionlibraryusesradardatafromtheAcconeerXM122IoTModuleasinput ·Thememoryfootprintofthegesturelibraryisapproximately80kBRAM ·Thelibraryrunsona32-bit64MHzArmCortexM4MCUwith1MBFlashand256kBRAM ·Thelibraryprocessesroughly30kBofdatapersecond ·TheexecutiontimeoftheAImodelisroughly70mswhichmeansthatitpredictsagestureatapproximately14.3Hz 在2020年6月,由Imagimob、Acconeer和Flexworks组成的一个财团从瑞典Vinnova获得了价值45万$的赠款,以采取下一步建设gesturhe控制的耳内耳机。Acconeer将覆盖传感部分,Flexworks将负责硬件和力学,我们在Imagimob将开发手势检测应用程序。在这个项目中,我们不仅将建立第一个手势控制的耳内耳机,而且我们还将致力于一个硬件加速系统的机器学习代码在单片机上。我们将继续使用ArmCortexM系列,并受益于Arm提供的先进解决方案。 John malm digital analysis and development algorithmus担任imagimob machines的学习开发者[(1)]麦康奈尔,史蒂夫,软件评估,秘密黑艺术,微软出版社,2006年

    时间:2020-10-24 关键词: 嵌入式 机器学习 大数据

  • Ubuntu 20.10正式发布

    Ubuntu 20.10正式发布

    Canonical昨天正式发布了ubuntu-20.10,其中包括一个优化的草莓蛋糕和服务器系统,以支持科学家、发明家、教育和企业。 Ubuntu 20.10包含5.8版Linux内核,提供了最新的工具链,包括glibc 2.32,OpenJDK 11,rustc 1.41,GCC 10,LLVM 11,Python 3.8.6,ruby 2.7.0,php 7.4.9,perl 5.30 ,golang 1.13。 值得一提的是,Ubuntu 20.10是首个采用树莓派4(Raspberry Pi 4)桌面图像功能的Ubuntu版本。 Ubuntu 20.10包含了微云(micro cloud),提供VM的小型服务器集群,按需供给的边缘Kuberenetes的LXD 4.6和MicroK8s 1.19,可适用于远程办公室、分公司、仓储和分布的基础设施。 Ubuntu 20.10集成了GNOME 3.38,此版本改进了应用栅格,移除了常用标签和允许根据用户喜好对应用排列和管理。 电源设置中加入了电池百分比开关,私有WiFi热点可通过生成的QR(二维码)进行分享,重启选项已被添加至注销/关机菜单中。 Ubuntu 20.10新增了对Ubuntu认证设备的支持,更多的Ubuntu工作站现获得了支持指纹识别功能支持。 配备屏幕键盘的二合一设备现已获得完整支持,这使得诸如戴尔XPS和联想Yoga等设备的Ubuntu体验得以改善。 另外,树莓派4GB或8GB内存版本将获得Ubuntu桌面版的完整支持。 官方下载页面 - THE END - 转载请注明出处:快科技 #Ubuntu 肖!

    时间:2020-10-24 关键词: 树莓派 ubuntu gnome

  • 浅谈Alexa App在Android和iOS上实现了免提

    浅谈Alexa App在Android和iOS上实现了免提

    为了避免虚拟向导,亚马逊更新了IOS和Android设备的Alexa移动应用程序。 根据TechCrunch的报道,直到现在,要使Alexa通过移动应用程序收听您的声音,首先需要点击屏幕底部的蓝色按钮。在最新版本的应用中,如果用户愿意,可以关闭此要求。之后,用户可以要求Siri或Google助手启动Alexa应用程序,然后Alexa无需额外输入即可开始收听。 如果您全天大量访问Alexa,这听起来可能会节省时间,但是有两个非常有限的警告。免提功能仅在Alexa应用程序处于打开状态并具有焦点时才起作用,因此不能在后台打开。如果设备被锁定,它也将不起作用。 这两个限制似乎与亚马逊地区通过这些限制所获得的便利性相矛盾由两个语言助手的组合可以解决这个问题参见第页1: 例如,Siri首先被要求使用Alexa以及然后,在介绍了Alexa的新模型之后,我们开始了新的对话。免税只需要几秒钟,但这意味着你不需要触摸电视电话。你想让亚历山大在你的手机上有更好的体验。你可以使用很多亚历山大的麦克风,比如摩托车G7和LG G8。

    时间:2020-10-24 关键词: Android app iOS alexa

  • Linux 5.8 内核,全局主题切换,全新组件上线

    Linux 5.8 内核,全局主题切换,全新组件上线

    10月23日,Yuqilin团队宣布ubuntukylin开源版本20.10正式发布。 20.10 是优麒麟发布的第 16 个版本,提供 9 个月的技术支持,与 Ubuntu 20.10、Lubuntu 20.10、Xubuntu 20.10、Ubuntu Mate 20.10 等开源发行版全球同步发布。 ▲ 图源:优麒麟开源操作系统,下同 IT之家了解到,此次发布的优麒麟 20.10 版本默认搭载最新 Linux 5.8 内核和 UKUI 3.0 桌面环境。拥有全新布局的任务栏和侧边栏,新增麒麟扫描、麒麟刻录、麒麟截图、麒麟应用安装器等应用软件,并且支持触屏手势功能和系统组件的全局主题切换,同时修复了开始菜单、文件管理器、控制面板等大量问题。 任务栏 支持深浅双色主题和圆角布局的任务栏,将快速启动栏与应用程序启动区域合二为一。 侧边栏 采用全新模块化架构设计的侧边栏,新增丰富可扩展的系统插件。 麒麟扫描 底层基于 SANE 标准库开发,支持绝大多数的扫描仪设备,拥有查找和连接扫描设备基础特点,以及一键美化、智能纠偏和文字识别等功能。 麒麟刻录 基于 k3b 二次开发,支持光盘的刻录、擦除、续刻及光盘内容 md5 校验等。 麒麟截图 麒麟截图在传统截图功能基础上增加了绘制矩形、圆形,添加模糊、标注和字体,以及固定图片到桌面上等功能。 麒麟应用安装 麒麟应用安装器支持快速安装软件,以及 deb 包的双击安装和一键卸载。 触屏手势功能 支持多指触屏手势功能,包括双指滑动、多指缩放等手势。 全局主题切换 开始菜单、任务栏、侧边栏等组件及自研应用软件均支持系统默认、深色、浅色三套主题切换。 优麒麟 Ubuntu 20.10 使用最新 5.8 版本内核,带来了许多功能增强和更多的设备支持。 部分重要更新: 内核并发处理器 (KCSAN) 内核事件通知机制 支持块层内联加密 私有 procfs 挂载 BPF iterator 机制 gcc 升级至 10.2.0 qt 升级至 5.14.2 python 升级至 3.8.6 用户可以使用镜像站或官网请访问www.ubuntukylin.com/downloads/Please注意,yukirin版本20.04的用户不建议更新到20.10,新用户也不建议更新到20.10到20.10更新跟踪函数传输到20.04更新源。

    时间:2020-10-24 关键词: Linux 主题 优麒麟

  • 微信 Android 版 7.0.20 内测版详细体验

    微信 Android 版 7.0.20 内测版详细体验

    最近,Android版本似乎落后于两周前推出的IOS版本,但不是在提前。昨天更新的是Android版的7.0.20微信,这是一个版本。这个上面提到的两个重要变化是内部的:预计会有一些详细的调整。 出于某种原因,我们常常需要将聊天会话删除,不过由于微信并不支持聊天内容云同步,会话删除后聊天的内容也就丢失了。此次 7.0.20 版加入了一项聊天会话隐藏功能,既可以保留聊天记录,又不会让它在 “会话”窗口中显示。使用方法是直接在会话记录上长按,然后选择 “不显示该聊天”就可以了。 新增加的 “不显示该聊天”功能 需要说明的是,这项功能不仅能针对聊天记录,也能作用在群、服务号。一句话,只要出现在 “会话”面板中的内容,统统可以隐藏。 类似于之前 QQ 的那个 “青少年模式”,此次微信推出的 “青少年模式”,同样也是通过屏蔽诸如 “公众号”、“搜一搜”、“小游戏”、“附近的人”…… 等带有娱乐性质的功能,来防止未成年人过度沉迷。所不同的是,微信允许使用者自定义部分模块的屏蔽程度。如在 “公众号”、“视频号”中,便提供了 “全部屏蔽”、“已关注不屏蔽”、“完全不屏蔽”三种选项。不过像 “看一看”、“游戏”、“附近的人”等选项,则是直接屏蔽,没有提供修改权限。 新增加的 “青少年模式” 开启路径位于设置页面,点击 “青少年模式”,再输入微信密码即可。接下来会显示青少年模式的设置面板(图 02),根据情况挑选适合的屏蔽选项。通常被屏蔽模块会直接从界面中隐藏,但如果强制访问,就会看到如下这则提示。 开启入口在 “设置”面板 强制访问被屏蔽内容会看到这个提示 表情面板左侧增加了一个搜索图标,可以在聊天过程中直接搜索表情发给好友。这个就没啥可说的了,总之是个挺不错的变化。 新增表情搜索功能 “搜一搜 “并没有写在更新列表里,但如果我们长按聊天框,就能看到这项功能。简单点说,“搜一搜”可以在聊天过程中搜索表情、公众号、视频号,并且一键发送给对方,一定程度上提高工作效率。当然,这里也存在一个小问题,通常我们都是看到某项内容后分享给对方,而像这种边搜索边分享的情况&……%¥#@貌似并不多见吧! 聊天框中的 “搜一搜” 还有一点需要注意,使用这项功能时请尽量不要开启 “青少年模式”,否则搜索结果里就只有表情了。 话题标签正式上线微信朋友圈,对于这项功能,很多小伙伴也是期盼以久。使用方法足够简单,只要在编辑朋友圈时,长按空白处不松手即可,之后快捷菜单会显示出一个话题标签图标(#)。而添加好的标签,也会自动呈现蓝色,别人点击后就会显示出视频号里的相关内容。 朋友圈上线 “话题标签 “ 除了上述重要改动外,新版还直接更改了组别符号。另外值得注意的是,在不久的将来,与QQ一样,腾讯将调整语言信息的开放速度威尔。达尔另外,语言信息的阅读速度可以通过滑动来调节,当前版本D的7.0.20的准确更新是什么?Android欢迎来到评论区

    时间:2020-10-24 关键词: Android iOS 微信

  • 大家好,介绍一下我自己

    大家好,介绍一下我自己

    第一次介绍我自己 我本人从毕业开始就做电子产品的研发工作 ,主攻传感器、控制器、BLDC驱动控制、汽车电子等产品,既要自己设计硬件电路、PCBLayout、也要编程单片机代码,如果有需求还需要用MFC编写上位机软件。经历过国企、小私企、名外企。除了上班做好本职工作以外,晚上周末也不闲着,写文章、接私活,单身时下班把自己关在家里、结婚后把自己关在房子里、有了孩子后终于开始走出房子陪孩子玩。由于总是把自己关在房子里,所以,我没有什么兴趣、也没有什么应酬、也不会出去玩。 高中爱看书 从高中开始,我自己定义为文艺青年,比较爱看书但是不喜欢挑选书,索性我就按照历年的茅盾文学奖名单,把清单遍历了一遍,老师说,课外书先放一放到了大学后使劲看。结果到了大学后,有了新活动。 大学时职业的启蒙 教射频课的老师比较年轻,喜欢显摆自己大学时做过的东西,虽然知道他在显摆,但是却被他的东西吸引了,绿色的板子上面焊了好多黑黑的元器件,那时候插件比较多,摸上去扎手但是很喜欢。于时跟着老师泡实验室。在大四的时候,承包了我们班以及我们班家属的毕业设计,那个阶段顿顿吃饭都是别人请,感觉做大哥一样。 研究生毕业,职业的抉择 读研究生时又认识了一名技术强悍的博士,平时帮他做做板子、写写程序,同时跟着他去外面拉项目,拉项目也就延续了下来,但是我比较笨,不太爱说话,不太会谈。毕业时,面临职业的抉择。其实,找工作时我已经在北京某航天所实习了,实习了三个月后我放弃了签约,一方面女朋友不希望留在北京这种大城市,另一方面感受到了工作中的压抑。在政府工作的堂哥希望我考公务员进入体制内,我想都没想就拒绝了。从北京回来后,招聘季已经快结束了,还好碰上了几个机会,最后砍掉了北京、深圳、上海的offer,选择了南方的一座小城市。 工作后 当然,项目中经历了一次比较重大的失败,几万块钱接了一位北京老板的控制器项目,需求比较陌生第一次接触,工作上出现了厌倦的情绪、手里还有几个没完工的小活、还有老婆怀孕,结果就没有太上心。导致项目失败,一直比较愧疚。 又一次的大决定 最近,又做了一次重大的决定,离开自己生活了近8年的城市,举家搬迁至新城市,开始了新而有陌生的生活,小孩面临上学,异地户口,生活成本,各种难。同时,工作的重心也放到了软件上。 还想看书 还想看书,但是打开书的频率明显少了,前段时间买了好多历史、哲学方面的书,还买了一堆小孩的书,看了一部分还没看完,明显感觉看书时还想着其他的事情,到底在想什么也不是很明确,可能就是人到中年的焦虑吧。最近,突然想看一些冒险、科幻、侦探方面的书籍,如鬼吹灯、盗墓笔记、三体等,先放一放吧。当出现一个新的想法后,我会等待三天,如果三天以后这个想法依然很强烈,那么这个事情就决心去做了。 我想我的猫 这么多年的生活习惯,导致自己没有了什么兴趣爱好,抽烟不会、喝酒不喜欢、应酬没有饭局。孩子还小比较闹腾,几乎不给你超过半个小时的独处时间,所以私活项目也接的少了。但是写文章应该是可以长久坚持下去的。几年前,救助了一只奄奄一息的流浪猫,还坏了一只眼睛,是一只母猫,半年的时间长的体型庞大,但是后来她自己出去了,可能去寻找爱情了吧,不知道现在怎么样了。虽然,我又养了一只狗,但是还是经常想起我的猫,过得好不好。 扫描二维码可以加我好友,如下: 扫描二维码,可以关注微信公众号,如下:

    时间:2020-10-23 关键词: 软件 嵌入式 硬件

  • 三星 Galaxy Z Fold 3 搭载 S Pen和更厚的 UTG 玻璃,

    三星 Galaxy Z Fold 3 搭载 S Pen和更厚的 UTG 玻璃,

    根据韩媒报道,韩媒 The Elec 援引 UBI Research 的最新报告称,三星目前正在考虑采用 AES(主动静电解决方案)数字化技术,将 S Pen 带入下一款 Galaxy Z Fold 系列中。同时,据说该公司还在努力将 UTG(超薄玻璃)做得足够厚,以承受 S Pen 的笔尖压力。 这可能不是第一次听到三星想要将 S Pen 带入其可折叠手机的传闻了。此前传闻 Galaxy Z Fold 2 就会搭载 S Pen,但据说由于技术限制,三星无法将这一设想变为现实。 首先,三星的 Galaxy Note 系列采用了 S Pen 的 EMR(电磁共振)技术,但同样的技术对于可折叠屏幕来说过于坚硬。其次,据说三星决定不给 Galaxy Z Fold 2 配上 S Pen,因为 UTG 层不够厚,无法抵挡触控笔的笔尖。 UBI Research 认为,三星现在正寻求为即将推出的 Galaxy Z Fold 3 解决这些问题。该公司可能无法将 EMR 数字化仪应用到可折叠面板上,但它可能会决定采用 AES 技术来代替。 两种技术都有各自的优缺点,但 AES 通常以牺牲生产成本为代价,提供更好的整体性能。更重要的是,AES 可能会让三星的可折叠屏手机用上 S Pen。 据报道,三星正在寻求改进的另一个方面是超薄玻璃。Galaxy Z Fold 2 的可折叠显示屏有一层 30 微米的 UTG,太容易被 S Pen 的尖端损坏。不过,据说该公司正在努力为 Galaxy Z Fold 3 将 UTG 层的厚度增加一倍,以允许使用 S Pen。 当然,现在确定这些传言的真实性还为时过早,即使三星考虑在 Galaxy Z Fold 3 上加入 S Pen,在手机进入量产之前,很多事情都可能发生变化,IT之家将持续关注。 所有的一切,还是要等到官宣了。

    时间:2020-10-23 关键词: 三星 3 utg galaxyzfold

  • R9 4900H +4K 屏,联想锐龙版拯救者 Slim 7发布

    R9 4900H +4K 屏,联想锐龙版拯救者 Slim 7发布

    刚刚得到的消息,联想现已发布 Legion Slim 7 笔记本,搭载了 AMD 移动标压处理器,还可选 RTX 2060 Max-Q。 锐龙版拯救者 Slim 7 可选 R9 4900H、R7 4800H 和 R5 4600H 处理器,显卡可选 RTX 2060 Max-Q、GTX 1660 Ti Max-Q 和 GTX 1650 Ti,最高配备 32GB DDR4-3200 内存和 2TB SSD。 锐龙版拯救者 Slim 7 搭载了 15.6 英寸屏,可选 4K 100% Adobe RGB 色域 HDR400 和 1080p 144Hz 版本。 联想 Legion Slim 7 笔记本将于 10 月上市,起价为 1369.99 美元。你觉得这个配置如何,会入手吗?

    时间:2020-10-23 关键词: 联想 锐龙 4900h 拯救者 r9

  • 北川发生4.7级地震,小米miui11手机10秒预警

    北川发生4.7级地震,小米miui11手机10秒预警

    在10月22日11时03分的时候,在四川绵阳市北川县(北纬31.83度,东经104.18度)发生4.7级地震,震源深度22千米。 一位网友在地震发生后10秒收到了小米手机发出的地震预警,并分享了相关截图。 如图所示,小米手机除了地震预警提醒之外,还提供拨打紧急联系人电话、前往最近避难所等功能。 据悉,小米地震预警是小米MIUI 11就已上线的新功能。 官方表示地震预警不是预报,而是在地震发生后利用电波比地震波传播速度快的原理,迅速向即将受影响区域发出几秒到几十秒的预警警报,以争取避灾时间,减少伤亡和次生灾害。 小米手机利用系统级的信息触达能力,与拥有成熟地震预警能力的机构合作,在发生地震时为大家及时预警。 该功能开启后,当周边发生强震时,手机将提前几秒到几十秒以强提示弹窗和警报声通知大家,为避险争取时间。 这个功能可以说是相当实用了。

    时间:2020-10-23 关键词: 小米 地震预警 miui11

  • 留了一手!AMD锐龙500016核、5GHz高频真的成了

    留了一手!AMD锐龙500016核、5GHz高频真的成了

    早在前段时间,AMD发布了锐龙5000系列处理器,这一代是7nm Zen3架构了,性能大提升都说了好多遍了——IPC涨了19%,游戏性能提升26%,多核优势依然无敌,反正这次哪方面性能都是王者了。 这次首批产品也只有四款,具体如下: 锐龙9 5950X:双CCD、16核心32线程、8MB二级缓存、64MB三级缓存,基础频率3.4GHz,最高加速频率从4.7GHz来到了4.9GHz,热设计功耗维持105W,售价799美元。 锐龙9 5900X:双CCD、12核心24线程、6MB二级缓存、64MB三级缓存(自然也变了),基准频率从3.8GHz调低至3.7GHz,但是最高加速频率从4.6GHz提高到4.8GHz,热设计功耗保持105W,如果对比锐龙9 3900XT的话则是基准频率降低100MHz、加速频率提高100MHz,售价549美元。 锐龙7 5800X:单CCD、8核心16线程,4MB二级缓存,32MB三级缓存,基准频率3.8GHz,最高加速4.7GHz,相比于锐龙7 3800XT前者降低100MHz、后者不变,热设计功耗为105W,售价449美元。 锐龙5 5600X:单CCD、6核心12线程,3MB二级缓存,32MB三级缓存,基准频率3.7GHz,最高加速4.6GHz,相比于锐龙5 3600XT前者降低100MHz、后者提高100MHz,热设计功耗为65W,售价299美元。 如果说还有什么遗憾,那就是Zen3这一代依然没有突破5GHz的频率上限,至少官方指标没有,还是4.9GHz。 不过爆料大户TUM_APISAK似乎拿到了锐龙5000,至少也有了可信数据,指出锐龙5000系列的加速频率实际上要比官方标称更高,多了100MHz,锐龙9 5950X可以轻松达到5.04GHz。 为何AMD官方没有这么宣传,可能是跟PBO频率比较特殊有关,也有可能是AMD吸取了去年锐龙3000系列的教训,将加速频率的指标丁低一点,更容易轻松达到。 反正对AMD来说,不论定4.9GHz还是5GHz,性能这方面他们已经赢定了,只是比例多少的问题,不直接标5GHz,以后等消费者发现了,AMD Yes喊的更响亮了。

    时间:2020-10-23 关键词: AMD 锐龙 5ghz高频

  • 骁龙875加持,三星Galaxy S21旗舰爆料!三摄

    骁龙875加持,三星Galaxy S21旗舰爆料!三摄

    根据最近的爆料,三星有望提前发布Galaxy S系列旗舰,最快可能会在1月份亮相。 今天三星Galaxy S21的摄像头模具曝光,可以看到它后置是三颗摄像头,造型预计为矩阵。 目前尚不确定三星Galaxy S21的摄像头规格,今年三星在Galaxy S20系列上采用了两种不同的主摄,其中Galaxy S20主摄为1200万像素,Galaxy S20 Ultra主摄为一亿像素。 从曝光的信息来看,三星Galaxy S21 Ultra主摄为一亿像素,Galaxy S21主摄可能会升级到一亿像素,也可能会采用1200万像素。 除此之外,三星Galaxy S21将搭载高通骁龙875旗舰处理器,这是首批骁龙875机型。 这颗芯片基于5nm制程打造,首次采用Cortex X1超大核,并同时用上Cortex A78大核,性能相比高通骁龙865有大幅提升,而且高通骁龙875有望集成5G基带,安兔兔跑分超过70万分无压力。 此外,三星Galaxy S21至少会配备12GB内存,不排除提供16GB内存的可能。这说明内存是越来越大了。

    时间:2020-10-23 关键词: 三星 骁龙875 galaxys21

  • 苹果 iOS 14 新 bug:第三方电子邮件和浏览器更新后会被重置

    苹果 iOS 14 新 bug:第三方电子邮件和浏览器更新后会被重置

    在iOS 14 和 iPadOS 14 中,苹果允许用户选择第三方应用作为默认的电子邮件应用和浏览器。上个月出现了一个 bug,每当用户的设备重启时,默认应用就会被重置为苹果自己的应用。 虽然该 bug 已被修复,但 iOS 14 和 iPadOS 14 中的一个新 bug 又出现了。似乎每当选定的第三方应用更新后,电子邮件或浏览器的默认应用选择就会被重置为苹果的 Mail 或 Safari。 The Verge 目前已经证实,每当用户在 iOS 14.1 中通过 App Store 更新所选择的默认应用时,该应用就会从默认应用槽中被移除。每次更新被设置为默认的第三方邮件应用或浏览器后,用户都需要重新设置默认应用。 不过,据 MacRumors 了解,这个 bug 可能已经在 iOS 14.2 和 iPadOS 14.2 测试版中得到了修复。 像 Chrome、Edge、DuckDuckGo 和 Firefox 都可以设置为默认浏览器,而 QQ 邮箱、Gmail、Spark 和微软 Outlook 等都可以设置为默认邮件应用。 不知道你有注意到这个BUG吗?希望苹果早点修复吧。

    时间:2020-10-23 关键词: 苹果 ios14

  • V4L2的管道驱动程序是如何被Xilinx Linux 理解的

    V4L2的管道驱动程序是如何被Xilinx Linux 理解的

    Xilinx提供了完整的V4L2的驱动程序,Xilinx V4L2 driver。处于最顶层的驱动程序是V4L2框架的视频管道(Video pipeline)驱动程序,也叫桥驱动程序(bridge driver),主要代码在文件xilinx-vipp.c中。在V4L2框架中,整个视频管道(Video pipeline)可以通过媒体设备(/dev/media)配置,流媒体可以通过视频设备(/dev/video)控制。这两种设备,都是在视频管道(Video pipeline)驱动程序里创建的。所以,理解V4L2的管道(pipeline)驱动程序是理解Xilinx所有Video IP 在Linux下工作情况的基础。 3. 文件 3.1. C文件 Xilinx的V4L2的管道(pipeline)驱动程序在下面四个文件中。 1. drivers/media/platform/xilinx/xilinx-vipp.c 2. drivers/media/platform/xilinx/xilinx-vipp.h 3. drivers/media/platform/xilinx/xilinx-dma.c 4. drivers/media/platform/xilinx/xilinx-dma.h 3.2.设备树(devicetree) 设备树(devicetree)里含有整个视频管道(video pipeline)的配置,对应的文档在Documentation/devicetree/bindings/media/xilinx/xlnx,video.txt。 下面是一个设备树(devicetree)的例子。 axi_video_cap { compatible = "xlnx,axi-video"; dmas = , ; dma-names = "port0", "port1"; ports { #address-cells = ; #size-cells = ; port@0 { reg = ; direction = "input"; vcap0_in0: endpoint { remote-endpoint = ; }; }; port@1 { reg = ; direction = "input"; vcap0_in1: endpoint { remote-endpoint = ; }; }; }; }; 3.3. 函数调用关系图 xvipp 函数调用关系图 4.主要函数 4.1. 函数xvip_composite_probe() 函数xvip_composite_probe是整个驱动的入口,主要工作是初始化驱动的数据结构xvip_composite_device里的通用数据,包括lock、list(entities和dmas),再调用了xvip_composite_v4l2_init()和xvip_graph_init(),最后调用platform_set_drvdata设置平台设备platform_device里的当前设备的数据指针。 4.2. 函数xvip_composite_v4l2_init() 函数xvip_composite_v4l2_init做的事情比较简单,只是初始化了struct media_device,设置了设备版本和model名称、dev/mdev指针,就调用了v4l2_device_register()注册V4L2设备。 xvip_composite_v4l2_init的关键代码如下: xdev->media_dev.dev = xdev->dev; strlcpy(xdev->media_dev.model, "Xilinx Video Composite Device", sizeof(xdev->media_dev.model)); xdev->media_dev.hw_revision = 0; media_device_init(&xdev->media_dev); xdev->v4l2_dev.mdev = &xdev->media_dev; ret = v4l2_device_register(xdev->dev, &xdev->v4l2_dev); 4.3. 函数xvip_graph_init 函数xvip_graph_init是最重要的函数,函数调用层次也最深。它首先调用xvip_graph_dma_init根据设备树(devicetree)里的port信息初始化DMA通道,创建一个DMA的列表;再调用xvip_graph_parse在设备树(devicetree)里分析子设备节点,根据设备树里"remote-endpoint"属性创建一个Entity的列表;最后调用v4l2_async_notifier_register注册异步处理函数。系统发现各个子设备(subdev)后,调用异步处理函数xvip_graph_notify_bound获取子设备信息。所有子设备(subdev)都被发现后,调用xvip_graph_notify_complete,为每个entity创建Link和V4L2子设备,并注册media设备。 xvip_graph_init的关键代码如下: /* Init the DMA channels. */ ret = xvip_graph_dma_init(xdev); /* Parse the graph to extract a list of subdevice DT nodes. */ ret = xvip_graph_parse(xdev); /* Register the subdevices notifier. */ num_subdevs = xdev->num_subdevs; subdevs = devm_kcalloc(xdev->dev, num_subdevs, sizeof(*subdevs), GFP_KERNEL); xdev->notifier.subdevs = subdevs; xdev->notifier.num_subdevs = num_subdevs; xdev->notifier.ops = &xvip_graph_notify_ops; ret = v4l2_async_notifier_register(&xdev->v4l2_dev, &xdev->notifier); 4.4. 函数xvip_graph_dma_init xvip_graph_dma_init()自身比较简单,先找到第一个"ports"子节点,再找其中的所有"port"节点,并为每个"port"子节点执行xvip_graph_dma_init_one(),从而将每个"port"子节点对应的DMA添加到链表dmas中。 xvip_graph_dma_init的关键代码如下: ports = of_get_child_by_name(xdev->dev->of_node, "ports"); for_each_child_of_node(ports, port) { ret = xvip_graph_dma_init_one(xdev, port); } 4.5. 函数xvip_graph_dma_init_one xvip_graph_dma_init_one()根据设备树(devicetree)的"port"子节点的配置,找到DMA,并添加到链表"xdev->dmas"中。 xvip_graph_dma_init_one先读取"port"子节点的属性"direction"和"reg"属性。Devicetre的"port"节点中,要含有属性“direction”和"reg"属性;如果没有属性“direction”,会返回错误;如果没有"reg"属性,代码会继续,但是功能会出错。属性"direction"的值是"input"或者"output"。 xvip_graph_dma_init_one还为每个port分配struct xvip_dma,再执行xvip_dma_init()。 接下来,xvip_graph_dma_init_one把struct xvip_dma加入到队列xdev->dmas。 xvip_graph_dma_init_one还根据"direction"的值是"input"或者"output",以及xvip_is_mplane的设置,选择buffer类型。 xvip_graph_dma_init_one的关键代码如下: // Read direction and reg properties ret = of_property_read_string(node, "direction", &direction); of_property_read_u32(node, "reg", &index); dma = devm_kzalloc(xdev->dev, sizeof(*dma), GFP_KERNEL); ret = xvip_dma_init(xdev, dma, type, index); list_add_tail(&dma->list, &xdev->dmas); 4.6. 函数xvip_dma_init xvip_dma_init是核心的函数,完成了最关键的任务:初始化buffer队列、申请DMA设备、注册Video设备。 函数xvip_dma_init()先初始化struct xvip_dma的数据成员,包括dma->lock、dma->pipe.lock、dma->queued_bufs、dma->queued_lock;再根据buffer类型,初始化v4l2_format里的像数点格式,struct v4l2_pix_format pix 或者struct v4l2_pix_format_mplane pix_mp。接下来设置pad.flags为MEDIA_PAD_FL_SINK或者MEDIA_PAD_FL_SOURCE,调用media_entity_pads_init初始化初始化media entity。 函数xvip_dma_init()然后继续初始化video_device的各种成员和操作函数,包括fops、v4l2_dev、queue、vfl_type、vfl_dir、lock、和ioctl_ops。video_device的fops被设置为xvip_dma_fops,ioctl_ops被设置为xvip_dma_ioctl_ops。 函数xvip_dma_init()再接着初始化buffer队列struct vb2_queue queue,其中ops被设置为xvip_dma_queue_qops,mem_ops被设置为vb2_dma_contig_memops,执行vb2_queue_init。 函数xvip_dma_init()再接着执行dma_request_chan申请DMA设备,这是一个复杂和核心的函数。dma_request_chan()的第二个参数是DMA通道的名称,名字是格式是"port%u",比如"port0",也就是设备树的属性"dma-names"里的字符串。其中of_dma_request_slave_channel()调用的of_find_property(np, "dmas", NULL),通过属性"dmas",取得了dma。of_property_count_strings()计算属性"dma-names"里的字符串个数,也就是DMA的个数。然后根据DMA的个数,为每一个DMA执行of_dma_match_channel()。of_dma_match_channel (dev->of_node, "port%u", )取出"dma-names"的字符串,再和"port%u"对比,这是检查名字是否对应,如果一致,就用对应的DMA,取得struct of_phandle_args dma_spec,再把struct of_phandle_args dma_spec转换为struct of_dma *ofdma。of_dma_xlate接下来转换为struct dma_chan。of_dma_request_slave_channel使用了字符串"dmas"。of_dma_match_channel()使用了字符串"dmas"和"dma-names"。所以Xilinx-vipp.c实现的"xlnx,video"设备的设备树里的"dmas"和"dma-names","port0"是必须有的固定字符串,不能更改;只有dmas后面的DMA phandle才可以更改。 函数xvip_dma_init()最后执行video_register_device注册Video设备。 4.7. 函数xvip_graph_parse 函数xvip_graph_parse先调用xvip_graph_parse_one,找到直接的remote_port;然后再为每一个找到的remote_port执行一次xvip_graph_parse_one。 4.8. 函数xvip_graph_parse_one xvip_graph_parse_one()里先调用of_graph_get_next_endpoint(node, ep)取得下一个endpoint,然后再调用of_graph_get_remote_port_parent(ep) 得到remote_port的父节点。of_graph_get_next_endpoint(node, ep)会先尝试找子节点ports,再找到子节点port,然后再在子节点port里找endpoint;读取路径是 { ports { port {endpoint } } },其中ports是可选的。endpoint是port的子节点,不管其内部的属性名称,所以也可以用属性名称remote-endpoint。of_graph_get_remote_port_parent(ep)通过调用of_graph_get_remote_endpoint()得到remote_port,再调用of_graph_get_port_parent()得到父节点。of_graph_get_remote_endpoint()里读取了设备树里的"remote-endpoint"属性。 xvip_graph_parse_one()再调用xvip_graph_find_entity(),在xdev->entities里检查是否已经包含对应的entity,如果已经包含,则跳过后续处理;如果没没有,则找到的remote_port的父节点,存放到链表xdev->entities,并执行操作xdev->num_subdevs++。 最后xdev->entities里包含了所有entity。后来xvip_graph_notify_complet会根据xdev->entities,为每个entity创建一个设备。 4.9. 函数xvip_graph_notify_bound 系统发现子设备(subdev)后,调用异步处理函数xvip_graph_notify_bound获取子设备信息。xvip_graph_notify_bound根据设备树节点,匹配实体(entity)和子设备(subdev);匹配成功后,再把子设备(subdev)的指针保存到实体(entity)。 xvip_graph_notify_bound的关键代码如下: entity->entity = &subdev->entity; entity->subdev = subdev; 4.10. 函数xvip_graph_notify_complete 系统所有子设备(subdev)都被发现后,Linux会调用xvip_graph_notify_complete。xvip_graph_notify_complete调用xvip_graph_build_one为每个entity创建Link;调用xvip_graph_build_dma做Create links for DMA channels;并为每个实体(entity)注册V4L2子设备v4l2_device_register_subdev_nodes ;最后调用media_device_register注册media设备。 4.11. 函数xvip_graph_build_one 函数xvip_graph_build_dma在每个entity及其远端模块之间创建Link。 函数xvip_graph_build_one先调用函数of_graph_get_next_endpoint从设备的设备树里找到下一个endpoint(struct device_node)。与之前描述一样,of_graph_get_next_endpoint的读取路径是 { ports { port {endpoint} } },endpoint是port的子节点,不管其内部的属性名称,所以也可以用属性名称remote-endpoint。函数xvip_graph_build_dma接着调用v4l2_fwnode_parse_link,得到对应的link(struct v4l2_fwnode_link)。接着根据link中的端口号(local_port)取得pad信息,判断出是否是目的端(sink)端口;如果是目的端(sink)端口,则忽略。另外还忽略DMA,它由xvip_graph_build_dma处理。接下来再调用函数xvip_graph_find_entity,根据link中的远端节点(remote_node),得到远端的entity。最后调用media_create_pad_link,当前entity作为源端(source),远端entity作为目的端(sink)的media_entity和media_pad,创建媒体pad的链接(link) 4.12. 函数xvip_graph_build_dma 函数xvip_graph_build_dma为DMA模块及其远端模块之间创建Link。 函数xvip_graph_build_dma先调用函数of_graph_get_next_endpoint从设备的设备树里找到下一个endpoint(struct device_node)。函数xvip_graph_build_dma接着调用v4l2_fwnode_parse_link,得到对应的link(struct v4l2_fwnode_link),根据link中的端口号(local_port),找到对应的DMA(struct xvip_dma)。接下来再调用函数xvip_graph_find_entity,根据link中的远端节点(remote_node),得到远端的entity。然后设置源端(source)/目的端(sink)的media_entity和media_pad,最后调用media_create_pad_link创建媒体pad的链接(link)。 4.13. 函数xvip_graph_find_dma 函数xvip_graph_build_dma根据指定的port号,在xdev->dmas里找DMA,如果找到,就返回对应的的struct xvip_dma的指针。 4.14. 函数xvip_graph_find_entity 函数xvip_graph_find_entity根据指定的设备节点(struct device_node),在xdev->entities里找entity,如果找到,就返回对应的的struct xvip_graph_entity的指针。 5. 关键数据 5.1. subdevs 其中subdevs是一个指针,指向(struct v4l2_async_subdev *)的数组(是指针数组),包含了这个设备下的所有subdev的指针,根据遍历xdev->entities填满这个数组。xdev->entities由processedxvip_graph_parse_one()根据设备树找到相关的子设备填充。 5.2. group ID 组ID(struct v4l2_subdev里有成员grp_id。v4l2_subdev_init()里把其初始化为0。Xilinx没有设置grp_id,所以都是0.) 5.3. xvip_graph_notify_ops xvip_graph_notify_ops指向bound和complete函数,如果成功匹配设备,.bound()回调函数将会被调用,当所有的子设备全部被加载完毕之后,.complete() 回调函数就会被调用: 6. 后续任务 还有很多代码可以分析,比如HDMI RX的驱动、TPG的驱动、m2m的驱动。 这样你了解了吗?

    时间:2020-10-23 关键词: Xilinx Linux v4l2 管道驱动程序

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章