Solidigm推动Physical Stream技术,提升QLC SSD寿命与性能(一)
摘要
为了解决 SSD 的写放大、GC 等问题带来的挑战,给业务提供更强大的存储能力支撑,释放数据价值,Solidigm 基于业界领先的QLC SSD 定义了一种新型的存储方案:Physical Stream。Physical Stream 支持在 Stream Mode 与 Non-Stream Mode 功能之间灵活进行切换。在切换为 Stream Mode 时,该方案能够通过减少写放大等方式提升 SSD 的耐用性,同时提升带宽以及每秒读写次数 (IOPS) 性能,也降低了IO 时延,从而避免了硬件改造所带来的成本支出。
此外,围绕客户业务层应用需求,Solidigm在应用场景优化了 Physical Stream的软硬件方案的产品适配工作。并且通过业务 I/O 工具进行了模拟真实场景测试,证明该方案可以实现更高的性能密度、更低的成本、更高的带宽与更高的 SSD 耐用性,为多云内容分发网络 (CDN)、RocksDB 业务的快速发展提供云存储助力,帮助最终用户高效释放数据价值。
概述
由于在性能上具备突出优势,以及拥有成本的持续降低,基于 NVMe 协议的固态盘(SSD) 在各行各业中得到了快速的应用,并成为主流的存储设备。在此趋势下,推动 SSD 的创新,提升 SSD 的性能、耐用性,并降低拥有成本也就具有尤为重要的意义。其中一个棘手的挑战在于,SSD 在使用过程中可能出现写放大、垃圾回收 (GC) 等现象,严重影响 SSD 的寿命与成本。
为了解决 SSD 的写放大、GC 等问题带来的挑战,给业务提供更强大的存储能力支撑,释放数据价值, Solidigm 一直在努力设计和开发新型存储方案。在过去一年中,基于一些实际的客户用例, Solidigm SSD 定义了一种新型的存储方案:Physical Stream。Physical Stream 支持在 Stream Mode 与 Non-Stream Mode 功能之间灵活进行切换。在切换为 Stream Mode 时,该方案能够通过减少写放大等方式提升 SSD 的耐用性,同时提升带宽以及每秒读写次数 (IOPS) 性能,也降低了IO 时延,从而避免了硬件改造所带来的成本支出。
此外,围绕业务层应用的需求, Solidigm还与客户合作开展了基于 Physical Stream的软硬件方案的产品适配工作。采用了Solidigm 的四层单元 (Quad-Level Cell, QLC) SSD,并且通过业务 I/O 工具进行了真实场景测试,证明该方案可以实现更高的性能密度、更低的成本、更高的带宽与更高的 SSD 耐用性,为多云内容分发网络 (CDN)、RocksDB 业务的快速发展提供云存储助力,帮助最终用户高效释放数据价值。
图 1. CDN 加速的内容服务业务**
挑战
在实际业务运营过程中,我们在很多客户那里发现,目前的 SSD 还存在很大的潜力开展技术创新,以满足业务发展对于存储系统的差异化要求。这主要体现在以下几个方面:
带宽利用率: 大部分客户本身业务层面性能开销较小,然而因为多分区的使用,导致 SSD 内部垃圾回收,因此带宽利用率仍有进一步提升的空间。
SSD 耐用性: 大部分客户的CDN场景以 LSM-tree 的模型进行数据存储,该模型是业界一个非常通用的闪存存储数据结构模型,广泛存在于各种列存储数据库系统中,对闪存非常友好,使传统的 SSD 写放大有了很大的改善。
成本: 带宽利用率、SSD 耐用性都会影响 SSD 的总体拥有成本。该技术期望能够通过进一步优化,持续降低成本。
SSD 接口协议演进
助力化解写放大、垃圾回收挑战
随着数字化转型的深入,数据成为企业最具价值的资产之一,部署大容量、高性能、高经济性的存储系统成为企业释放数据价值的重要方式。这一需求驱动着SSD 的不断升级迭代。Solidigm积极创新,在过去很短的时间从SLC快速迭代到MLC、TLC、 QLC,再加上3D堆叠工艺的加持,存储密度不断加大,如图 2所示。
图 2. SSD NAND介质的迭代—密度越来越高**
随着业务对多路虚拟化,低延迟的需求越来越强烈,传统的SSD已经渐渐满足不了用户的需求了。这些需求主要体现在需要提升不同虚机数据的隔离性,减少 SSD 的垃圾回收,延长 SSD 的使用寿命即耐用性,降低成本。
首先需要改善的一个重点问题是垃圾回收(GC)所带来的耐用性等问题:SSD 的 NAND Flash 底层大多数是 NMOS 存储单元,为了保证磨损平衡和性能,需要不定期做GC,擦除出干净的块(Block),如图 3所示。在 GC 过程中,需要用一部分空闲空间作为 GC 过程中未过期数据的存储,这涉及到数据的迁移和预留空间(Spare)的占用,而且频繁的 GC 还会导致 SSD 耐用性不断降低。此外,如果需要进行擦除,还需要将有效数据都移动至新的 NAND block。这无疑会造成写放大问题。
图 3. 标准SSD需要不定期做垃圾回收**
第二个要解决的重点问题是数据隔离,在上述过程中,Host 会根据平均磨损情况,开新的条带将数据写入不同的物理块。而SSD的磨损平衡策略也会把数据做Dfrag的时候分散到不同的物理块。这两个场景中,SSD不会对数据做任何隔离,无论用户是按分区管理还是按namespace管理,不同的分区或者不同的namespace之间是没有物理隔离机制的。这对需要物理隔离且担心隔壁读写干扰的应用是不友好的。
SSD 数据放置 (Data Placement) 技术有助于解决这一问题。Data Placement 支持驱动器提供一个到主机的接口,允许它将主机写入线程映射到驱动器内部写入,支持在逻辑或者物理位置进行数据分离。目前,SSD 的 Data Placement 技术路线包括 Open Channel、Stream、FDP、ZNS 等。图 4表述了最近几年这些技术的一个演进过程。
图 4. NVMe SSD Data Placement技术近年的演进路径**
其中,Open Channel 不仅需要数据放置管理,还需要上层软件对介质进行管理。其管理过程会非常复杂而难以维护,基本上已经被业界放弃。ZNS 是当前国内研究的热门方向,其优势在于上层软件可以完全控制驱动器上的 Data Placement,杜绝内部 GC与预留空间的可能性,驱动器级别的 GC 将大大降低。这意味着更少的写放大和更高的 SSD 耐用性,但缺陷是需要复杂的软件更改,不适合每个客户。FDP技术是行业下一波研究的热点,它可以灵活的支持按擦除块和条带进行分割,同时支持随机和顺序写入。下图是二者跟Physical Stream的简单对比。
图 5. 不同 Data Placement 方案的对比**
另外,还有一个过渡技术叫做Multi-Stream,该技术已经进入 NVMe1.3 协议多年,它的含义是:所有来自于主机 (Host) 下发的写数据都会带一个 hint,通过该 hint 将用户数据 LBA 以一定的属性和规则进行区分,将具备相同属性的用户数据作为一个数据集合进行写入,称为 Stream,并且指定 Stream ID。SSD 固件可以通过该 Stream ID 进行 I/O 调度或者 FTL 设计,以满足不同的用户需求。同时,应用层将用户数据按照不同的生命周期进行标记和归类,即 Stream ID(通常≤8 个),然后针对 FTL 以及 Data Placement 进行重新设计。例如,将不同生命周期的冷或者热数据分开放置,可以大大提升 SSD 的 GC 效率,减小其写放大,从而带来改善的收益和用户体验。下图是支持Multi-stream技术的SSD和不支持的SSD原理对比图。
图 6. Stream SSD 与普通 SSD 的数据放置模式**
Multi-stream SSD 能够将不同生命周期更新频率的数据分开,并且用 Stream ID 表示,在 SSD FTL 层面会以不同的 Stream 分别进入到不同的 NAND Erase Block。对于那些更新频率较快的热数据,其 GC 的概率也更高,但是由于热数据所在的 NAND Erase Block 里并没有掺杂冷数据和温数据,因此针对只有热数据的 Band 的 GC,其移动的有效数据会有一定程度的减少,对于耐用性损耗、性能与服务等级协议 (QoS) 有一些提升。
注释:** 表示图片来源于 Solidigm
33-iFix团队10月26号现场培训课程分享(七)
控制台命令是智能主板维修必须掌握的知识点,也是必备利器,掌握这个知识点可以让你的维修过程事半功倍。
控制台分BootLoader控制台和安卓控制台,这个概念一定要分清楚,BootLoader控制台下可以执行擦空、强制升级、DDR自检、存储容量查询、串口打开关闭等。
安卓控制台下最常用的就是屏参修改,这也是换屏的维修师傅比较喜欢的知识,因为换屏时,很多时候都没有一模一样的原装型号屏,基本通过代换完成,代换后由于屏厂家和参数可能不一样,出现花屏、倒屏、灰屏等。都会做后期调试,比如改逻辑板,边条等,当然也有很多是改硬件不能完成的,掌握安卓控制台改屏参,就会有更多代换可能性。
也有一部分是自己误调试引起灰屏,或者换板时内置屏参本身不匹配引起的灰屏都会用到这个知识点,在一文中对MSD6A818芯片方案做了一个介绍,大家应该有一些共鸣。
我们先来看看几大芯片厂家控制台进入方法:
下面我们先聊聊BootLoader控制台下的几个方案常用命令。
一、Mstar
1、擦空 ,在Mstar方案里,有三种组合,Nor+Nand,Nor+EMMC,单EMMC,针对Nand和EMMC的擦除命令有点区别,但是擦空的时候一定要注意,工厂提供的U盘升级软件是不是支持空片烧录,如果不支持,那么你就好好的哭一场吧,擦空后你会发现再也不能升级了,或者怎么升级也生不好,不过对有RT809H的维修工程师来说,这不是什么大事,只要擦除之前对Nand或EMMC做一个5%左右的备份就可以了,擦除后再写入5%。
当然对拥有RT809H的用户都会会心一笑,可以用编程器直接擦呀,而且编程器自带擦空功能可以对一部分EMMC有修复功能。
Nor+Nand:nand erase;nand scrub。
Nor+EMMC:mmc erase。
单EMMC:mmc erase。
2、升级, 升级是我们比较常用的一个命令,在Mstar方案中,不同的组合结构,不同的升级文件名,升级命令都不一样,例如6i48的命令有
usb reset
ustar
这个命令是针对U盘升级文件为nand、script两个文件夹的,并不是所有MSD6i48都一样,同时U盘升级文件要支持空片烧录,不然只有用网线升级。
控制台下显示命令行格式为下图。
上图就是输入usb reset后没识别到U盘的一段打印,不同的主板设计的U盘升级口不一样,这个要注意,这时候就要检查U盘是否插入升级口,U盘是否正常被识别。
上图为正常识别到U盘的打印信息,这时候才能继续输入升级命令。
输入升级命令ustar后回车,升级软件正常就会监控到升级打印进度。
上图是早期的网络电视机主板升级命令,再例如早期的智能机MSD6A801芯片方案,用第一批乐视S40/S50举例,升级文件名为bin格式,
升级命令为uup或者usb_check_bin都可以。
后期的MSD6A628和MAD6A918开始一直到现在,升级文件名均为bin格式,升级命令为更简单的"cu",一定要小写。
在升级过程中,可以看到打印信息提示所需文件名(如下图),如果文件名错误是升级不成功的,所以遇到升级不成功需要检查U盘内的文件名是否与打印信息提示文件名相符。
3、打开串口,在我们维修Mstar方案的主板时,经常会看到串口关闭的打印,这种串口关闭的打印比较明显的标志就是 UART BUS OFF!! 串口关闭很是令维修人员头疼,因为它被关闭后,将看不到所有的打印细节,也就看 不到引导是否运行完整,主程序是否加载正常。
如果想看到这些细节来分析故障点,那么就要串口必须打开,串口关闭分两种情况,一种是能进控制台,一种是不能进控制台。能进控制台的只需要输入串口打开命令就可以了,下面我们以TCL MS828板举例。
AC_ON
MIU0_DQS-OK
MIU1_DQS-OK
BIST0-OK
BIST1-OK
_U
Relocation Offset is: 01200000
[AT][MB][start ub][321]
U-Boot 2011.06 (Dec 30 2015 - 14:41:55) MBOT-2.12.$Change: 1142033 $
[MIU INFO] miu opencreate instance at 345aa550 with private size 80 bytes at 345aa598
create instance at 345aa5f0 with private size 48 bytes at 345aa638
uboot held at [342ddf60~36200000],size=01f220a0
CPU : Muji
Board: BD_MST072B_20AEV_MUJI
DRAM: 354 MiB
Now running in RAM - U-Boot at: 35300000
FCIE_MODE_GPIO_PAD_DEFO_SPEED
FCIE_MODE_8BITS_MACRO_HIGH_SPEED
FCIE_MODE_32BITS_MACRO_HS200
eMMC: HS200 200MHz
eMMC 7.28 GB [E8FFF8h]
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Set MAC default
MAC: 0x0: 0x30: 0x1b: 0xba:0x2: 0xdb
#######################################################################
#######################################################################
[CPU INFO] cpu opencreate instance at 345baaf8 with private size 44 bytes at 345bab40
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
msIR_Initialize
[AT][MBoot][Driver Init][490]
MPOOL size : 0x200000
Changelist: 24543697
============= set bootargs ===============
Hit any key to stop autoboot: 0
run_ubootcmd_from_mtd0::368::cmd=mmc read.p 0x25000000 misc 1088
AC on
Writing to MMC(0)... 128 blocks written: OK
128 blocks written: OK
done
mmc change mount : tclconfig
Loading file "/mstar/tvconfig/config/PM.bin" at offset 0x0 from mmc device 0 partition tclconfig
24575 bytes read
Wait for PM51 stand波H?KVS&$琞Z恫 code time Jan 08 2016 20:00:00
Hi Main
CRC Check OPEN: 1
Power Down
standby by tcl system
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Set MAC default
MAC: 0x0: 0x30: 0x1b: 0xba:0x2: 0xdb
#######################################################################
#######################################################################
[CPU INFO] cpu opencreate instance at 345baaf8 with private size 44 bytes at 345bab40
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
msIR_Initialize
[AT][MBoot][Driver Init][497]
MPOOL size : 0x200000
Changelist: 24543697
============= set bootargs ===============
Hit any key to stop autoboot: 0
run_ubootcmd_from_mtd0::368::cmd=mmc read.p 0x25000000 misc 1088
DC on !!
Writing to MMC(0)... 128 blocks written: OK
128 blocks written: OK
done
create instance at 345bae50 with private size 344 bytes at 345bae98
MDrv_PNL_Init u32PnlRiuBaseAddr = 1f200000
MDrv_PNL_Init u32PMRiuBaseAddr = 1f000000
LINK TYPE = EXT
[MHal_PNL_Init_MOD][2141]Vx1 2 division
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=40
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msSetVBY1RconValue][1734]u16temp= 11
Vx1 2 division[_MDrv_PNL_Init_LPLL][333]pstPanelInitData->u16Width=3840, pstPanelInitData->u16Height=2160
[_MDrv_PNL_Init_LPLL][335]u16HTotal=4400,u16VTotal=2260,pstPanelInitData->u16HTotal=4400,pstPanelInitData->u16VTotal=2260, u16DefaultVFreq=600
@@11=11
[_MDrv_PNL_Init_Output_Dclk][379]pstPanelInitData->u16Width=3840, pstPanelInitData->u16Height=2160
[_MDrv_PNL_Init_Output_Dclk][381]u16HTotal=4400,u16VTotal=2260,pstPanelInitData->u16HTotal=4400,pstPanelInitData->u16VTotal=2260, u16DefaultVFreq=600
@@11=11
@@11=11
zs, [MDrv_PNL_SetPanelType, 697]reset vby1 packer process.
[MApi_XC_MLG_GetStatus, 1874]No instance existed, please get an instance by calling MApi_XC_Init() first
Init PWM0Init PWM1Init PWM2[msReadEfuse][1698]u32Result=50000051, after mask u32Result=40
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msSetVBY1RconValue][1734]u16temp= 11
jeremy.chan[MsDrv_PNL_Init][885]
Wait for PM51 standby DRAM ...........PM51 run ok...........
[CPU INFO] cpu opencreate instance at 345baff8 with private size 44 bytes at 345bb040
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
UART BUS OFF!!
上面是开机所有打印,可以看到最后面明显的串口关闭标志,连Linux内核加载标志Starting kernel ... 都看不到,如果要打开串口,先重新上电进入控制台,如下:
AC_ON
MIU0_DQS-OK
MIU1_DQS-OK
BIST0-OK
BIST1-OK
_U
Relocation Offset is: 01200000
[AT][MB][start ub][329]
U-Boot 2011.06 (Dec 30 2015 - 14:41:55) MBOT-2.12.$Change: 1142033 $
[MIU INFO] miu opencreate instance at 345aa550 with private size 80 bytes at 345aa598
create instance at 345aa5f0 with private size 48 bytes at 345aa638
uboot held at [342ddf60~36200000],size=01f220a0
CPU : Muji
Board: BD_MST072B_20AEV_MUJI
DRAM: 354 MiB
Now running in RAM - U-Boot at: 35300000
FCIE_MODE_GPIO_PAD_DEFO_SPEED
FCIE_MODE_8BITS_MACRO_HIGH_SPEED
FCIE_MODE_32BITS_MACRO_HS200
eMMC: HS200 200MHz
eMMC 7.28 GB [E8FFF8h]
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Set MAC default
MAC: 0x0: 0x30: 0x1b: 0xba:0x2: 0xdb
#######################################################################
#######################################################################
[CPU INFO] cpu opencreate instance at 345baaf8 with private size 44 bytes at 345bab40
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
msIR_Initialize
[AT][MBoot][Driver Init][493]
MPOOL size : 0x200000
Changelist: 24543697
============= set bootargs ===============
Hit any key to stop autoboot: 0
<< MStar >>#
<< MStar >>#
<< MStar >>#
<< MStar >>#
<< MStar >>#
<< MStar >># setenv UARTOnOff on
<< MStar >># saveenv
Saving Environment to MMC...
Writing to MMC(0)... 128 blocks written: OK
128 blocks written: OK
done
<< MStar >># reset
输入以上三个命令后会自动重启,我们再看看打印信息发生了什么变化。
<< MStar >># reset
[AT][MB][start do_reset]
do_reset: Using RIU_MAP: 0x1f000000, at 55
UART_115200
AC_ON
MIU0_DQS-OK
MIU1_DQS-OK
BIST0-OK
BIST1-OK
_U
Relocation Offset is: 01200000
[AT][MB][start ub][341]
U-Boot 2011.06 (Dec 30 2015 - 14:41:55) MBOT-2.12.$Change: 1142033 $
[MIU INFO] miu opencreate instance at 345aa550 with private size 80 bytes at 345aa598
create instance at 345aa5f0 with private size 48 bytes at 345aa638
uboot held at [342ddf60~36200000],size=01f220a0
CPU : Muji
Board: BD_MST072B_20AEV_MUJI
DRAM: 354 MiB
Now running in RAM - U-Boot at: 35300000
FCIE_MODE_GPIO_PAD_DEFO_SPEED
FCIE_MODE_8BITS_MACRO_HIGH_SPEED
FCIE_MODE_32BITS_MACRO_HS200
eMMC: HS200 200MHz
eMMC 7.28 GB [E8FFF8h]
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Set MAC default
MAC: 0x0: 0x30: 0x1b: 0xba:0x2: 0xdb
#######################################################################
#######################################################################
[CPU INFO] cpu opencreate instance at 345baaf8 with private size 44 bytes at 345bab40
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
msIR_Initialize
[AT][MBoot][Driver Init][530]
MPOOL size : 0x200000
Changelist: 24543697
============= set bootargs ===============
Hit any key to stop autoboot: 0
run_ubootcmd_from_mtd0::368::cmd=mmc read.p 0x25000000 misc 1088
AC on
Writing to MMC(0)... 128 blocks written: OK
128 blocks written: OK
done
mmc change mount : tclconfig
Loading file "/mstar/tvconfig/config/PM.bin" at offset 0x0 from mmc device 0 partition tclconfig
24575 bytes read
Wait for PM51 stand波H?KVS&$琞Z恫 code time Jan 08 2016 20:00:00
Hi Main
CRC Check OPEN: 1
Power Down
standby by tcl system
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Set MAC default
MAC: 0x0: 0x30: 0x1b: 0xba:0x2: 0xdb
#######################################################################
#######################################################################
[CPU INFO] cpu opencreate instance at 345baaf8 with private size 44 bytes at 345bab40
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
msIR_Initialize
[AT][MBoot][Driver Init][530]
MPOOL size : 0x200000
Changelist: 24543697
============= set bootargs ===============
Hit any key to stop autoboot: 0
run_ubootcmd_from_mtd0::368::cmd=mmc read.p 0x25000000 misc 1088
DC on !!
Writing to MMC(0)... 128 blocks written: OK
128 blocks written: OK
done
create instance at 345bae50 with private size 344 bytes at 345bae98
MDrv_PNL_Init u32PnlRiuBaseAddr = 1f200000
MDrv_PNL_Init u32PMRiuBaseAddr = 1f000000
LINK TYPE = EXT
[MHal_PNL_Init_MOD][2141]Vx1 2 division
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=40
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msSetVBY1RconValue][1734]u16temp= 11
Vx1 2 division[_MDrv_PNL_Init_LPLL][333]pstPanelInitData->u16Width=3840, pstPanelInitData->u16Height=2160
[_MDrv_PNL_Init_LPLL][335]u16HTotal=4400,u16VTotal=2260,pstPanelInitData->u16HTotal=4400,pstPanelInitData->u16VTotal=2260, u16DefaultVFreq=600
@@11=11
[_MDrv_PNL_Init_Output_Dclk][379]pstPanelInitData->u16Width=3840, pstPanelInitData->u16Height=2160
[_MDrv_PNL_Init_Output_Dclk][381]u16HTotal=4400,u16VTotal=2260,pstPanelInitData->u16HTotal=4400,pstPanelInitData->u16VTotal=2260, u16DefaultVFreq=600
@@11=11
@@11=11
zs, [MDrv_PNL_SetPanelType, 697]reset vby1 packer process.
[MApi_XC_MLG_GetStatus, 1874]No instance existed, please get an instance by calling MApi_XC_Init() first
Init PWM0Init PWM1Init PWM2[msReadEfuse][1698]u32Result=50000051, after mask u32Result=40
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msReadEfuse][1698]u32Result=50000051, after mask u32Result=11
[msSetVBY1RconValue][1734]u16temp= 11
jeremy.chan[MsDrv_PNL_Init][885]
Wait for PM51 standby DRAM ...........PM51 run ok...........
[CPU INFO] cpu opencreate instance at 345baff8 with private size 44 bytes at 345bb040
CPUIoctl - MDrv_CMD_CPU_QueryClock
[UTOPIA INFO] close moduleNames[38]: MODULE_CPU
mmc change mount : tclconfig
Size of file "/mstar/tvconfig//boot0.jpg" from mmc device 0 partition tclconfig: 540807 bytes
Loading file "/mstar/tvconfig//boot0.jpg" at offset 0x0 from mmc device 0 partition tclconfig
540807 bytes read
create instance at 345baff8 with private size 312 bytes at 345bb040
[AT][MB][JPD Decode][2366]
[UTOPIA INFO] close moduleNames[35]: MODULE_NJPEG_EX
create instance at 345baff8 with private size 1720 bytes at 345bb040
[GOP INFO] gop opencreate instance at 345bb700 with private size 7760 bytes at 345bb748
[GOP_SetGop0GwinInfo]WidthEnd 0x0 >WidthStart 0x0
[GOP_SetGop0GwinInfo]WidthEnd 0x0 >WidthStart 0x0
[AT][MB][Show Logo][2407]
---MsDrv_PNL_BackLigth_On:931 Set MsDrv_PNL_BackLigth_On DelayTask 437
u32NuttxVirtAddr =345edbf0
The version of tee.bin is 00:00:00:00
MPOOL size : 0x200000
R2 Boot from 0x3ef40000
[CPU INFO] cpu opencreate instance at 345bd618 with private size 44 bytes at 345bd660
[AT][MBoot][Boot Nuttx][3492]
## Booting kernel from Legacy Image at 25000000 ...
Image Name: MStar-linux
Image Type: ARM Linux Multi-File Image (uncompressed)
Data Size: 13643601 Bytes = 13 MiB
Load Address: 20280000
Entry Point: 20280000
Contents:
Image 0: 11316648 Bytes = 10.8 MiB
Image 1: 2326941 Bytes = 2.2 MiB
## Loading init Ramdisk from multi component Legacy Image at 25000000 ...
ramdisk start = 0x25acadf4, ramdisk end = 0x25d02f91
-usb_stop(USB_PORT0)
-usb_stop(USB_PORT1)
-usb_stop(USB_PORT2)
-usb_stop(USB_PORT3)
-usb_stop(USB_PORT4)
Loading Multi-File Image ... OK
[AT][MB][start kr][3560]
Starting kernel ...
xy let the dog out in mboot before starting kernel, MI feed the dog ! wdt 120 secs
set 64 bit mode
__fdt_pointer=0x23000000
[ 0.000357] tommy: thread_info_cache_init
[ 0.354902] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 0.558843] [SERIAL INPUT MANAGE] disable_serial : ~~bye(len:5)
[ 0.564787] [SERIAL INPUT MANAGE] enable_serial : (len: 0)
[ 0.570276] [KDEBUGD] enter : _MStar
[ 0.570276]
[ 0.576812] [SERIAL INPUT MANAGE] Managed tty_struct(.name:ttyS0) is freed !!!
[ 0.586584] init: /init.muji.rc: 280: ignored duplicate definition of service 'dhcpcd_bnep0'
[ 0.595331] init: /init.muji.rc: 455: invalid option 'chmod'
[ 0.601003] init: /init.muji.rc: 456: invalid option 'chmod'
[ 0.606700] init: /init.muji.rc: 466: invalid option 'chmod'
[ 0.724345] init: /dev/hw_random not found
[ 0.728597] [SERIAL INPUT MANAGE] disable_serial : ~~bye(len:5)
[ 0.734543] [SERIAL INPUT MANAGE] enable_serial : (len: 0)
[ 0.740032] [KDEBUGD] enter : _MStar
[ 0.740032]
[ 0.745264] [SERIAL INPUT MANAGE] Managed tty_struct(.name:ttyS0) is freed !!!
[ 0.757625] init: /dev/hw_random not found
[ 0.762776] fs_mgr: Warning: unknown flag block_validity
[ 0.768143] fs_mgr: Warning: unknown flag nodiscard
[ 0.773032] fs_mgr: Warning: unknown flag data=ordered
[ 0.778230] fs_mgr: Warning: unknown flag journal_checksum
[ 0.783734] fs_mgr: Warning: unknown flag block_validity
[ 0.789067] fs_mgr: Warning: unknown flag nodiscard
[ 0.793999] fs_mgr: Warning: unknown flag data=ordered
[ 0.799148] fs_mgr: Warning: unknown flag journal_checksum
[ 0.804678] fs_mgr: Warning: unknown flag block_validity
[ 0.810000] fs_mgr: Warning: unknown flag nodiscard
[ 0.814897] fs_mgr: Warning: unknown flag data=ordered
[ 0.820045] fs_mgr: Warning: unknown flag journal_checksum
[ 1.629033] init: cannot find '/system/bin/install-recovery.sh', disabling 'flash_recovery'
[ 1.914146] [SERIAL INPUT MANAGE] disable_serial : ~~bye(len:5)
[ 1.921541] [SERIAL INPUT MANAGE] enable_serial : (len: 0)
[ 1.928764] [KDEBUGD] enter : _MStar
后面太长,省略掉,现在是不是就可以看到很详细的打印了?有朋友问如果不能进入控制台该怎么办呢?不用担心,RT809H早已准备好不能进入命令行的串口打开方法。
在主界面芯片印字框输入EMMC,下方分类框选EMMC_ISP_MST_UART_ON这一项,飞线连接后直接点左侧写入,就会直接打开串口,查看到详细打印,操作简单直接。
下节精彩继续!
相关问答
如何查看linux根分区下全部目录及文件的大小-ZOL问答搜索《linux就该这么学》,第6章存储结构与磁盘划分参考下!有用(0)回复jqmgls|xargs-I{}du-s{}希望对你有帮助。有用(0)回复313300你可...
像皮的英语单词_作业帮[回答]eraser
带有er的英语单词有哪些?1)-an,-ian,表示"……地方的人,精通……的人”American,historian,2)-al,表示"具有……职务的人"principal,3)-ant,...
新宝下载手机(2024已更新(V3.3.2/AI回答)新宝下载手机:FNFErase-FridayNightMusic(FNFEraseFridayNightMusic安卓版)v0.0.4Thatqualifiesaswhat...
fast和quick的区别?比如:一辆汽车行驶的非常快(It'saveryfastcar),一个人跑的非常快(Herunsveryfast)。在此时,我们需要用fast来形容。quick,quickly表...
...tandthattheotherperson'sviewiswrong. Theconcept...[回答]1.self-centered/subjective2.involves3.determine/define/k...
er这样的组合的单词有哪些?1、error——/ˈerə/错误;差错;出错;误差2、erase——/ɪˈreɪz/抹去;擦掉;把(笔迹;痕迹)擦去;消除;破坏;消灭;杀死;从(磁...
为什么收到了findmyiphonehasbeendisabled?寻找手机被关闭,就是说别人把你手机的找寻功能给关了。寻找手机被关闭,就是说别人把你手机的找寻功能给关了。
抹平的抹怎么读_作业帮[回答]抹mǒ涂:涂抹.抹粉(喻美化或掩饰).抹黑(喻丑化).抹子(瓦工用来抹灰泥的器具.亦称“抹刀”).揩,擦:抹拭.哭天抹泪.除去,勾掉,不计在内:抹煞.轻微的...
怎么翻译“决定是否删除这个文件”_作业帮[回答]decidewhethertodeletethefile