Linux gurb2简介

news2024/10/7 1:03:07

文章目录

  • 前言
  • 一、GRUB 2简介
  • 二、GRUB 2相关文件/文件夹
    • 2.1 /etc/default/grub文件
    • 2.2 /etc/grub.d/文件夹
    • 2.3 /boot/grub/grub.cfg文件
  • 三、grubx64.efi
  • 参考资料

前言

简单来说,引导加载程序(boot loader)是计算机启动时运行的第一个软件程序。它负责加载并将控制权转移到操作系统内核软件(如Linux或GNU Mach)。而内核则负责初始化整个操作系统(例如GNU系统)。

GNU GRUB是一个非常强大的引导加载程序,它可以加载各种自由操作系统,以及通过链式加载(chain-loading)加载专有操作系统。GRUB的设计目标是解决个人计算机引导过程的复杂性;该程序与计算机平台紧密相关,尽管未来可能会考虑移植到其他平台。

GRUB的一个重要特性是灵活性;GRUB理解文件系统和内核可执行格式,因此您可以以您喜欢的方式加载任意操作系统,而无需记录内核在磁盘上的物理位置。因此,您只需指定内核的文件名、驱动器和分区即可加载内核所在的位置。

在使用GRUB引导时,您可以使用命令行界面(参见命令行界面)或菜单界面(参见菜单界面)。使用命令行界面,您需要手动输入内核的驱动器规范和文件名。而在菜单界面中,您只需使用箭头键选择一个操作系统。菜单是基于事先准备好的配置文件的(参见配置)。在菜单中,您可以在使用之前切换到命令行模式,反之亦然。甚至可以在使用前编辑菜单条目。

GRUB 2取代了之前被称为GRUB的版本(即0.9x),后者又成为了GRUB Legacy。

一、GRUB 2简介

GRUB 2(GRand Unified Bootloader 2)是一个广泛使用的引导加载程序,用于在多操作系统环境下引导计算机。它是GNU项目的一部分,是GRUB引导加载程序的第二个主要版本。在大部分Linux发行版中,比如Ubuntu、CentOS ,默认的 bootloader 就是 GRUB 2。
在这里插入图片描述
在这里插入图片描述

GRUB 2 具有以下特点和功能(GRUB的主要要求是符合Multiboot规范,该规范在Multiboot规范的动机部分进行了描述。):

多操作系统支持:GRUB 2 支持引导多个操作系统,包括各种版本的Linux发行版、Windows、BSD等。
向后兼容引导FreeBSD、NetBSD、OpenBSD和Linux。通过链式加载功能,支持加载专有内核(如DOS、Windows NT和OS/2)。
除了特定的兼容模式(链式加载和Linux piggyback格式)外,所有内核将在Multiboot规范中的相同状态下启动。目前只支持加载到1兆字节或更高位置的内核。任何试图加载低于此边界的尝试将立即失败,并给出报告问题的错误消息。

除了上述要求,GRUB还具有以下特性(请注意,Multiboot规范不要求GRUB支持所有这些特性):

识别多种可执行文件格式
支持多种a.out变种以及ELF。还加载符号表。

支持非Multiboot内核
支持许多不符合Multiboot规范的各种自由的32位内核(主要包括FreeBSD、NetBSD、OpenBSD和Linux)。还支持链式加载其他引导加载程序。

加载多个模块
完全支持Multiboot功能,可以加载多个模块。GRUB 2 的设计采用模块化结构,允许加载和卸载各种功能模块,包括文件系统驱动程序、图形界面支持、加密模块等。这使得 GRUB 2 在不同硬件和配置环境下都具有良好的灵活性和扩展性。

加载配置文件
支持人类可读的文本配置文件,其中包含预设的引导命令。您还可以动态加载另一个配置文件,并将预设配置文件嵌入到GRUB映像文件中。命令列表(请参阅命令)是命令行支持的子集。配置文件示例可在配置文件中找到。

GRUB 2采用了完全重新设计的目录和文件层次结构。主要的GRUB 2文件夹包括/etc/grub.d,其中包含主要的GRUB 2脚本,以及/boot/grub,其中包含GRUB 2的模块和菜单文件(grub.cfg)。用户通常会对/etc/default/grub文件进行自定义设置。
以centos 7 为例:GRUB使用配置文件确定引导菜单的外观和行为。主配置文件位于/boot/grub2/grub.cfg,它根据/etc/default/grub和/etc/grub.d/目录中的配置脚本和文件自动生成的。它允许用户自定义引导选项、默认引导条目、超时值等。
通常,配置更改是在/etc/default/grub文件和位于/etc/grub.d中的自定义脚本中进行的。在运行update-grub命令以root用户身份之前,不会对GRUB 2菜单进行任何更改。此命令会运行GRUB 2配置脚本并更新/boot/grub/grub.cfg文件。

