arch/arm/lib/crt0_64.S

上一节start.S主要做了以下工作:

  • reset初始化,save_boot_params(nxp定义)保存参数到大小256byte的sram中
  • 设置cpu状态:小端模式,MMU 、 i/d cache 都关闭,段定义;
  • 判断当前的异常等级并将中断向量的地址写到各个EL3/2/1对应的VBAR寄存器中;
  • 打开EA、FIQ、IRQ、NS四种中断;
  • 打开SIMD和FP浮点运算功能;
  • 配置cntfrq_el0 系统时钟计数器的频率。

最后主核跳转_main,从核等待主核唤醒。

_main函数主要完成的工作:

  • 先设置用于调用board_init_f()函数的初始环境,该环境仅仅是提供了堆栈和存储位置GD(‘global data’)结构,两者都是位于可以使用的RAM(SRAM,locked cache…)中,在调用board_init_f()函数前,GD应该被清0;
  • 调用board_init_f()函数,该函数的功能为从system RAM(DRAM,DDR…)中执行准备硬件,当system RAM还不能够使用的时,必须要使用目前的GD存储传递到后续阶段的所有数据,这些数据包括重定位的目标,将来的堆栈和GD的位置;
  • 设置中间环境,其中堆栈和GD是由board_init_f()函数在system RAM中进行分配的,但此时的bss和初始化的非常量仍然不能使用;
  • 对于正常的uboot引导(非SPL),调用relocate_code()函数,该函数的功能将uboot从当前的位置重新转移到由board_init_f()函数计算的目标位置;
  • 对于SPL,board_init_f()函数仅仅是返回(crt0),没有代码的重定位;
  • 设置用于调用board_init_r()函数的最终环境,该环境将有bss段(初始化为0),初始化非常量数据(初始化为预期值),并入栈到system RAM中,GD保留了board_init_f()函数设置的值;
  • 为了使uboot正常运行(非SPL),某些CPU还有一些关于内存的工作要做,调用c_runtime_cpu_setup()函数;
  • 调用board_init_r()函数。
ENTRY(_main)//指向spl的栈0x96dff0ldr	x0, =(CONFIG_SPL_STACK)//16byte对齐bic	sp, x0, #0xf	/* 16-byte alignment for ABI compliance */mov	x0, sp //栈指针保存到x0寄存器bl	board_init_f_alloc_reserve //调用board_init_f_alloc_reserve,参数为x0mov	sp, x0 //sp栈指针复原/* set up gd here, outside any C code */mov	x18, x0 //将x0寄存器的值保存到x18寄存器,也就是gd结构体的地址,x18 = 0x96dff0bl	board_init_f_init_reserve //调用board_init_f_init_reserve,参数为x0的值0x96dff0mov	x0, #0    //将x0寄存器的值设置为0bl	board_init_f//调用board_init_f函数//将重定位地址和偏移保存到寄存器ldr	x9, [x18, #GD_RELOC_OFF]	add	lr, lr, x9	/* new return address after relocation */ldr	x0, [x18, #GD_RELOCADDR]//relocate_codeb	relocate_coderelocation_return://设置c的运行环境bl	c_runtime_cpu_setup		/* still call old routine *///调用spl_relocate_stack_gd函数 重定位新的gd栈指针bl	spl_relocate_stack_gd           cmp	x0, #0csel	x18, x0, x18, ne/** Perform 'sp = (x0 != NULL) ? x0 : sp' while working* around the constraint that conditional moves can not* have 'sp' as an operand*/mov	x1, spcmp	x0, #0csel	x0, x0, x1, nemov	sp, x0/** 清除bss段*/ldr	x0, =__bss_start		/* this is auto-relocated! */ldr	x1, =__bss_end			/* this is auto-relocated! */
clear_loop:str	xzr, [x0], #8cmp	x0, x1b.lo	clear_loop/* 调用 board_init_r(gd_t *id, ulong dest_addr) */mov	x0, x18				/* gd_t */ldr	x1, [x18, #GD_RELOCADDR]	/* dest_addr *///跳转调用board_init_rb	board_init_r			/* PC relative jump *//* NOTREACHED - board_init_r() does not return */
#endifENDPROC(_main)

