ARMv8架构u-boot启动流程详细分析|天天热点
扫描关注一起学嵌入式,一起学习,一起成长本文基于armv8架构来对u-boot进行启动流程分析,u-boot版本为202
2023-05-05官方将启动分为了BL1,BL2,BL31,BL32,BL33阶段,根据顺序,芯片启动后首先执行BL1阶段代码,接着验签启动BL2,BL2根据具体设计启动BL31或者BL33,BL32只有在有BL31时才可能会存在并被验签加载启动。
(资料图)
armv8分为Secure World和Non-Secure World(Normal World),四种异常级别从高到低分别为EL3,EL2,EL1,EL0。
Secure World就是可以执行可信的firmware和app,比如密码支付,指纹识别等一系列依赖安全保证的服务。Non-Secure World就是我们常见的u-boot,linux,qnx等裸机程序或者操作系统。
EL3具有最高管理权限,负责安全监测和安全模式切换。EL2主要提供了对虚拟化的支持。EL1是一个特权模式,能够执行一些特权指令,用于运行各类操作系统,在安全模式则是可信任OS。EL0是无特权模式,所有APP应用都在EL0。
上图中的BL1,BL2,BL31,BL32,BL33分别对应如下功能:
BL1:是一切信任的根,一般就是固化在ROM中的一段启动加载代码,用于引导bl2,并对bl2进行验签保证可信任执行;
BL2:一般是在flash中的一段可信安全启动代码,它的可信建立在bl1对它的验证,主要完成一些平台相关的初始化,比如对ddr的初始化等,并在完成初始化后寻找BL31或者BL33进行执行;如果找到了BL31则不会继续调用BL33,如果没有BL31则BL33必须有;
BL31:BL31不像BL1和BL2是一次性运行的,它作为最后一道可信任固件存在,在系统运行时通过smc指令陷入EL3调用系统安全服务或者在Secure World和Non-Secure World之间进行切换;在完成BL31初始化后会去寻找BL32或者BL33进行验签后加载执行;
BL32:OPTee OS + 安全app,它是一个可信安全的OS运行在EL1并在EL0启动可信任APP(上述的指纹验证等app),并在Trust OS运行完成后通过smc指令返回BL31,BL31切换到Non-Seucre World继续执行BL33;
BL33:非安全固件,也就是我们常见的UEFI firmware或者u-boot也可能是直接启动Linux kernel;
启动BL1,BL2,BL31,BL32则是一个完整的ATF信任链建立流程(ARM Trusted Firmware),像常见的PSCI(Power State Coordination Interface)功能则是在ATF的BL31上实现;
综上所述,可知u-boot是一个运行在非安全世界的bootloader,负责加载各类操作系统,并提供丰富的驱动接口;并根据是否存在安全固件还可以进行不同的boot流程,如下。
u-boot,u-boot-spl,u-boot-tpl的关系:对于一般嵌入式而言只需要一个u-boot作为bootloader即可,但是在小内存,或者有atf的情况下还可以有spl,tpl;
spl:Secondary Program Loader,二级加载器
出现spl和tpl的原因最开始是因为系统sram太小,rom无法在ddr未初始化的情况下一次性把所有代码从flash,emmc,usb等搬运到sram中执行,也或者是flash太小,无法完整放下整个u-boot来进行片上执行。
所以u-boot又定义了spl和tpl,spl和tpl走u-boot完全相同的boot流程,不过在spl和tpl中大多数驱动和功能被去除了,根据需要只保留一部分spl和tpl需要的功能,通过CONFIG_SPL_BUILD和CONFIG_TPL_BUILD控制;
一般只用spl就足够了,spl完成ddr初始化,并完成一些外设驱动初始化,比如usb,emmc,以此从其他外围设备加载u-boot,但是如果对于小系统spl还是太大了,则可以继续加入tpl,tpl只做ddr等的特定初始化保证代码体积极小,以此再次从指定位置加载spl,spl再去加载u-boot。
从目前来看,spl可以取代上图中bl2的位置,或者bl1,根据具体厂商实现来决定,有一些芯片厂商会将spl固化在rom中,使其具有从emmc,usb等设备加载u-boot或者其他固件的能力。
当然在有atf的情况下可以由atf加载u-boot,或者由spl加载atf,atf再去加载u-boot。甚至在快速启动的系统中可以直接由spl启动加载linux等操作系统而跳过启动u-boot;在上图中arm官方只是给出了一个建议的启动信任链,具体实现都需要芯片厂商来决定;
后续分析启动流程中会在具有SPL和TPL的地方拓展它们的分叉执行路径尽量把SPL和TPL的功能也一并分析;
u-boot使用了同Linux一样的编译配置方式,即使用kbuild系统来管理整体代码的配置和编译,通过defconfig来定制各种不同厂商的芯片bootloader二进制程序。编译只需要注意通过环境变量或者命令行参数的方式引入一个交叉编译工具即可:
CROSS_COMPILE:定义交叉编译工具链,可以是aarch64-linux-gnu-,arm-none-eabi-或者ppc-linux-gnu-等等;u-boot有几个配置是需要由对应board配置的。
SYS_ARCH,SYS_CPU,SYS_SOC,SYS_BOARD,SYS_VENDOR,SYS_CONFIG_NAME;一般在board/vendor/board/Kconfig中可全部定义,部分SYS_CPU,SYS_SOC也可以在arch/xxx/Kconfig中定义,根据这几个配置即可确定使用的cpu架构,厂商,板级信息,soc信息。
Makefile会自动根据上述信息进入对应目录组织编译规则,一般如果没有自己对应的这些board信息,需要自己在对应目录建立这些Kconfig和在configs中建立defconfig。
在configs目录中保存了uboot中所有支持的board配置,比如要使用rk3399的evb板的配置信息使用如下方式即可编译出来:
makeCROSS_COMPILE=aarch64-linux-gnu-evb-rk3399_defconfigmake
如果没有对应的defconfig可以找一个与自己板级信息类似的defconfig生成一个.config,再通过menuconfig来完成自己board的配置,并最后通过savedefconfig保存为自己board的defconfig:
makeCROSS_COMPILE=aarch64-linux-gnu-evb-rk3399_defconfigmakemenuconfigmakesavedefconfigcpdefconfigconfigs/my_defconfig
下面是evb rk3399的定义:
CONFIG_SYS_ARCH="arm"CONFIG_SYS_CPU="armv8"CONFIG_SYS_SOC="rk3399"CONFIG_SYS_VENDOR="rockchip"CONFIG_SYS_BOARD="evb_rk3399"CONFIG_SYS_CONFIG_NAME="evb_rk3399"
根据CONFIG_SYS_BOARD的定义还会为每个源文件自动包含include/configs/xxxx.h头文件,evb rk3399则是include/configs/evb_rk3399.h头文件。这个头文件可在其中定义board的一些关键配置,系统的ram大小,环境变量的起始地址和大小,GIC基地址,时钟频率,是否开启看门狗等定义,可根据具体需求来定义。
u-boot使用Kconfig和include/configs/xxx.h来灵活的确定u-boot编译流程及最终生成的文件。比如当定义CONFIG_SYS_CPU为"armv8",CONFIG_SYS_ARCH为"arm"时,即确定了目标架构为armv8会自动根据Makefile进入对应目录进行编译链接。
这里只对一些常用的目录进行说明:
arch:各种架构的启动初始化流程代码,链接脚本等均在此目录对应的架构中存放;
board:包含了大部分厂商的board初始化代码,基本平台化相关的代码都在对应的board目录中,早期的一些board代码在arch/xxx/xxx-mach中,现在基本不会放在arch目录下面了;
cmd:包含了大量实用的u-boot命令的实现,比如md,cp,cmp,tftp,fastboot,ext4load等命令的实现,我们也可以在此处添加自己实现的命令;
common:包含了u-boot的核心初始化代码,包括board_f,board_r,spl等一系列代码;
configs:包含了所有board的配置文件,可直接使用;
drivers:大量驱动代码的存放处;
dts:编译生成dtb,内嵌dtb到u-boot的编译规则定义目录;
env:环境变量功能实现代码;
fs:文件系统读写功能的实现,里面包含了各类文件系统的实现;
include:所有公用头文件的存放路径;
lib:大量通用功能实现,提供给各个模块使用;
net:网络相关功能的实现;
scripts:编译,配置文件的脚本文件存放处;
tools:测试和实用工具的实现,比如mkimage的实现代码在此处;
在进行源码分析之前,首先看看u-boot的链接脚本,通过链接脚本可以从整体了解一个u-boot的组成,并且可以在启动分析中知道某些逻辑是在完成什么工作。
在armv8中,u-boot使用arch/arm/cpu/armv8/u-boot.lds进行链接。
u-boot-spl和u-boot-tpl使用arch/arm/cpu/armv8/u-boot-spl.lds进行链接,因为每个board的情况可能不同,所以u-boot可以通过Kconfig来自定义u-boot-spl.lds和u-boot-tpl.lds。
/*SPDX-License-Identifier:GPL-2.0+*//**(C)Copyright2013*DavidFeng**(C)Copyright2002*GaryJennejohn,DENXSoftwareEngineering,*/ #include #includeOUTPUT_FORMAT("elf64-littleaarch64","elf64-littleaarch64","elf64-littleaarch64")OUTPUT_ARCH(aarch64)ENTRY(_start)--------------------------------------------------------------------(1)/**(1)首先定义了二进制程序的输出格式为"elf64-littleaarch64",*架构是"aarch64",程序入口为"_start"符号;*/SECTIONS{#ifdefCONFIG_ARMV8_SECURE_BASE--------------------------------------------------(2)/**(2)ARMV8_SECURE_BASE是u-boot对PSCI的支持,在定义时可以将PSCI的文本段,*数据段,堆栈段重定向到指定的内存,而不是内嵌到u-boot中。*不过一般厂商实现会使用atf方式使其与bootloader分离,这个功能不常用;*//DISCARD/:{*(.rela._secure*)}#endif.=0x00000000;--------------------------------------------------------------(3)/**(3)定义了程序链接的基地址,默认是0,通过配置CONFIG_SYS_TEXT_BASE可修改*这个默认值。*/.=ALIGN(8);.text:{*(.__image_copy_start)---------------------------------------------------(4)/**(4)__image_copy_start和__image_copy_end用于定义需要重定向的段,*u-boot是一个分为重定向前初始化和重定向后初始化的bootloader,*所以此处会定义在完成重定向前初始化后需要搬运到ddr中数据的起始地址和结束地址;**大多数时候u-boot是运行在受限的sram或者只读的flash上,*u-boot为了启动流程统一会在ddr未初始化和重定位之前不去访问全局变量,*但是又为了保证u-boot能够正常读写全局变量,内存,调用各类驱动能力,*所以u-boot将启动初始化分为了两个部分,重定向前初始化board_f和*重定向后初始化board_r,在重定向之前完成一些必要初始化,*包括可能的ddr初始化,然后通过__image_copy_start和__image_copy_end*将u-boot搬运到ddr中,并在ddr中进行重定向后初始化,这个时候的u-boot就可以*正常访问全局变量等信息了。**如果想要在board_f过程中读写一些全局变量信息该怎么办呢?*u-boot通过定义global_data(gd)来完成此功能,*后续在分析到时会详细讲解实现方式。*/CPUDIR/start.o(.text*)--------------------------------------------------(5)/**(5)定义了链接程序的头部文本段,armv8就是*arch/arm/cpu/armv8/start.S,* start.S中所有文本段将会链接到此段中并且段入口符号就是_start;*/}/*Thisneedstocomebefore*(.text*)*/.efi_runtime:{------------------------------------------------------------(6)/**(6)在定义了efi运行时相关支持时才会出现使用的段,一般不用关心;*/__efi_runtime_start=.;*(.text.efi_runtime*)*(.rodata.efi_runtime*)*(.data.efi_runtime*)__efi_runtime_stop=.;}.text_rest:----------------------------------------------------------------(7)/**(7)除了start.o,其他的所有文本段将会链接到此段中;*/{*(.text*)}#ifdefCONFIG_ARMV8_PSCI--------------------------------------------------------(8)/**(8)同(2),是PSCI相关功能的支持,一般不会使用;*/.__secure_start:#ifndefCONFIG_ARMV8_SECURE_BASEALIGN(CONSTANT(COMMONPAGESIZE))#endif{KEEP(*(.__secure_start))}#ifndefCONFIG_ARMV8_SECURE_BASE#defineCONFIG_ARMV8_SECURE_BASE#define__ARMV8_PSCI_STACK_IN_RAM#endif.secure_textCONFIG_ARMV8_SECURE_BASE:AT(ADDR(.__secure_start)+SIZEOF(.__secure_start)){*(._secure.text).=ALIGN(8);__secure_svc_tbl_start=.;KEEP(*(._secure_svc_tbl_entries))__secure_svc_tbl_end=.;}.secure_data:AT(LOADADDR(.secure_text)+SIZEOF(.secure_text)){*(._secure.data)}.secure_stackALIGN(ADDR(.secure_data)+SIZEOF(.secure_data),CONSTANT(COMMONPAGESIZE))(NOLOAD):#ifdef__ARMV8_PSCI_STACK_IN_RAMAT(ADDR(.secure_stack))#elseAT(LOADADDR(.secure_data)+SIZEOF(.secure_data))#endif{KEEP(*(.__secure_stack_start)).=.+CONFIG_ARMV8_PSCI_NR_CPUS*ARM_PSCI_STACK_SIZE;.=ALIGN(CONSTANT(COMMONPAGESIZE));KEEP(*(.__secure_stack_end))}#ifndef__ARMV8_PSCI_STACK_IN_RAM.=LOADADDR(.secure_stack);#endif.__secure_end:AT(ADDR(.__secure_end)){KEEP(*(.__secure_end))LONG(0x1d1071c);/*MustoutputsomethingtoresetLMA*/}#endif.=ALIGN(8);.rodata:{*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))}-------------------(9)/**(9)所有仅读数据将会在这个段中对齐排序存放好;*/.=ALIGN(8);.data:{--------------------------------------------------------------------(10)/**(10)所有数据段将会链接到此段中;*/*(.data*)}.=ALIGN(8);.=.;.=ALIGN(8);.u_boot_list:{-------------------------------------------------------------(11)/**(11)u_boot_list段定义了系统中当前支持的所有命令和设备驱动,此段把散落在各个文件中*通过U_BOOT_CMD的一系列拓展宏定义的命令和U_BOOT_DRIVER的拓展宏定义的设备驱动收集到一起,*并按照名字排序存放,以便后续在命令行快速检索到命令并执行和检测注册的设备和设备树匹配* probe设备驱动初始化;(设备驱动的probe只在定义了dm模块化驱动时有效)*/KEEP(*(SORT(.u_boot_list*)));}.=ALIGN(8);.efi_runtime_rel:{__efi_runtime_rel_start=.;*(.rel*.efi_runtime)*(.rel*.efi_runtime.*)__efi_runtime_rel_stop=.;}.=ALIGN(8);.image_copy_end:{*(.__image_copy_end)}.=ALIGN(8);.rel_dyn_start:--------------------------------------------------------(12)/**(12)一般u-boot运行时是根据定义的基地址开始执行,如果加载地址和链接地址*不一致则会出现不能执行u-boot的问题。通过一个*配置CONFIG_POSITION_INDEPENDENT即可打开地址无关功能,*此选项会在链接u-boot时添加-PIE参数。此参数会在u-boot ELF文件中*生成rela*段,u-boot通过读取此段中表的相对地址值与实际运行时地址值*依次遍历进行修复当前所有需要重定向地址,使其可以实现地址无关运行;*即无论链接基地址如何定义,u-boot也可以在任意ram地址*运行(一般需要满足最低4K或者64K地址对齐);**注意此功能只能在sram上实现,因为此功能会在运行时修改文本段数据段中的地址,*如果此时运行在片上flash,则不能写flash,导致功能失效无法实现地址无关;*/{*(.__rel_dyn_start)}.rela.dyn:{*(.rela*)}.rel_dyn_end:{*(.__rel_dyn_end)}_end=.;.=ALIGN(8);.bss_start:{--------------------------------------------------------(13)/**(13)众所周知的bbs段;*/KEEP(*(.__bss_start));}.bss:{*(.bss*).=ALIGN(8);}.bss_end:{KEEP(*(.__bss_end));}/DISCARD/:{*(.dynsym)}--------------------------------------------(14)/**(14)一些在链接时无用需要丢弃的段;*//DISCARD/:{*(.dynstr*)}/DISCARD/:{*(.dynamic*)}/DISCARD/:{*(.plt*)}/DISCARD/:{*(.interp*)}/DISCARD/:{*(.gnu*)}#ifdefCONFIG_LINUX_KERNEL_IMAGE_HEADER-----------------------------------(15)/**(15)在efi加载时会很有用,主要在u-boot的二进制头部添加了一些头部信息,*包括大小端,数据段文本段大小等,以便于efi相关的加载器读取信息,*此头部信息来自于Linux arm64的Image的头部信息;该头部也不属于u-boot的*一部分只是被附加上去的;*/#include"linux-kernel-image-header-vars.h"#endif}
此链接脚本是标准的spl链接脚本,还包含了u_boot_list段,如果对应自己board不需要命令行或者模块化驱动设备,只作为一个加载器则可以自定义更简略的链接脚本。
/*SPDX-License-Identifier:GPL-2.0+*//**(C)Copyright2013*DavidFeng**(C)Copyright2002*GaryJennejohn,DENXSoftwareEngineering,**(C)Copyright2010*TexasInstruments,*AneeshV*/ MEMORY{.sram:ORIGIN=IMAGE_TEXT_BASE,----------------------------------------(1)/**(1)\>XXX 的形式可以将指定段放入XXX规定的内存中;一般u-boot-spl只有*很小的可运行内存块,所以spl中会舍去大量不需要用的段只保留关键的*文本段数据段等,并且通过>.sram的形式将不在ddr初始化前用到的段定义到sdram中,*后续只需在完成ddr初始化后将这些段搬运到ddr中即可,而不需要额外的*地址修复逻辑,如下:有一个sram 0x18000-0x19000,*一个sdram0x80000000-0x90000000,*那么通过>.sram方式则map文件可能如下:*0x18000stext*...*0x18100sdata*...*0x80000000sbss*...*/LENGTH=IMAGE_MAX_SIZE}MEMORY{.sdram:ORIGIN=CONFIG_SPL_BSS_START_ADDR,LENGTH=CONFIG_SPL_BSS_MAX_SIZE}OUTPUT_FORMAT("elf64-littleaarch64","elf64-littleaarch64","elf64-littleaarch64")OUTPUT_ARCH(aarch64)ENTRY(_start)--------------------------------------------------------------------(2)/**(2)同u-boot.lds一致,共用一套逻辑入口_start;*/SECTIONS{.text:{.=ALIGN(8);*(.__image_copy_start)--------------------------------------------------(3)/**(3)同样的,如果spl需要重定向则会使用此段定义,大多数情况下spl中会用上重定向;*/CPUDIR/start.o(.text*)*(.text*)}>.sram.rodata:{.=ALIGN(8);*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))}>.sram.data:{.=ALIGN(8);*(.data*)}>.sram#ifdefCONFIG_SPL_RECOVER_DATA_SECTION----------------------------------------(4)/**(4)SPL_RECOVER_DATA_SECTION段用于保存数据段数据,*一些board在初始化时修改data段数据,并在后续某个阶段*从此段中恢复data的原始数据;*/.data_save:{*(.__data_save_start).=SIZEOF(.data);*(.__data_save_end)}>.sram#endif.u_boot_list:{.=ALIGN(8);KEEP(*(SORT(.u_boot_list*)));}>.sram.image_copy_end:{.=ALIGN(8);*(.__image_copy_end)}>.sram.end:{.=ALIGN(8);*(.__end)}>.sram_image_binary_end=.;.bss_start(NOLOAD):{.=ALIGN(8);KEEP(*(.__bss_start));}>.sdram--------------------------------------------------------------(5)/**(5)将bss段数据定义到>.sdram中,即可在初始化ddr后直接对此段地址清零*即可使用全局未初始化变量,并且不会带来副作用。*/.bss(NOLOAD):{*(.bss*).=ALIGN(8);}>.sdram.bss_end(NOLOAD):{KEEP(*(.__bss_end));}>.sdram/DISCARD/:{*(.rela*)}/DISCARD/:{*(.dynsym)}/DISCARD/:{*(.dynstr*)}/DISCARD/:{*(.dynamic*)}/DISCARD/:{*(.plt*)}/DISCARD/:{*(.interp*)}/DISCARD/:{*(.gnu*)}}
从上述的链接脚本可以看出,armv8的u-boot的启动是从arch/arm/cpu/armv8/start.S中的_start开始的,并在后续初始化中调用了很多链接脚本中定义的地址符号表。
原文:https://blog.csdn.net/maybeYoc/article/details/122937844
觉得文章不错,点击“分享”、“赞”、“在看” 呗!
标签:
扫描关注一起学嵌入式,一起学习,一起成长本文基于armv8架构来对u-boot进行启动流程分析,u-boot版本为202
2023-05-05农民工群体稳就业折射省域经济向好态势,就业,县域,农民工,西部地区
2023-05-05俄罗斯总统新闻秘书佩斯科夫4日表示,美国是无人机袭击克里姆林宫事件的幕后黑手。他说,袭击克里姆林宫的
2023-05-05在1-0击败曼联后,布莱顿主帅德泽尔比在接受BBC采访时表示,球队配得上胜利。德泽尔比这样谈道:“我们...
2023-05-05金融界5月5日消息,投资者评估美联储货币政策前景,但区域银行危机蔓延令市场人士担忧未来或有更多银行倒闭
2023-05-055月4日北向资金增持86 49万股复星医药。近5个交易日中,获北向资金增持的有4天,累计净增持239 59万股。近2
2023-05-05清乾隆(公元1736—1795年,清高宗爱新觉罗·弘历年号)一朝六十年,是清代封建社会发展的鼎盛时期,瓷...
2023-05-051、有很多呀`在百度就可以查找!。本文就为大家分享到这里,希望小伙伴们会喜欢。
2023-05-04虽然虚拟的高尔夫球场无法提供与实际高尔夫球场相同的锻炼效果,但是它仍然可以让我们在家中进行锻炼,并且
2023-05-04现在汽车越来越普及,几乎家家户户都有车。这么多车,我们在使用的过程中肯定会遇到各种各样的问题。那么这
2023-05-04新手投资者学习K线时,建议投资者去购买技术分析的书或K线技术形态的书来看,也可以开立一个股票账户,在证
2023-05-0440系显卡已经上市,很多游戏玩家都想换上新显卡,但是价格较贵。目前京东正在做百亿补贴活动,活动期间索泰
2023-05-045月4日,岛城出现降雨,胶宁高架路上低洼处形成积水,车辆通过时溅起大量水花从桥上落下,水流落在桥下马路
2023-05-04英超单赛季进球纪录此前由希勒和安迪-科尔共同保持,他们在42轮比赛中打入了34球。本赛季各项赛事,哈兰德
2023-05-045月4日下午,“奋进青春强国有我”学子成长分享会在山东师范大学长清湖校区树蕙堂报告厅举行。校党委书...
2023-05-04厦门海峡旅游博览会要门票吗?答:想要参观厦门海峡旅游博览会可在线下合作门店获取免费门票,或在网上注册
2023-05-04欢迎观看本篇文章,小勉来为大家解答以上问题。银饰的保养和清洗方法,银饰的清洗方法和保养详解很多人还不
2023-05-04成都龙泉驿幼儿园招生报名时间表2023公办幼儿园报名时间:5月11日—17日进行网上信息采集,每名适龄幼儿限
2023-05-045月4日,据中国新闻网:市场监管总局4日发布《关于进一步加强医疗美容行业监管工作的指导意见》。其中提出
2023-05-04在打造“数创新高地”、构建“幸福温暖家”的过程中,青浦区积极培育“专精特新”的科技强企。秉持着从...
2023-05-041、你可以回复他说人生道路漫长,希望你在人生的道路上,努力过好你自己的生活,越来越年轻,越来越快乐,
2023-05-045月2日,游客在横跨川渝两地的五星桥游玩。五星桥位于重庆市合川区双槐镇双门村与四川省华蓥市庆华镇三河村
2023-05-04可视化的库非常多,如:echarts、highcharts、antv系列、d3、gojs 按照可自定义绘图的程度排序:gojs、d
2023-05-04PlayStation官方发布了趣味解谜游戏《Humanity》的宣传预告,让我们一起来看看吧!
2023-05-04美国财政部(资料图)海外网5月4日电据美国《国会山报》5月3日报道,多名美政界人士警告,如果民主与共和两
2023-05-04原标题:五一假期收官河南省高速公路车流总量1449 44万辆5月4日,记者从省交通运输厅获悉,2023年五一假期
2023-05-04最美人间四月天,暖风细雨润心田。4月20日,由四川省内江市教育科学研究所和内江语文课内外杂志有限公司联
2023-05-04塞尔达传说王国之泪中的黄金马在哪里捕捉呢?可能很多玩家不太清楚在哪抓黄金马。下面小编给大家带来塞尔达
2023-05-04今天来聊聊关于品位和品味是近义词吗,品味和品位的区别的文章,现在就为大家来简单介绍下品位和品味是近义
2023-05-04金投网提供工商银行龙凤呈祥金条50克价格今天多少一克(2023年05月04日),工商银行龙凤呈祥金条50克价格最
2023-05-04做试管婴儿大概多少钱一次?每个选择做试管婴儿助孕的家庭为关心的莫过于成功率和费用,毕竟,一个是决定怀
2023-05-0405月04日潍坊冠杰纺织有限公司关于32S涤纶纱的报价为13800元 吨。32S涤纶纱的规格
2023-05-04欧陆电气2022年净利87 85万同比减少91 56%新能源新产品成本高2023 5 410:36:56挖贝网蔡颖挖贝网5月4日,欧陆电气(87
2023-05-04孟德龙摄5月4日出版的《人民日报》头版刊发由扬州报业传媒集团摄影记者孟德龙航拍的题为“五一”假期国...
2023-05-04近日,金刚光伏发布了2023年一季度报告。公告称,2023年第一季度营收约1 82亿元,同比增加128 39%;归属于上市
2023-05-04机械行业22Q4和23Q1总结:需求和盈利筑底专用设备需求分化
2023-05-04证券时报网讯,据wind统计显示,上周(4月24日-4月28日)共有961只个股获融资净买入,净买入金额在千万元以
2023-05-04株洲日报讯(全媒体记者 杨如)“我手里拿的是黄瓜苗,和同学们一起种植,感受到了劳动的快乐!”参与...
2023-05-04硬实力上的差距决定短跑与长跑选手在不同阶段的表现会不一样。
2023-05-04快科技5月3日消息,Steam上给出了4月份的硬件调查报告,其中Windows11系统的份额已经攀升至33%的历史新高。
2023-05-04在“五一”假期和重庆国际消费节的双重加持下,“两江造”新能源汽车受到消费者青睐,人气持续走高。展...
2023-05-04自我管理日记范文第1篇今天,我要和爸爸妈妈学习一篇关于自我管理的文章,学习它在学习生活中的管理方法与
2023-05-04【本篇是:彭博士讲《黄帝内经》系列-精华篇-之七百七十二。(更多精彩内容持续更新中……)】“陽明臟...
2023-05-04摘要重点聚焦1)上市银行年报和一季报披露完毕,42家上市银行Q1合计实现营收和归母净利润同比增速+1 4% +2
2023-05-03以美团数据为例,热门景区中,西双版纳的告庄西双景,丽江市的丽江古城以及束河古镇,其景区门票的订单量占
2023-05-03日前,位于辽宁大连北黄海经济开发区内2条10千伏线路顺利投运,提升了该地区的供电能力,为运输港口、装备
2023-05-034月28日,济宁机场展开了防汛应急处置实战演练。本次演练模拟市气象台宣布橙色强降水预警信号,机场气象台
2023-05-03央视网消息:这个假期,探亲访友、文化体验、休闲度假等出游需求集中释放。今年的“五一”假期都涌现出...
2023-05-03极目新闻记者徐平5月2日,中国排协官网公布了征战2023世界女排联赛的23人大名单,中国女排由队长袁心玥领衔
2023-05-03你有没有想过,存款用完了,房子也消耗掉了,余生能够怎样过呢?当一个人因为父母孤老而心疼时,哪怕自己没
2023-05-03富瀚微晚间公告,公司正在筹划发行股份及支付现金购买资产,并募集配套资金暨关联交易事项,交易标的资产为
2023-05-03深南电路(SZ002916,收盘价:82 26元)发布公告称,2023年4月27日,深南电路接受中欧基金等机构调研,公司
2023-05-03在商业化的场合当中,着装往往都会考虑主题,为了寻求视觉上的刺激和造型的完美度,裙子几乎成为了大部分女
2023-05-0311分钟解决“世界性”难题百度生物计算研究成果登顶《Nature》正刊,北京时间5月2日凌晨,国际顶级学术期...
2023-05-03欢迎观看本篇文章,小柴来为大家解答以上问题。音的拼音怎么写,音怎么读很多人还不知道,现在让我们一起来
2023-05-031、古人云:人生莫过于四件事,久旱逢甘露、他乡遇故知、洞房花烛夜、金榜题名时。2、今天,跟大家分享的是
2023-05-03大连是北方重要的海产品货源地,也是国际海产品中转地,每天凌晨时分,很多靠海产品为生的人们在海上、码头
2023-05-03墨西哥总统洛佩斯表示,他将向美国政府提出“外交抗议”。当地时间5月2日,墨西哥总统洛佩斯在每日晨间...
2023-05-03人民日报北京5月2日电(记者韩鑫)记者从交通运输部长江航务管理局获悉:一季度,长江干线港口完成货物吞吐
2023-05-03众人皆降我不降,特斯拉宣布国产Model3 Y全系上涨2000元5月2日,据特斯拉中国官网,特斯拉全线上调在华销售
2023-05-03【本文来自《游客进景区上厕所要买55元门票?桂林通报:已约谈景区》评论区,标题为小编添加】亓景明我14年
2023-05-03班级心理健康教育理论与操作,关于班级心理健康教育理论与操作介绍这个很多人还不知道,我们一起来看看!1、
2023-05-03日乒第一美女退役,与国乒12大主力交手战况,4人输6场,陈梦在列,陈梦,国乒,郭跃,日乒,刘诗雯,朱雨玲,张怡
2023-05-031、鼠年因为发生了不好的事情,被网友称为灾难年,被迫将犯罪归于鼠年。其实没有科学依据。2、事件:3、184
2023-05-032023年4月29日21:04,汉中市市场监督管理局值班人员关注到“小红书”APP某注册用户发帖反映“汉中中国黄...
2023-05-02五一小长假,聚餐少不了。很多人喜欢点一份海门的红烧羊肉。海门红烧羊肉之所以成为特色美食,除了注重烹饪
2023-05-02生活中有一种很小但是又非常需要的小家电,虽然经常被人忽视,但是有一家公司却把这个小玩意做到挑战传统,
2023-05-021、首先谈谈798的由来吧:2、2000年12月,原700厂、706厂、707厂、718厂、797厂、798厂等六家单位
2023-05-021、工具:走珠和香体露。2、使用前擦干汗渍。一般早上出门都用珠香。这个时候,如果时机成熟,最好洗个澡。
2023-05-02一、题文意识对人体的生理活动具有调节和控制作用。______(判断对错)二、解答正确三、分析意识对人体的生
2023-05-02湖南日报·新湖南客户端5月1日讯(通讯员罗永凤郭檑)“万寿宫台区设备线路运行正常,无异常问题 ...
2023-05-02吉利汽车(00175)发布公告,集团旗下高端智能电动汽车公司ZEEKRIntel
2023-05-02央视网消息:今天(5月1日),不少的热门旅游城市和景区、景点都迎来了游客高峰,各地为了留住游客也是各展
2023-05-021、中国的胡润富豪榜和全球性的福布斯富豪榜一直在变动,各位大佬们虽然都没有很在意,但是数据在不断变化
2023-05-02今天来聊聊关于怎么辨别白酒是粮食酒,如何鉴别白酒是不是粮食酒的文章,现在就为大家来简单介绍下怎么辨别
2023-05-021、它只是一个简单的中文单词,发音为Jim:nzh,意思是简单和直;直截了当。强调这正是如此或几乎如此。2、
2023-05-02《纽约时报》5月1日小偶像,陷入困境的北美数字媒体公司ViceMedia正准备申请破产。两位了解Vice运营情况的
2023-05-025月1日12时厦门迎来了今年伏季休渔期726艘渔船进入“休眠”此前厦门市海洋发展局发布了《关于实施海洋伏...
2023-05-02社会主导形态的儿童观指的是在社会中具有主导地位的人们对儿童的根本看法、态度,比如社会中的政府机构、法
2023-05-02投资顾问是一个与投资理财相关的职业,主要负责为客户提供投资建议、规划理财方案、评估投资风险等咨询服务
2023-05-021、飞利浦 Philips2、峰力 PHONAK3、俏康 Cholcom4、邦力健5、瑞声达 Resound6、西门子
2023-05-021、魅族的M6系列共出过四个型号,分别是M6TP,M6SP,M6SL和M6TS。以上就是【魅族m6,魅族m6】相关内容
2023-05-02唐三从来不打没把握的仗,对拿下这场比拼的胜利很有自信,还在背后竖起大拇指给队友看,他的聪明与沉稳在
2023-05-02当前的FocusST借用了与标准车相同的样式提示,即梯形格栅,带LED的角形大灯以及带扩散器和特别设计的排气管
2023-05-02看到一则关于公司招聘会计要求必须是A型血的消息,感觉挺可笑的,可笑的是不仅仅公司把招聘的灰色地带玩到
2023-05-01今年“五一档”市场竞争异常激烈,共有18部新片入市。由刘晓世执导,王一博、胡军、周冬雨等主演的《长...
2023-05-01财联社5月1日讯(记者徐昊)“五一”假期期间,居民消费热情高涨。在整个经济回暖的大背景下,造车新势...
2023-05-011、绵毛葡萄(VitisretordiiRoman duCaill exPlanch )木质藤本,生山坡
2023-05-01(观察者网讯)继硅谷银行、签字银行后,短短两个月内,美国联邦保险公司(FDIC)又开始为第三家摇摇欲坠的
2023-05-01劳动铸就梦想奋斗开创未来世界因劳动而改变,生活因劳动而美好。“五一”国际劳动节到来之际,让我们一...
2023-05-01自苏丹武装冲突爆发以来,中国政府采取快速有力措施,全力保护中国公民安全,周密组织撤离行动。根据统一部
2023-05-015月1日,五菱汽车官方公众号发布五菱缤果的销量数据。3月29日正式上市的五菱缤果上市首月销量16383辆,成为
2023-05-01转自:央视新闻今天,预计保障航班15415班,预计可提供座位数228万个,预计运输旅客156万人次。从订票情况
2023-05-01及时传递正面信息,积极引导群众关注权威发布,做到“不信谣、不传谣、不造谣”,不在网络、朋友圈、微...
2023-05-01林州市气象台2023年5月1日12时31分发布大风蓝色预警信号:预计未来24小时,林州市及所辖镇和街道将出现6级
2023-05-01景区女厕所排长队游客:以为景点排队今天的热度非常高,现在也是在热搜榜上了,那么具体的景区女厕所排长队
2023-05-01新华社北京5月1日电 特稿:未来已来——多国专家谈人工智能与人类劳动新华社记者未来已来,科幻作家威...
2023-05-01尊敬的各位游客:重庆动物园2023年“五一”节日期间人流量较大,因园区承载量有限,为保证您有更好的游...
2023-05-01通过官方的海报得知,时间仙子的真名终于让我们知道了,并且和她的属性有关,一听就是大美女。看来这就是时
2023-05-015月1日,生意社DBP基准价为9237 50元 吨,与上月初(9675 00元 吨)相比,下降了-4 52%。DBP年度统计(2022-05-01--202
2023-05-01Copyright © 2015-2022 亚洲水产网版权所有 备案号:豫ICP备20022870号-9 联系邮箱:553 138 779@qq.com