命令列表是对配置文件支持的命令的子集。编辑命令与Bash命令行非常相似,根据上下文,可以通过TAB键补全命令、设备、分区和目录中的文件。

提供菜单界面
提供列出预设引导命令的菜单界面,并具有可编程的超时设置。引导条目的数量没有固定限制,当前的实现可以容纳几百个。
GRUB 2 提供了一个可定制的菜单界面,以便用户选择要引导的操作系统或内核。菜单界面可以通过配置文件进行自定义,可以添加新的菜单项,设置默认引导项等。

支持图形界面:GRUB 2 可以在支持的硬件上提供图形界面,使用户可以使用鼠标来选择操作系统和菜单项。

具有灵活的命令行界面
提供相当灵活的命令行界面,可从菜单访问,用于编辑任何预设命令或从头开始编写新的引导命令集。如果没有配置文件存在,GRUB将进入命令行界面。
GRUB 2 提供了一个强大的命令行界面,允许用户直接在引导过程中执行各种命令,如加载内核、修改配置等。这对于调试和故障排除非常有用。

引导参数设置:GRUB 2 允许用户在引导时设置各种参数,如内核参数、启动级别等。GRUB 2提供了高级引导选项,可以在引导过程中指定这些选项。这些选项允许您修改内核参数,指定备用的initramfs文件,进入单用户模式以及执行其他操作。

支持多种文件系统类型
透明地支持多种文件系统类型,还提供有用的显式块列表表示。当前支持的文件系统类型包括Amiga Fast FileSystem(AFFS)、AtheOS fs、BeFS、BtrFS(包括raid0、raid1、raid10、gzip和lzo)、cpio(小端和大端的bin、odc和newc变体)、Linux ext2/ext3/ext4、DOS FAT12/FAT16/FAT32、exFAT、F2FS、HFS、HFS+、ISO9660(包括Joliet、Rock-ridge和多个chunk文件)、JFS、Minix fs(版本1、2和3)、nilfs2、NTFS(包括压缩)、ReiserFS、ROMFS、Amiga Smart FileSystem(SFS)、Squash4、tar、UDF、BSD UFS/UFS2、XFS和ZFS(包括lzjb、gzip、zle、mirror、stripe、raidz1/2/3和AES-CCM和AES-GCM的加密)。有关更多信息,请参阅文件系统。

支持自动解压缩
可以解压缩由gzip或xz压缩的文件。此功能对用户来说是自动的和透明的(即所有功能都在解压缩后的文件内容上操作)。这大大减小了文件大小和加载时间,对于软盘来说尤为重要。
可以想象某些内核模块应以压缩状态加载,因此可以指定不同的模块加载命令以避免解压缩模块。

访问任何已安装设备上的数据
支持从BIOS识别的任何软盘或硬盘读取数据,与根设备的设置无关。

不依赖于驱动器几何转换
与许多其他引导加载程序不同,GRUB不受特定驱动器转换的影响。可以将已安装和运行的驱动器从一种转换转换为另一种转换,而不会产生任何不良影响或更改GRUB的配置。

检测所有已安装的RAM
GRUB通常可以找到PC兼容机器上安装的所有RAM。它使用先进的BIOS查询技术来查找所有内存区域。如Multiboot规范中所述(请参阅Multiboot规范的动机部分),并非所有内核都使用此信息,但GRUB为那些使用的内核提供了该信息。

支持逻辑块地址模式
在传统的磁盘调用中(称为CHS模式),存在几何转换问题,即BIOS无法访问超过1024个柱面,因此可访问的空间限制在至少508 MB至最多8GB之间。GRUB无法普遍解决此问题,因为没有在所有机器上使用的标准接口。然而,一些较新的机器具有新的接口,称为逻辑块地址(LBA)模式。GRUB会自动检测是否可用LBA模式,并在可用时使用它。在LBA模式下,GRUB可以访问整个磁盘。

支持网络引导
GRUB基本上是一个基于磁盘的引导加载程序,但也具有网络支持。您可以使用TFTP协议从网络加载操作系统映像。