首先加载spl的栈地址,将其保存到x0中,对其进行16byte对齐后指向sp指针。在board_init_f_alloc_reserve之前保存sp指针栈到x0,board_init_f_alloc_reserve执行后需要还原sp栈指针。

board_init_f_alloc_reserve

从“top”(这里指sp指针)地址分配保留空间用作“全局变量”,返回分配空间的“top”地址(返回sp指针地址)

GD 在 16 字节边界上向下对齐。早期的 malloc area 未对齐,因此它遵循堆栈我们正在构建的架构的对齐约束。GD 是最后分配的,所以这个函数的返回值是保留区的底部和GD的地址,都应该调用上下文需要它。

ulong board_init_f_alloc_reserve(ulong top)
{/* Reserve early malloc arena */
#if CONFIG_VAL(SYS_MALLOC_F_LEN)top -= CONFIG_VAL(SYS_MALLOC_F_LEN);
#endif/* LAST : reserve GD (rounded up to a multiple of 16 bytes) */top = rounddown(top-sizeof(struct global_data), 16);return top;
}

board_init_f_init_reserve

board_init_f_alloc_reserve预留了早期malloc的空间和global_data结构体空间,大小为SYS_MALLOC_F_LEN=0x10000(65536bytes),board_init_f_init_reserve现在可以开始初始化gd结构了。board_init_f_init_stack_protection_addr为gd->start_addr_sp设置了spl的栈指针,然后sp向上对齐16字节。将早期malloc空间的基地址保存到gd->malloc_base;board_init_f_init_stack_protection只有在设置完spl的栈指针才可以进行memset。

void board_init_f_init_reserve(ulong base)
{struct global_data *gd_ptr;/** clear GD entirely and set it up.* Use gd_ptr, as gd may not be properly set yet.*/gd_ptr = (struct global_data *)base;/* zero the area */memset(gd_ptr, '\0', sizeof(*gd));if (CONFIG_IS_ENABLED(SYS_REPORT_STACK_F_USAGE))board_init_f_init_stack_protection_addr(base);/* next alloc will be higher by one GD plus 16-byte alignment */base += roundup(sizeof(struct global_data), 16);/** record early malloc arena start.* Use gd as it is now properly set for all architectures.*/#if CONFIG_VAL(SYS_MALLOC_F_LEN)/* go down one 'early malloc arena' */gd->malloc_base = base;
#endifif (CONFIG_IS_ENABLED(SYS_REPORT_STACK_F_USAGE))board_init_f_init_stack_protection();
}#if CONFIG_IS_ENABLED(BOOTSTAGE)
/** Board-specific Platform code can reimplement show_boot_progress () if needed*/
__weak void show_boot_progress(int val) {}
#endif

board_init_f

bootrom是固化在芯片内部的一块rom,初始化各种接口,并从中读取内容加载到片内SRAM中。因为存储设备接口相对简单,大部分不需要适配即可存取。但是DDR等需要修改代码进行适配。

所以就需要spl,spl被加载到片内SRAM中,片内SRAM不需要初始化即可运行,但是容量有限。spl运行起来后进行必要的初始化后,初始化DDR,并将uboot从存储设备中读到DDR中。

uboot运行在DDR中,则不受空间大小限制,可以进行复杂的操作。支持包括不同文件系统、脚本执行、多种操作系统加载等等操作。其中主要的工作是从存储设备中读取kernel,解析后跳转到kernel执行。

准备完sp栈和早期malloc空间后,清空x0寄存器,调用board_init_f(定义在board/freescale/imx8mp_evk/spl.c)。这里i.mx系列对board_init_f函数进行了覆盖,实现了自己的启动步骤。

void board_init_f(ulong dummy)
{int ret;//arch/arm/mach-imx/imx8m/soc.c//打开时钟、定时器、看门狗//打开四个cpu核心arch_cpu_init();//设置uart2的时钟为外部24mhzinit_uart_clk(1);//设置wdg和uart2的iomux功能board_early_init_f();//重点分析ret = spl_early_init();if (ret) {debug("spl_init() failed: %d\n", ret);hang();}//串口初始化preloader_console_init();//使能atf控制器 tzc380enable_tzc380();//设置i2csetup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);//pmic初始化,写pca9450寄存器power_init_board();//DDR 初始化 ddr_init(&dram_timing)//timming值由ddr校准得到//配置ddr控制器,将timming保存到内存中spl_dram_init();
}

relocate_code

uboot重定位,将uboot从cpu内部flash拷贝到ram中。从image_copy_start开始拷贝,截止到image_copy_end。x1寄存器熟先存储着内部ram中uboot的image_copy_start,而x2寄存器存储的是image_copy_end。拷贝实现的关键指令ldp和stp。拷贝路径是x1->x11->x0,直至到x2中存储的image_copy_end末尾。

ldp	x10, x11, [x1], #16 //从x1寄存器拷贝到x11
stp	x10, x11, [x0], #16 //将x11的内容拷贝到x0//修复.rel.dyn段重定位的问题//为了解决链接地址和运行地址不一致的问题adrp	x2, __rel_dyn_start		/* x2 <- address bits [31:12] */add	x2, x2, :lo12:__rel_dyn_start	/* x2 <- address bits [11:00] */adrp	x3, __rel_dyn_end		/* x3 <- address bits [31:12] */add	x3, x3, :lo12:__rel_dyn_end	/* x3 <- address bits [11:00] */
fixloop:ldp	x0, x1, [x2], #16	/* (x0,x1) <- (SRC location, fixup) */ldr	x4, [x2], #8		/* x4 <- addend */and	x1, x1, #0xffffffffcmp	x1, #R_AARCH64_RELATIVEbne	fixnext/* relative fix: store addend plus offset at dest location */add	x0, x0, x9add	x4, x4, x9str	x4, [x0]
fixnext:cmp	x2, x3b.lo	fixloop

当x0中的数据长度和x1中的数据长度相等时,停止拷贝重定位完成,调用relocate_done。switch_el宏获取异常登记并跳转到对应标签处。这部分在start.S中已经分析过了。不管是异常EL3、EL2、EL1,都会走到标签0。关闭i-cache,加入指令屏障。