支持远程终端
为了支持没有控制台的计算机,GRUB提供了远程终端支持,这样您就可以从远程主机控制GRUB。目前只实现了串行终端支持。

二、GRUB 2相关文件/文件夹

有几个文件/文件夹这里介绍一下:
(1)/etc/default/grub文件
(2)/etc/grub.d/文件夹
(3)/boot/grub2/grub.cfg

下面以Centos 7为例。

2.1 /etc/default/grub文件

/etc/default/grub文件是用于配置GRUB 2引导加载程序的主要配置文件之一。它包含了一些全局的设置和变量,用于控制GRUB的行为和外观。

# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

(1)GRUB_TIMEOUT=5:将引导菜单等待用户输入的时间设置为5秒。如果没有用户输入,将自动启动默认菜单条目。
(2)GRUB_DISTRIBUTOR=“ ( s e d ′ s , r e l e a s e . ∗ (sed 's, release .* (seds,release.,g’ /etc/system-release)”:通过命令替换的方式,从/etc/system-release文件获取发行版信息,并将其赋值给GRUB_DISTRIBUTOR变量。这样可以动态地获取发行版信息并在引导菜单中显示。
(3)GRUB_DEFAULT=saved:设置默认启动的菜单条目为上一次选择的条目。这意味着,如果用户在上次引导时选择了特定的菜单条目,那么下一次引导时将自动选择该条目作为默认启动项。
(4)GRUB_DISABLE_SUBMENU=true:禁用子菜单功能,将所有菜单条目显示在一个平面列表中,而不是进行分组。
(5)GRUB_TERMINAL_OUTPUT=“console”:将GRUB的终端输出设置为文本终端(console),而不是图形终端(gfxterm)。
(6)GRUB_CMDLINE_LINUX=“crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet”:在Linux内核启动时传递的命令行参数。这些参数包括crashkernel=auto(用于自动配置系统崩溃内核转储)、spectre_v2=retpoline(用于针对Spectre漏洞的保护)、rd.lvm.lv=centos/root和rd.lvm.lv=centos/swap(用于指定LVM逻辑卷的根和交换分区)、rhgb(用于显示图形启动进度)和quiet(用于减少启动时的冗余输出)。
(7)GRUB_DISABLE_RECOVERY=“true”:禁用恢复模式菜单,在引导菜单中不显示恢复模式选项。

在对/etc/default/grub文件进行任何更改后,需要通过运行 grub-mkconfig 命令使更改生效。该命令会重新生成/boot/grub2/grub.cfg文件,其中包含实际引导菜单的配置。

2.2 /etc/grub.d/文件夹

/etc/grub.d/文件夹是用于存放GRUB 2配置脚本的目录。在这个文件夹中,每个脚本文件都负责生成GRUB 2菜单的一部分。这些脚本文件以数字开头,用于确定它们在菜单中的顺序。

通常,这些脚本用于自动检测并添加可引导的操作系统和内核选项到GRUB 2菜单中。它们还可以包含其他自定义配置,例如设置菜单默认选项、添加自定义菜单项或启用特定功能等。

当运行update-grub命令时,GRUB 2会扫描/etc/grub.d/文件夹中的脚本,并根据脚本生成菜单配置文件(grub.cfg)。因此,如果需要对GRUB 2菜单进行自定义配置,可以编辑/etc/grub.d/文件夹中的相应脚本,并在更新配置后运行update-grub命令以使更改生效。

# ls /etc/grub.d/
00_header  00_tuned  01_users  10_linux  20_linux_xen  20_ppc_terminfo  30_os-prober  40_custom  41_custom  README

2.3 /boot/grub/grub.cfg文件

/boot/grub/grub.cfg(或者/boot/grub2/grub.cfg)文件是GRUB 2引导加载程序的配置文件,它包含了引导菜单的详细配置信息。该文件由GRUB 2根据/etc/default/grub文件和其他相关文件自动生成。

grub.cfg文件是由一系列脚本生成的,通常不应直接编辑。当系统中的内核或引导配置发生更改时,可以使用grub2-mkconfig命令(如grub2-mkconfig -o /boot/grub2/grub.cfg)重新生成该文件。

grub.cfg文件的结构比旧版本的GRUB(如GRUB Legacy)的配置文件要复杂得多。它包含多个菜单节(menuentry),每个菜单节定义了一个可供选择的操作系统或内核。

每个菜单节包含了一系列的配置指令,用于定义菜单项的标题、内核文件、内核参数、初始化内存盘(initrd)文件等。这些配置指令提供了引导操作系统所需的详细信息。

在grub.cfg文件中,还可以找到一些自动生成的部分,例如用于检测其他操作系统(如Windows)并将其添加到引导菜单中的代码。

由于grub.cfg文件是自动生成的,因此在对引导菜单进行更改时,不应直接编辑该文件。而是应该修改/etc/default/grub文件或/etc/grub.d/目录中的相关脚本文件,并使用grub2-mkconfig命令重新生成grub.cfg文件,以确保更改正确应用。

NAME
       grub-mkconfig — Generate a GRUB configuration file.

SYNOPSIS
       grub-mkconfig [-o | --output=FILE]

DESCRIPTION
       grub-mkconfig generates a configuration file for GRUB.
# cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
......
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-1855e442-e30a-4135-9389-0fcdbdc7551d' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod xfs
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  3a286201-19dc-4036-bf40-d4a8bfdc30cf
        else
          search --no-floppy --fs-uuid --set=root 3a286201-19dc-4036-bf40-d4a8bfdc30cf
        fi
        linuxefi /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
        initrdefi /initramfs-3.10.0-1160.el7.x86_64.img
}
menuentry 'CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-1855e442-e30a-4135-9389-0fcdbdc7551d' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod xfs
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  3a286201-19dc-4036-bf40-d4a8bfdc30cf
        else
          search --no-floppy --fs-uuid --set=root 3a286201-19dc-4036-bf40-d4a8bfdc30cf
        fi
        linuxefi /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
        initrdefi /initramfs-3.10.0-693.el7.x86_64.img
}
......