relocate_done:switch_el x1, 3f, 2f, 1fbl	hang
3:	mrs	x0, sctlr_el3b	0f
2:	mrs	x0, sctlr_el2b	0f
1:	mrs	x0, sctlr_el1
0:	tbz	w0, #2, 5f	/* skip flushing cache if disabled */tbz	w0, #12, 4f	/* skip invalidating i-cache if disabled */ic	iallu		/* i-cache invalidate all */isb	sy
4:	ldp	x0, x1, [sp, #16]bl	__asm_flush_dcache_rangebl     __asm_flush_l3_dcache
5:	ldp	x29, x30, [sp],#32ret

对于重定位后链接地址与运行地址不一致的解决办法就是使用位置无关码,在uboot编译使用ld链接的时候使用参数"-pie"可生成与位置无关的可执行程序,使用该参数后,会生成一个.rel.dyn段,uboot则是靠该段去修复重定位后产生的问题的,在uboot的反汇编文件中,有.rel.dyn段代码。

c_runtime_cpu_setup

重定位各异常等级的vbar,即重定位中断向量表。

ENTRY(c_runtime_cpu_setup)
#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD)/* Relocate vBAR */adr	x0, vectorsswitch_el x1, 3f, 2f, 1f
3:	msr	vbar_el3, x0b	0f
2:	msr	vbar_el2, x0b	0f
1:	msr	vbar_el1, x0
0:
#endifret
ENDPROC(c_runtime_cpu_setup)

spl_relocate_stack_gd

uboot已经在relocate_code中被拷贝到ram中了,还需要重定位spl 的gd栈。这个函数功能就是计算栈的位置,使用memcpy将gd结构拷贝给一个新的gd结构,并返回新的gd栈指针。

bss清除

在board_init_r之前必须要清bss段,不清零的话在首次使用全局变量的时候会发生一些错误。

board_init_r

/common/board_r.c

init_sequence_r中存储着一系列的初始化函数,initcall_run_list确保了各系统初始化的顺序运行。根据CONFIG_XX来使能相应的驱动。最后run_main_loop进入循环。

initcall_run_list(init_sequence_r)
static init_fnc_t init_sequence_r[] = {initr_trace,initr_reloc,/* TODO: could x86/PPC have this also perhaps? */
#if defined(CONFIG_ARM) || defined(CONFIG_RISCV)initr_caches,/* Note: For Freescale LS2 SoCs, new MMU table is created in DDR.*	 A temporary mapping of IFC high region is since removed,*	 so environmental variables in NOR flash is not available*	 until board_init() is called below to remap IFC to high*	 region.*/
#endifinitr_reloc_global_data,
#if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)initr_unlock_ram_in_cache,
#endifinitr_barrier,initr_malloc,//初始化gd中与malloc相关的成员log_init,//log初始化initr_bootstage,	/* Needs malloc() but has its own timer */
#if defined(CONFIG_CONSOLE_RECORD)console_record_init,
#endif
#ifdef CONFIG_SYS_NONCACHED_MEMORYnoncached_init,
#endifinitr_of_live,
#ifdef CONFIG_DMinitr_dm,//初始化驱动模型相关
#endif
#ifdef CONFIG_ADDR_MAPinitr_addr_map,
#endif
#if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \defined(CONFIG_SANDBOX)board_init,	//板子初始化
#endif
#ifdef CONFIG_CLOCKSset_cpu_clk_info, /* Setup clock information */
#endif
#ifdef CONFIG_EFI_LOADERefi_memory_init,//efi 内存初始化
#endifinitr_binman,
#ifdef CONFIG_FSP_VERSION2arch_fsp_init_r,
#endifinitr_dm_devices,stdio_init_tables,serial_initialize,//串口初始化initr_announce,
#if CONFIG_IS_ENABLED(WDT)initr_watchdog,	//看门狗
#endifINIT_FUNC_WATCHDOG_RESET
#if defined(CONFIG_NEEDS_MANUAL_RELOC) && defined(CONFIG_BLOCK_CACHE)blkcache_init,
#endif
#ifdef CONFIG_NEEDS_MANUAL_RELOCinitr_manual_reloc_cmdtable,
#endifarch_initr_trap,
#if defined(CONFIG_BOARD_EARLY_INIT_R)board_early_init_r,
#endifINIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_POSTpost_output_backlog,
#endifINIT_FUNC_WATCHDOG_RESET
#if defined(CONFIG_PCI_INIT_R) && defined(CONFIG_SYS_EARLY_PCI_INIT)/** Do early PCI configuration _before_ the flash gets initialised,* because PCU resources are crucial for flash access on some boards.*/pci_init,//pci
#endif
#ifdef CONFIG_ARCH_EARLY_INIT_Rarch_early_init_r,//
#endifpower_init_board,//上电
#ifdef CONFIG_MTD_NOR_FLASHinitr_flash,
#endifINIT_FUNC_WATCHDOG_RESET
#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86)/* initialize higher level parts of CPU like time base and timers */cpu_init_r,
#endif
#ifdef CONFIG_CMD_NANDinitr_nand,
#endif
#ifdef CONFIG_CMD_ONENANDinitr_onenand,
#endif
#ifdef CONFIG_MMCinitr_mmc,	//mmc初始化
#endif
#ifdef CONFIG_XENxen_init,
#endif
#ifdef CONFIG_PVBLOCKinitr_pvblock,
#endifinitr_env,
#ifdef CONFIG_SYS_BOOTPARAMS_LENinitr_malloc_bootparams,	//分配boot参数
#endifINIT_FUNC_WATCHDOG_RESETcpu_secondary_init_r,
#if defined(CONFIG_ID_EEPROM) || defined(CONFIG_SYS_I2C_MAC_OFFSET)mac_read_from_eeprom,
#endifINIT_FUNC_WATCHDOG_RESET
#if defined(CONFIG_PCI_INIT_R) && !defined(CONFIG_SYS_EARLY_PCI_INIT)/** Do pci configuration*/pci_init,
#endifstdio_add_devices,jumptable_init,
#ifdef CONFIG_APIapi_init,
#endifconsole_init_r,		/* 串口*/
#ifdef CONFIG_DISPLAY_BOARDINFO_LATEconsole_announce_r,show_board_info,	//打印版子信息
#endif
#ifdef CONFIG_ARCH_MISC_INITarch_misc_init,		/* miscellaneous arch-dependent init */
#endif
#ifdef CONFIG_MISC_INIT_Rmisc_init_r,		/* miscellaneous platform-dependent init */
#endifINIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_CMD_KGDBinitr_kgdb,	//kgdb
#endifinterrupt_init,
#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_M68K)timer_init,		/* 定时器 */
#endif
#if defined(CONFIG_LED_STATUS)initr_status_led,	//led
#endif/* PPC has a udelay(20) here dating from 2002. Why? */
#ifdef CONFIG_CMD_NETinitr_ethaddr,	//网络
#endif
#if defined(CONFIG_GPIO_HOG)gpio_hog_probe_all,	//gpio
#endif
#ifdef CONFIG_BOARD_LATE_INITboard_late_init,//late init
#endif
#if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI)INIT_FUNC_WATCHDOG_RESETinitr_scsi,
#endif
#ifdef CONFIG_BITBANGMIIbb_miiphy_init,
#endif
#ifdef CONFIG_PCI_ENDPOINTpci_ep_init,
#endif
#ifdef CONFIG_CMD_NETINIT_FUNC_WATCHDOG_RESETinitr_net,
#endif
#ifdef CONFIG_POSTinitr_post,
#endif
#if defined(CONFIG_IDE) && !defined(CONFIG_BLK)initr_ide,
#endif
#ifdef CONFIG_LAST_STAGE_INITINIT_FUNC_WATCHDOG_RESET/** Some parts can be only initialized if all others (like* Interrupts) are up and running (i.e. the PC-style ISA* keyboard).*/last_stage_init,//最后init
#endif
#ifdef CONFIG_CMD_BEDBUGINIT_FUNC_WATCHDOG_RESETbedbug_init,
#endif
#if defined(CONFIG_PRAM)initr_mem,
#endif
#ifdef CONFIG_EFI_SETUP_EARLY(init_fnc_t)efi_init_obj_list,
#endifrun_main_loop,
};

其中有一些是需要厂商覆盖的,比如board_init 、board_late_init。

int board_init(void)
{int ret = 0;if (CONFIG_IS_ENABLED(FEC_MXC)) {setup_fec();if (CONFIG_IS_ENABLED(DWC_ETH_QOS))ret = setup_eqos();}return ret;
}int board_late_init(void)
{//设置板子的名字
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIGenv_set("board_name", "EVK");env_set("board_rev", "iMX8MP");
#endifreturn 0;
}

这一篇的重点内容:uboot是如何从sdram拷贝到ram中的?

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Python基础:Python列表更新之删除列表元素详解

    欢迎你来到站长在线的站长学堂学习Python知识&#xff0c;本文分享的是《Python列表更新之删除列表元素详解》。本知识点主要内容有&#xff1a;del&#xff1a;根据索引值删除元素、pop()&#xff1a;根据索引值删除元素、remove()&#xff1a;根据元素值进行删除、clear()&am…...

    2024/3/4 15:18:58
  2. SSM框架学习笔记之SSM框架整合

    原始整合方式环境搭建 项目目录结构如图 1.创建数据库和表结构 create database ssm; use ssm; create table account ( id int primary key auto_increment, name varchar(50), money double ); 2.创建maven的工程导入坐标 代码示例&#xff1a; //pom.xml<?xml versi…...

    2024/3/4 15:18:56
  3. 蓝桥杯 世纪末的星期(世界末日)

    题目要求&#xff1a; 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日&#xff0c;如果是星期一则会.... 有趣的是&#xff0c;任何一个世纪末的年份的12月31日都不可能是星期一!! 于是&#xff0c;“谣言制造商”又修…...

    2024/3/29 3:04:37
  4. Linux搭建LAMP平台与DISCUZ论坛

    LAMP简介与概述 &#xff08;一&#xff09;、LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整台系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统&#xff0…...

    2024/3/17 10:47:05
  5. 类加载机制

    ...

    2024/3/6 9:35:51
  6. 交换俩个变量的值

    ...

    2024/3/28 19:30:48
  7. 计算机网络中关于路由器的作用

    计算机网络中关于路由器的作用 首先我们得知道,计算机之间是如何通信的? 最简单的答案就是用一根网线将两个计算机A,B相互连接,这样从某种意义上来讲,这两台计算机就构成了一个局域网。 但当我们想要在这个局域网中再加入一台计算机C的时候该怎么办呢? 我们都知道,每台计…...

    2024/3/6 9:35:49
  8. 了解常用的组件库和使用的方法

    前端项目分类 移动端&#xff08;h5页&#xff0c; 小程序&#xff09; PC端 常见的vue技术栈组件库 移动端&#xff08;Vant, Cube-UI, NutUI &#xff09; PC端 &#xff08; element-ui, Ant Design of Vue, iView&#xff09; 小程序: uniapp 组件库的使用 根据项目…...

    2024/3/6 9:35:48
  9. Spring Data JPA 使用本地SQL,并将结果集转换为自定义POJO对象

    Spring Data JPA使用很方便,JPA只是一种标准,其实现通常是Hibernate。如果业务仅仅是增删改的话,那用JPA还是很方便的。但通常情况下,我们会有大量的业务查询。如果用其自带的查询,则SQL无法控制,可能会有性能问题。基于此,我们希望扩展下,使其能支持自定义查询SQL,并…...

    2024/3/13 3:55:51
  10. QTableWidget 使用总结

    文章目录增加一行, 在行首增加光标增加一行, 在行首增加光标 int rowCount ui->tableWidget->rowCount();ui->tableWidget->insertRow(rowCount);ui->tableWidget->setCurrentCell(rowCount, 0);auto index ui->tableWidget->currentIndex();ui->…...

    2024/3/28 19:47:20
  11. JavaScript和ES6

    JavaScript 引入外部js <script type"text/javascript" src"路径"><script>注释 //单行注释 /*多行注释*/变量 声明变量的时候变量名不允许使用空格数据类型 基本数据类型&#xff1a;数字型 number日期类型 date布尔类型 bo…...

    2024/3/19 1:08:03
  12. 一、常见网络命令

    实验时间&#xff1a;9.22 目录 熟悉ping、ipconfig、netstat、route等命令 1.使用[cmd] /? 了解命令的使用方法及场景 2.查看实验机器网卡的IPv4/IPv6地址、网关地址、子网掩码以及DNS 3.查看实验机器有哪些端口被占用&#xff0c;占用的进程是什么 4.查看实验机器的路…...

    2024/3/10 9:28:53
  13. 【在ROS下编译ORB_SLAM2遇到错误,】pangolin could not be found because dependency Eigen3 could not be found

    【在ROS下编译ORB_SLAM2遇到错误】Pangolin could not be found because dependency Eigen3 could not be found 内附Pangolin0.5版本的百度网盘下载链接 我今天从下午开始安装ORB-SLAM2安装了一下午一直到现在才算完完整整的把他安装好&#xff0c;并且在ROS下也装好。。。。…...

    2024/3/13 8:20:01
  14. No module named ‘amp_C‘

    打开 import amp_C 上一行py文件utils.py 注释掉 import amp_C...

    2024/3/6 9:35:42
  15. 算法提高--数据结构--并查集例题

    算法提高–数据结构–并查集例题–格子游戏 题目描述&#xff1a; Bob和Alice玩游戏&#xff0c;两人分别在一个方格上延边画线&#xff0c;当画出封闭矩形时结束游戏。问什么时候结束游戏。 输入&#xff1a; 第一行两个整数n和m&#xff0c;表示方格的边长和两人画线的局…...

    2024/3/28 20:09:47
  16. linux服务器根目录容量满了,但是其他磁盘仍有内存

    1项目背景&#xff1a; 服务经常宕机&#xff0c;服务经常假死。原因分析&#xff1a;根目录磁盘下空间不够 2.解决方案 1.停掉服务器2.查看磁盘占用情况3.将大文件移动到大容量的目录下4.建立软连接至原来的目录 3.命令及截图 1 现状截图 通过截图我们可以看见root目录下…...

    2024/3/13 5:12:55
  17. 计算机网络体系结构

    摘要:  我们知道TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际上的网络通信标准。在上篇《计算机网络体系结构综述(上)》的基础上,本文着重概述了两种典型的层次化网络体系机构 —— OSI七层参考体系结构和TCP/IP四层协议结构,并对每种体系…...

    2024/3/4 15:19:05
  18. git拉取远程指定分支,提交本地分支到远程指定分支

    git基本使用方法 创建本地新分支 git checkout -b [分支名] //新建分支默认切换到新分支 切换分支 git checkout [分支名字] 提交到暂存区 git add [文件名] git commit -m 修改信息或git add . // 提交所有修改的文件 git commit -m 修改信息或git add . git co…...

    2024/3/4 15:19:04
  19. c++ 移动语义

    c 移动语义 概念 移动语义&#xff1a;转移所有权&#xff0c;和深拷贝的区别在于&#xff0c;深拷贝是对于别人的资源&#xff0c;自己重新分配一块内存存储复制过来的资源&#xff0c;而移动语义&#xff0c;类似于转让。对于那块资源&#xff0c;转为自己所拥有&#xff0c;…...

    2024/3/4 15:19:03
  20. Android P车机系统为倒车全景添加新的WindowType

    一、需求 1、车机系统中,倒车或全景的window需要显示在其他应用之上; 2、倒车或全景界面,下层应用生命周期进入onPause -> onStop,避免应用耗费UI资源,如地图导航、视频播放、Camera显示等。 二、分析 1、针对需求1,倒车全景应用在后台Service中使用WindowManager…...

    2024/3/7 21:47:48

最新文章

  1. 【SQLserver】一些SQL语句

    -- 1. 数据库的创建与删除 create database student; use student; drop database student;-- 2. 模式的创建与删除 --create schema ty; --drop schema ty;-- 3. 表的创建和修改及删除 create table Student (Sno char(9) primary key,Sname varchar(20) unique,Ssex c…...

    2024/3/29 17:52:10
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 腾讯云4核8G服务器价格,12M带宽一年646元,送3个月

    2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…...

    2024/3/29 16:43:58
  4. Vue 04 Vue 中的 Ajax、slot 插槽

    Vue学习 Vue 0401 Vue中的Ajax服务器准备axios使用跨域问题解决Vue-CLI 配置代理1Vue-CLI 配置代理2案例: 用户搜索vue-resource 02 slot插槽默认插槽具名插槽作用域插槽slot总结 Vue 04 B站 Vue全家桶&#xff08;BV1Zy4y1K7SH&#xff09; 学习笔记 Vue 中的 ajax 01 Vue中的…...

    2024/3/29 8:00:34
  5. 如何在Linux系统使用Docker本地部署Halo网站并实现无公网IP远程访问

    最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可…...

    2024/3/29 0:30:10
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/29 17:27:19
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57