三、grubx64.efi

grubx64.efi是GNU GRUB(GRand Unified Bootloader)引导管理器的UEFI版本,它是一种常用的引导程序,被广泛应用于Linux系统中。当计算机使用UEFI启动时,UEFI固件会查找EFI目录下的grubx64.efi文件,并将其加载到内存中。然后,grubx64.efi将会显示一个菜单,列出可用的操作系统和内核,允许用户选择要启动的操作系统或内核。在Linux ISO image中,grubx64.efi文件通常被用作引导管理器,用于启动Linux操作系统的安装程序。

对于Linux发行版,grubx64.efi是GRUB2在UEFI环境下的引导加载程序。虽然Grub是开源软件,理论上可以编译和定制,但通常情况下,个人用户不是通过直接编辑.efi文件来配置GRUB,而是通过编辑其配置文件(如/boot/grub/grub.cfg)来更改引导菜单、内核选项等。如果确实需要修改源代码,那也是先修改源代码然后重新编译生成新的.efi文件。

grubx64.efi文件是怎么找到grub.cfg文件的:

在UEFI系统中,grubx64.efi引导管理器启动后,它会搜索EFI系统分区中的特定目录和文件,以找到grub.cfg配置文件。具体来说,grubx64.efi通常会按照以下顺序搜索grub.cfg文件:

(1)首先,grubx64.efi会在EFI目录下搜索grub.cfg文件。如果在EFI目录下找到了grub.cfg文件,它会直接加载并执行该文件。

(2)如果在EFI目录下没有找到grub.cfg文件,grubx64.efi会继续搜索EFI目录下的/boot/grub目录。在该目录下,它会尝试查找grub.cfg文件,并加载执行该文件。

(3)如果在/boot/grub目录下也没有找到grub.cfg文件,grubx64.efi会继续搜索EFI系统分区中的其他目录,包括/efi/{distro}/、/efi/boot/等,以查找grub.cfg文件。

(4)一旦grubx64.efi找到了grub.cfg文件,它就会将文件加载到内存中,并根据文件中的配置信息启动相应的操作系统或内核。注意,grub.cfg文件的位置和名称可能因Linux发行版和安装方式而有所不同,但通常情况下,它们会遵循上述搜索规则。

uefi + grub2引导方式如下:

x86_64: uefi ==> shimx64.efi ==> grubx64.efi ==> /boot/efi/EFI/centos/grub.cfg ==> vmlinuz & initramfs

以centos7为例,其位置:

/boot/efi/EFI/centos/grubx64.efi
# file /boot/efi/EFI/centos/grubx64.efi
/boot/efi/EFI/centos/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows

grubx64.efi 是 GRUB 引导加载程序的一个文件,用于在 UEFI 系统中启动操作系统。它是 GRUB 的 UEFI 版本,专门设计用于 x86-64 架构的计算机。

在 UEFI 系统中,grubx64.efi 被用作主引导加载程序,负责加载操作系统内核和初始化 RAM 文件系统(initramfs)。它是由 GRUB 提供的一个可信的引导加载程序,通常与 shimx64.efi 结合使用,以支持 UEFI Secure Boot。

grubx64.efi 的配置文件通常位于 /boot/grub/grub.cfg 或 /etc/grub.d/ 目录中。在配置文件中,可以定义引导菜单,包括可供选择的操作系统、启动参数和其他设置。

GRUB 具有强大的功能和灵活性,可以处理多个操作系统的引导和配置。它支持多个文件系统,可以通过配置文件进行自定义和扩展。通过编辑和配置 grubx64.efi 的配置文件,可以修改引导菜单、添加新的启动选项、设置默认启动项等。

详细说明:
(1)GRUB(Grand Unified Bootloader):GRUB 是 Linux 系统中常用的引导加载程序。它提供了一个灵活且可自定义的引导菜单,让用户能够在计算机启动时选择和启动不同的操作系统或内核选项。grubx64.efi 是 GRUB 的 UEFI 版本,专门设计用于 x86-64 架构的计算机。
(2)UEFI 兼容性:UEFI(Unified Extensible Firmware Interface)是许多计算机中使用的现代固件接口。grubx64.efi 的设计目标是与 UEFI 固件兼容,使其可以作为系统启动时的主要引导加载程序。
(3)引导菜单配置:grubx64.efi 依赖于其配置文件,通常位于 /boot/grub/grub.cfg 或 /etc/grub.d/ 目录中,用于定义引导菜单选项。在配置文件中,可以指定可用的操作系统、内核参数、启动选项和其他设置。这使用户能够根据自己的偏好自定义引导过程。
(4)多操作系统支持:GRUB 的一个主要优点是可以处理多个操作系统。通过 grubx64.efi,可以配置引导菜单以显示计算机上安装的多个操作系统的列表,方便用户在启动时选择所需的操作系统。这对于双启动或多启动设置非常方便。
(5)高级功能:GRUB 提供了各种高级功能,例如链式加载其他引导加载程序、配置启动时参数、设置默认引导选项,甚至提供命令行界面用于故障排除和系统维护。
(6)主题和图形界面支持:GRUB 还可以通过主题和图形用户界面(GUI)进行自定义,以增强引导菜单的视觉外观和用户体验。

参考资料

https://www.gnu.org/software/grub/manual/grub/html_node/index.html
https://help.ubuntu.com/community/Grub2
https://www.cnblogs.com/shamoguzhou/p/17380191.html
https://blog.csdn.net/Anhui_Chen/article/details/106988113
https://mp.weixin.qq.com/s/N_lSjtorg0Ho_hSBiM5uKA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AtCoder ABC352 A-D题解

比赛链接:ABC352 Problem A: 签到题。 #include <bits/stdc.h> using namespace std; int main(){int N,X,Y,Z;cin>>N>>X>>Y>>Z;if((X<Z && Z<Y) || (Y<Z && Z<X))cout<<"YES"<<endl;else…

微服务雪崩问题、Sentinel(请求限流、线程隔离、服务熔断)、Seata分布式事务

文章目录 前言一、微服务保护二、Sentinel2.1 微服务整合2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务熔断 三、分布式事务3.1 Seata3.1.1 Seata架构3.1.2 部署TC服务3.1.3 微服务集成Seata 3.2 XA模式3.3 AT模式 前言 微服务之间为什么会雪崩&#xff1f;怎么解决雪崩问题&…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目录 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息订阅&#xff08;2.2&#xff09;JavaScript 消息订阅 &#xff08;三&#xff09;Storage&#xff08;存储&#xff09;&…

如何撰写EI会议的投稿信?

撰写EI会议的投稿信&#xff08;Cover Letter&#xff09;是向会议组织者介绍你的论文和研究工作的一个重要环节。以下是撰写投稿信的一些关键步骤和建议&#xff1a; 投稿信的结构 信头 你的信息&#xff1a;包括姓名、职位、单位名称、通讯地址、电子邮件和电话号码。日期&am…

LeetCode198:打家劫舍

题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存…

【论文笔记】Layer-Wise Weight Decay for Deep Neural Networks

Abstract 本文为了提高深度神经网络的训练效率&#xff0c;提出了逐层权重衰减(layer-wise weight decay)。 本文方法通过逐层设置权重衰减稀疏的不同值&#xff0c;使反向传播梯度的尺度与权重衰减的尺度之比在整个网络中保持恒定。这种设置可以避免过拟合或欠拟合&#xff0…

完全匹配企业需求的替代FTP升级软件怎么找

企业在处理数据传输时&#xff0c;效率和安全性是关键。尽管传统的FTP曾被广泛采用&#xff0c;但因其传输慢、安全性不足和难以管理等问题&#xff0c;已不再满足现代企业的需求。许多企业正在寻找能够满足其需求的FTP替代方案&#xff0c;但市场上选择众多&#xff0c;找到合…

设计模式使用(成本扣除)

前言 名词解释 基础名词 订单金额&#xff1a;用户下单时支付的金额&#xff0c;这个最好理解 产品分成&#xff1a;也就是跟其他人合做以后我方能分到的金额&#xff0c;举个例子&#xff0c;比如用户订单金额是 100 块&#xff0c;我方的分成是 80%&#xff0c;那么也就是…

双向链表C++,C#,Java版,这些程序大多已经过测试,一直在用。

先C版吧&#xff0c;我最先用的是C#,后来是Java&#xff0c;后来改用C版的&#xff0c;因为现在一直在用C&#xff0c;单链 表一直没写上去&#xff0c;因为我很少用&#xff0c;用的是双链表。 执行代码例子1&#xff1a; int main() { _DList<_string> s…

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…

基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析

网络摄像机AHD、CVBS、HDMI接口的区别有哪些&#xff1f;应用场景有哪些&#xff1f; AHD、CVBS和HDMI是不同的视频传输接口&#xff0c;分别适用于不同的应用场景。下面是它们的主要应用场景&#xff1a; 1.AHD&#xff08;Analog High Definition&#xff09;&#xff1a;A…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【Linux】用户级缓冲区

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【linux】详解linux权限

目录 用户 文件属性 更改文件权限 更改文件拥有者 更改文件所属组 用户的权限 文件掩码 粘滞位 总结 基本指令可参考&#xff1a; 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 用户 超级用户&#xff08;root&#xff09;&#xff…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题&#xff0c;也就是说有若干个起点&#xff0c;那我们就可以暴力一点&#xff0c;直接把多源最短路径问题转化成若干个单源最短路径问题&#xff0c;然后将每次的步数比较一下&#xff0c;取到最短的就是最短路径的结果&#xff0c;这…

安卓部署ffmpeg全平台so并实现命令行调用

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so 第四章 部署ffmpeg安卓全平台so并使用&#xff08;本章&#xff09; 文章目录 安卓 FFmpeg系列前言一、添加so1、拷贝ffmpeg到项目2、bu…

华为CE6851-48S6Q-HI升级设备版本及补丁

文章目录 升级前准备工作笔记本和交换机设备配置互联地址启用FTP设备访问FTP设备升级系统版本及补丁 升级前准备工作 使用MobaXterm远程工具连接设备&#xff0c;并作为FTP服务器准备升级所需的版本文件及补丁文件 笔记本和交换机设备配置互联地址 在交换机接口配置IP&#…

文件传输服务应用1——java集成smb2/3实现文件共享方案详细教程和windows共享服务使用配置

在实际项目开发过程中&#xff0c;读取网络资源或者局域网内主机的文件是必要的操作和需求。而FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同…

3DMax

先转换为可编辑多边形 按“1”选择为点&#xff0c;点击目标焊接&#xff08;CtrlShiftw&#xff09;&#xff0c;然后点击一个顶点拉到另一个定点上&#xff1b; 选择一个面&#xff0c;点击塌陷&#xff08;CtrlAltC&#xff09;&#xff0c;四点合并为一个点&#xff1b; …

Ai指令-公众号内训课:学会ai指令+公众号的底层逻辑(7节课)

课程目录 第一课:详解公众号的流量机制.mp4 第二课:快速搞定公众号号设化装修.mp4 第三课:一期学员直呼牛X的课程&#xff0c;正确的爆文利用姿势.mp4 第五课:颗粒度级别拆解AI公众号爆文.mp4 第六课:AI提示词进阶技巧课。提示词自动化.mp4 第七课.实操演示提示词撰写工作…