* [PATCH 0/2] docs/zh_CN: Add two new translations in zh_CN/admin-guide @ 2021-06-20 10:40 Wu XiangCheng 2021-06-20 10:40 ` [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst Wu XiangCheng 2021-06-20 10:41 ` [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst Wu XiangCheng 0 siblings, 2 replies; 10+ messages in thread From: Wu XiangCheng @ 2021-06-20 10:40 UTC (permalink / raw) To: Alex Shi; +Cc: Jonathan Corbet, linux-doc, Yanteng Si Add two new translations zh_CN/admin-guide/efi-stub.rst zh_CN/admin-guide/initrd.rst Wu XiangCheng (2): docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst .../zh_CN/admin-guide/efi-stub.rst | 86 +++++ .../translations/zh_CN/admin-guide/index.rst | 4 +- .../translations/zh_CN/admin-guide/initrd.rst | 324 ++++++++++++++++++ 3 files changed, 412 insertions(+), 2 deletions(-) create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst create mode 100644 Documentation/translations/zh_CN/admin-guide/initrd.rst -- 2.20.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-20 10:40 [PATCH 0/2] docs/zh_CN: Add two new translations in zh_CN/admin-guide Wu XiangCheng @ 2021-06-20 10:40 ` Wu XiangCheng 2021-06-21 9:12 ` Alex Shi 2021-06-23 3:28 ` teng sterling 2021-06-20 10:41 ` [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst Wu XiangCheng 1 sibling, 2 replies; 10+ messages in thread From: Wu XiangCheng @ 2021-06-20 10:40 UTC (permalink / raw) To: Alex Shi; +Cc: Jonathan Corbet, linux-doc, Yanteng Si Add a new translation Documentation/translations/zh_CN/admin-guide/efi-stub.rst and link it to zh_CN/admin-guide/index.rst Signed-off-by: Wu XiangCheng <bobwxc@email.cn> --- .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ .../translations/zh_CN/admin-guide/index.rst | 2 +- 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst new file mode 100644 index 000000000000..b6a4cedec8eb --- /dev/null +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst @@ -0,0 +1,86 @@ +.. include:: ../disclaimer-zh_CN.rst + +:Original: Documentation/admin-guide/efi-stub.rst + +:译者: + + 吴想成 Wu XiangCheng <bobwxc@email.cn> + +========= +EFI引导桩 +========= + +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 +代码被统称为“EFI引导桩(EFI Boot Stub)”,分布在arch/x86/boot/header.S和 +arch/x86/boot/compressed/eboot.c中。对于ARM,EFI桩在arch/arm/boot/compressed/efi-header.S +和arch/arm/boot/compressed/efi-stub.c中实现。体系结构之间共享的EFI桩代码 +位于drivers/firmware/efi/libstub中。 + +而arm64没有压缩内核支持,因此映像本身伪装成PE/COFF映像,EFI桩链接到内核。 +arm64 EFI桩位于arch/arm64/kernel/EFI entry.S和drivers/firmware/efi/libstub/arm64-stub.c +中。 + +通过使用EFI引导桩,可以在不使用传统EFI引导加载程序的情况下引导Linux内核, +如grub或elilo。由于EFI引导桩执行了引导加载程序的工作,因此某种意义上来说 +它 *就是* 引导加载程序。 + +EFI引导桩通过CONFIG_EFI_STUB内核选项启用。 + + +如何安装bzImage.efi +------------------- + +位于arch/x86/boot/bzImage中的bzImage必须复制到EFI系统分区(ESP)并修改扩展名 +为“.efi”。没有扩展名的话EFI固件加载程序将拒绝执行它。尚无法从普通的Linux文件 +系统中执行bzImage.efi,因为EFI固件不支持这些文件系统。ARM平台需要将arch/arm/boot/zImage +复制到系统分区,并可能无需重命名;arm64也类似,需要复制arch/arm64/boot/Image, +但不一定要重命名。 + + +从EFI shell传递内核参数 +----------------------- + +内核参数可于bzImage.efi之后传递,例如:: + + fs0:> bzImage.efi console=ttyS0 root=/dev/sda4 + + +“initrd=”选项 +------------- + +与大多数引导加载程序一样,EFI桩允许用户使用“initrd=”选项指定多个initrd文件。 +这是唯一的EFI桩特殊特命令行参数,其他所有内容都在将内核启动时传递给内核。 + +initrd文件的路径必须为从ESP开始的绝对路径,相对路径无法使用。同时此路径为EFI +风格,目录元素必须用反斜杠(\)分隔。例如给定以下目录布局:: + + fs0:> + Kernels\ + bzImage.efi + initrd-large.img + + Ramdisks\ + initrd-small.img + initrd-medium.img + +现工作目录为fs0:\Kernels,要使用initrd-large.img文件引导,则须使用以下命令:: + + fs0:\Kernels> bzImage.efi initrd=\Kernels\initrd-large.img + +请注意bzImage.efi是怎样可用相对路径指定的。那是因为我们执行的映像是由EFI shell +解释的,它可解析相对路径,而命令行的其余部分则传递给bzImage.efi。 + + +“dtb=”选项 +---------- + +对于ARM和arm64体系结构,必须为内核提供一个设备树。通常固件应通过EFI CONFIGURATION +TABLE(EFI配置表)来支持设备树。但是“dtb=”命令行选项可以用于覆盖固件提供的设备 +树,或在固件无法提供时来提供一个设备树。 + +请注意:固件将在启动内核之前将运行时配置信息添加到设备树。如果 ``dtb=`` 被用来 +覆盖设备树,则固件提供的任何运行时数据都将丢失。 ``dtb=`` 选项应只用作调试工具, +或者在EFI CONFIGURATION TABLE中未提供设备树时作为最后的手段。 + +“dtb=”的处理方式与上述“initrd=”选项相同。 diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst index 460034cbc2ab..d74f5e864898 100644 --- a/Documentation/translations/zh_CN/admin-guide/index.rst +++ b/Documentation/translations/zh_CN/admin-guide/index.rst @@ -65,6 +65,7 @@ Todolist: clearing-warn-once cpu-load + efi-stub lockup-watchdogs unicode @@ -87,7 +88,6 @@ Todolist: dell_rbu device-mapper/index edid - efi-stub ext4 nfs/index gpio/index -- 2.20.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-20 10:40 ` [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst Wu XiangCheng @ 2021-06-21 9:12 ` Alex Shi 2021-06-21 13:32 ` teng sterling 2021-06-21 15:59 ` Wu X.C. 2021-06-23 3:28 ` teng sterling 1 sibling, 2 replies; 10+ messages in thread From: Alex Shi @ 2021-06-21 9:12 UTC (permalink / raw) To: Wu XiangCheng, Alex Shi; +Cc: Jonathan Corbet, linux-doc, Yanteng Si On 6/20/21 6:40 PM, Wu XiangCheng wrote: > Add a new translation > Documentation/translations/zh_CN/admin-guide/efi-stub.rst > and link it to zh_CN/admin-guide/index.rst > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > --- > .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ > .../translations/zh_CN/admin-guide/index.rst | 2 +- > 2 files changed, 87 insertions(+), 1 deletion(-) > create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > new file mode 100644 > index 000000000000..b6a4cedec8eb > --- /dev/null > +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > @@ -0,0 +1,86 @@ > +.. include:: ../disclaimer-zh_CN.rst > + > +:Original: Documentation/admin-guide/efi-stub.rst > + > +:译者: > + > + 吴想成 Wu XiangCheng <bobwxc@email.cn> > + > +========= > +EFI引导桩 > +========= > + > +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 > +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 > +代码被统称为“EFI引导桩(EFI Boot Stub)”,分布在arch/x86/boot/header.S和 > +arch/x86/boot/compressed/eboot.c中。对于ARM,EFI桩在arch/arm/boot/compressed/efi-header.S > +和arch/arm/boot/compressed/efi-stub.c中实现。体系结构之间共享的EFI桩代码 > +位于drivers/firmware/efi/libstub中。 > + > +而arm64没有压缩内核支持,因此映像本身伪装成PE/COFF映像,EFI桩链接到内核。 arm64不支持压缩内核? Thanks Alex > +arm64 EFI桩位于arch/arm64/kernel/EFI entry.S和drivers/firmware/efi/libstub/arm64-stub.c > +中。 > + > +通过使用EFI引导桩,可以在不使用传统EFI引导加载程序的情况下引导Linux内核, > +如grub或elilo。由于EFI引导桩执行了引导加载程序的工作,因此某种意义上来说 > +它 *就是* 引导加载程序。 > + > +EFI引导桩通过CONFIG_EFI_STUB内核选项启用。 > + > + > +如何安装bzImage.efi > +------------------- > + > +位于arch/x86/boot/bzImage中的bzImage必须复制到EFI系统分区(ESP)并修改扩展名 > +为“.efi”。没有扩展名的话EFI固件加载程序将拒绝执行它。尚无法从普通的Linux文件 > +系统中执行bzImage.efi,因为EFI固件不支持这些文件系统。ARM平台需要将arch/arm/boot/zImage > +复制到系统分区,并可能无需重命名;arm64也类似,需要复制arch/arm64/boot/Image, > +但不一定要重命名。 > + > + > +从EFI shell传递内核参数 > +----------------------- > + > +内核参数可于bzImage.efi之后传递,例如:: > + > + fs0:> bzImage.efi console=ttyS0 root=/dev/sda4 > + > + > +“initrd=”选项 > +------------- > + > +与大多数引导加载程序一样,EFI桩允许用户使用“initrd=”选项指定多个initrd文件。 > +这是唯一的EFI桩特殊特命令行参数,其他所有内容都在将内核启动时传递给内核。 > + > +initrd文件的路径必须为从ESP开始的绝对路径,相对路径无法使用。同时此路径为EFI > +风格,目录元素必须用反斜杠(\)分隔。例如给定以下目录布局:: > + > + fs0:> > + Kernels\ > + bzImage.efi > + initrd-large.img > + > + Ramdisks\ > + initrd-small.img > + initrd-medium.img > + > +现工作目录为fs0:\Kernels,要使用initrd-large.img文件引导,则须使用以下命令:: > + > + fs0:\Kernels> bzImage.efi initrd=\Kernels\initrd-large.img > + > +请注意bzImage.efi是怎样可用相对路径指定的。那是因为我们执行的映像是由EFI shell > +解释的,它可解析相对路径,而命令行的其余部分则传递给bzImage.efi。 > + > + > +“dtb=”选项 > +---------- > + > +对于ARM和arm64体系结构,必须为内核提供一个设备树。通常固件应通过EFI CONFIGURATION > +TABLE(EFI配置表)来支持设备树。但是“dtb=”命令行选项可以用于覆盖固件提供的设备 > +树,或在固件无法提供时来提供一个设备树。 > + > +请注意:固件将在启动内核之前将运行时配置信息添加到设备树。如果 ``dtb=`` 被用来 > +覆盖设备树,则固件提供的任何运行时数据都将丢失。 ``dtb=`` 选项应只用作调试工具, > +或者在EFI CONFIGURATION TABLE中未提供设备树时作为最后的手段。 > + > +“dtb=”的处理方式与上述“initrd=”选项相同。 > diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst > index 460034cbc2ab..d74f5e864898 100644 > --- a/Documentation/translations/zh_CN/admin-guide/index.rst > +++ b/Documentation/translations/zh_CN/admin-guide/index.rst > @@ -65,6 +65,7 @@ Todolist: > > clearing-warn-once > cpu-load > + efi-stub > lockup-watchdogs > unicode > > @@ -87,7 +88,6 @@ Todolist: > dell_rbu > device-mapper/index > edid > - efi-stub > ext4 > nfs/index > gpio/index > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-21 9:12 ` Alex Shi @ 2021-06-21 13:32 ` teng sterling 2021-06-21 15:59 ` Wu X.C. 1 sibling, 0 replies; 10+ messages in thread From: teng sterling @ 2021-06-21 13:32 UTC (permalink / raw) To: Alex Shi; +Cc: Wu XiangCheng, Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si Alex Shi <seakeel@gmail.com> 于2021年6月21日周一 下午5:13写道: > > > > On 6/20/21 6:40 PM, Wu XiangCheng wrote: > > Add a new translation > > Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > and link it to zh_CN/admin-guide/index.rst > > > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > > --- > > .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ > > .../translations/zh_CN/admin-guide/index.rst | 2 +- > > 2 files changed, 87 insertions(+), 1 deletion(-) > > create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > > > diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > new file mode 100644 > > index 000000000000..b6a4cedec8eb > > --- /dev/null > > +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > @@ -0,0 +1,86 @@ > > +.. include:: ../disclaimer-zh_CN.rst > > + > > +:Original: Documentation/admin-guide/efi-stub.rst > > + > > +:译者: > > + > > + 吴想成 Wu XiangCheng <bobwxc@email.cn> > > + > > +========= > > +EFI引导桩 > > +========= > > + > > +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 > > +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 > > +代码被统称为“EFI引导桩(EFI Boot Stub)”,分布在arch/x86/boot/header.S和 > > +arch/x86/boot/compressed/eboot.c中。对于ARM,EFI桩在arch/arm/boot/compressed/efi-header.S > > +和arch/arm/boot/compressed/efi-stub.c中实现。体系结构之间共享的EFI桩代码 > > +位于drivers/firmware/efi/libstub中。 > > + > > +而arm64没有压缩内核支持,因此映像本身伪装成PE/COFF映像,EFI桩链接到内核。 > > arm64不支持压缩内核? Hi Alex: ls linux-next/arch/arm64 There is no compressed file. ls linux-next/arch/mips There is compressed here, so, I think "For arm64, there is no compressed kernel support" :-) Thanks, Yanteng > > Thanks > Alex > > +arm64 EFI桩位于arch/arm64/kernel/EFI entry.S和drivers/firmware/efi/libstub/arm64-stub.c > > +中。 > > + > > +通过使用EFI引导桩,可以在不使用传统EFI引导加载程序的情况下引导Linux内核, > > +如grub或elilo。由于EFI引导桩执行了引导加载程序的工作,因此某种意义上来说 > > +它 *就是* 引导加载程序。 > > + > > +EFI引导桩通过CONFIG_EFI_STUB内核选项启用。 > > + > > + > > +如何安装bzImage.efi > > +------------------- > > + > > +位于arch/x86/boot/bzImage中的bzImage必须复制到EFI系统分区(ESP)并修改扩展名 > > +为“.efi”。没有扩展名的话EFI固件加载程序将拒绝执行它。尚无法从普通的Linux文件 > > +系统中执行bzImage.efi,因为EFI固件不支持这些文件系统。ARM平台需要将arch/arm/boot/zImage > > +复制到系统分区,并可能无需重命名;arm64也类似,需要复制arch/arm64/boot/Image, > > +但不一定要重命名。 > > + > > + > > +从EFI shell传递内核参数 > > +----------------------- > > + > > +内核参数可于bzImage.efi之后传递,例如:: > > + > > + fs0:> bzImage.efi console=ttyS0 root=/dev/sda4 > > + > > + > > +“initrd=”选项 > > +------------- > > + > > +与大多数引导加载程序一样,EFI桩允许用户使用“initrd=”选项指定多个initrd文件。 > > +这是唯一的EFI桩特殊特命令行参数,其他所有内容都在将内核启动时传递给内核。 > > + > > +initrd文件的路径必须为从ESP开始的绝对路径,相对路径无法使用。同时此路径为EFI > > +风格,目录元素必须用反斜杠(\)分隔。例如给定以下目录布局:: > > + > > + fs0:> > > + Kernels\ > > + bzImage.efi > > + initrd-large.img > > + > > + Ramdisks\ > > + initrd-small.img > > + initrd-medium.img > > + > > +现工作目录为fs0:\Kernels,要使用initrd-large.img文件引导,则须使用以下命令:: > > + > > + fs0:\Kernels> bzImage.efi initrd=\Kernels\initrd-large.img > > + > > +请注意bzImage.efi是怎样可用相对路径指定的。那是因为我们执行的映像是由EFI shell > > +解释的,它可解析相对路径,而命令行的其余部分则传递给bzImage.efi。 > > + > > + > > +“dtb=”选项 > > +---------- > > + > > +对于ARM和arm64体系结构,必须为内核提供一个设备树。通常固件应通过EFI CONFIGURATION > > +TABLE(EFI配置表)来支持设备树。但是“dtb=”命令行选项可以用于覆盖固件提供的设备 > > +树,或在固件无法提供时来提供一个设备树。 > > + > > +请注意:固件将在启动内核之前将运行时配置信息添加到设备树。如果 ``dtb=`` 被用来 > > +覆盖设备树,则固件提供的任何运行时数据都将丢失。 ``dtb=`` 选项应只用作调试工具, > > +或者在EFI CONFIGURATION TABLE中未提供设备树时作为最后的手段。 > > + > > +“dtb=”的处理方式与上述“initrd=”选项相同。 > > diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst > > index 460034cbc2ab..d74f5e864898 100644 > > --- a/Documentation/translations/zh_CN/admin-guide/index.rst > > +++ b/Documentation/translations/zh_CN/admin-guide/index.rst > > @@ -65,6 +65,7 @@ Todolist: > > > > clearing-warn-once > > cpu-load > > + efi-stub > > lockup-watchdogs > > unicode > > > > @@ -87,7 +88,6 @@ Todolist: > > dell_rbu > > device-mapper/index > > edid > > - efi-stub > > ext4 > > nfs/index > > gpio/index > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-21 9:12 ` Alex Shi 2021-06-21 13:32 ` teng sterling @ 2021-06-21 15:59 ` Wu X.C. 1 sibling, 0 replies; 10+ messages in thread From: Wu X.C. @ 2021-06-21 15:59 UTC (permalink / raw) To: Alex Shi; +Cc: Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si [-- Attachment #1: Type: text/plain, Size: 1928 bytes --] On Mon, Jun 21, 2021 at 05:12:26PM +0800, Alex Shi wrote: > > > On 6/20/21 6:40 PM, Wu XiangCheng wrote: > > Add a new translation > > Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > and link it to zh_CN/admin-guide/index.rst > > > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > > --- > > .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ > > .../translations/zh_CN/admin-guide/index.rst | 2 +- > > 2 files changed, 87 insertions(+), 1 deletion(-) > > create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > > > diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > new file mode 100644 > > index 000000000000..b6a4cedec8eb > > --- /dev/null > > +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > @@ -0,0 +1,86 @@ > > +.. include:: ../disclaimer-zh_CN.rst > > + > > +:Original: Documentation/admin-guide/efi-stub.rst > > + > > +:译者: > > + > > + 吴想成 Wu XiangCheng <bobwxc@email.cn> > > + > > +========= > > +EFI引导桩 > > +========= > > + > > +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 > > +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 > > +代码被统称为“EFI引导桩(EFI Boot Stub)”,分布在arch/x86/boot/header.S和 > > +arch/x86/boot/compressed/eboot.c中。对于ARM,EFI桩在arch/arm/boot/compressed/efi-header.S > > +和arch/arm/boot/compressed/efi-stub.c中实现。体系结构之间共享的EFI桩代码 > > +位于drivers/firmware/efi/libstub中。 > > + > > +而arm64没有压缩内核支持,因此映像本身伪装成PE/COFF映像,EFI桩链接到内核。 > > arm64不支持压缩内核? > > Thanks > Alex OK! Thanks, Wu X.C. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 659 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-20 10:40 ` [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst Wu XiangCheng 2021-06-21 9:12 ` Alex Shi @ 2021-06-23 3:28 ` teng sterling 2021-06-23 6:44 ` Wu X.C. 1 sibling, 1 reply; 10+ messages in thread From: teng sterling @ 2021-06-23 3:28 UTC (permalink / raw) To: Wu XiangCheng; +Cc: Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si Wu XiangCheng <bobwxc@email.cn> 于2021年6月20日周日 下午6:41写道: > > Add a new translation > Documentation/translations/zh_CN/admin-guide/efi-stub.rst > and link it to zh_CN/admin-guide/index.rst > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > --- > .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ > .../translations/zh_CN/admin-guide/index.rst | 2 +- > 2 files changed, 87 insertions(+), 1 deletion(-) > create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > new file mode 100644 > index 000000000000..b6a4cedec8eb > --- /dev/null > +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > @@ -0,0 +1,86 @@ > +.. include:: ../disclaimer-zh_CN.rst > + > +:Original: Documentation/admin-guide/efi-stub.rst > + > +:译者: > + > + 吴想成 Wu XiangCheng <bobwxc@email.cn> > + > +========= > +EFI引导桩 > +========= > + > +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 > +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 how about: 将其作为EFI可执行文件加载? Thanks, Yanteng > +代码被统称为“EFI引导桩(EFI Boot Stub)”,分布在arch/x86/boot/header.S和 > +arch/x86/boot/compressed/eboot.c中。对于ARM,EFI桩在arch/arm/boot/compressed/efi-header.S > +和arch/arm/boot/compressed/efi-stub.c中实现。体系结构之间共享的EFI桩代码 > +位于drivers/firmware/efi/libstub中。 > + > +而arm64没有压缩内核支持,因此映像本身伪装成PE/COFF映像,EFI桩链接到内核。 > +arm64 EFI桩位于arch/arm64/kernel/EFI entry.S和drivers/firmware/efi/libstub/arm64-stub.c > +中。 > + > +通过使用EFI引导桩,可以在不使用传统EFI引导加载程序的情况下引导Linux内核, > +如grub或elilo。由于EFI引导桩执行了引导加载程序的工作,因此某种意义上来说 > +它 *就是* 引导加载程序。 > + > +EFI引导桩通过CONFIG_EFI_STUB内核选项启用。 > + > + > +如何安装bzImage.efi > +------------------- > + > +位于arch/x86/boot/bzImage中的bzImage必须复制到EFI系统分区(ESP)并修改扩展名 > +为“.efi”。没有扩展名的话EFI固件加载程序将拒绝执行它。尚无法从普通的Linux文件 > +系统中执行bzImage.efi,因为EFI固件不支持这些文件系统。ARM平台需要将arch/arm/boot/zImage > +复制到系统分区,并可能无需重命名;arm64也类似,需要复制arch/arm64/boot/Image, > +但不一定要重命名。 > + > + > +从EFI shell传递内核参数 > +----------------------- > + > +内核参数可于bzImage.efi之后传递,例如:: > + > + fs0:> bzImage.efi console=ttyS0 root=/dev/sda4 > + > + > +“initrd=”选项 > +------------- > + > +与大多数引导加载程序一样,EFI桩允许用户使用“initrd=”选项指定多个initrd文件。 > +这是唯一的EFI桩特殊特命令行参数,其他所有内容都在将内核启动时传递给内核。 > + > +initrd文件的路径必须为从ESP开始的绝对路径,相对路径无法使用。同时此路径为EFI > +风格,目录元素必须用反斜杠(\)分隔。例如给定以下目录布局:: > + > + fs0:> > + Kernels\ > + bzImage.efi > + initrd-large.img > + > + Ramdisks\ > + initrd-small.img > + initrd-medium.img > + > +现工作目录为fs0:\Kernels,要使用initrd-large.img文件引导,则须使用以下命令:: > + > + fs0:\Kernels> bzImage.efi initrd=\Kernels\initrd-large.img > + > +请注意bzImage.efi是怎样可用相对路径指定的。那是因为我们执行的映像是由EFI shell > +解释的,它可解析相对路径,而命令行的其余部分则传递给bzImage.efi。 > + > + > +“dtb=”选项 > +---------- > + > +对于ARM和arm64体系结构,必须为内核提供一个设备树。通常固件应通过EFI CONFIGURATION > +TABLE(EFI配置表)来支持设备树。但是“dtb=”命令行选项可以用于覆盖固件提供的设备 > +树,或在固件无法提供时来提供一个设备树。 > + > +请注意:固件将在启动内核之前将运行时配置信息添加到设备树。如果 ``dtb=`` 被用来 > +覆盖设备树,则固件提供的任何运行时数据都将丢失。 ``dtb=`` 选项应只用作调试工具, > +或者在EFI CONFIGURATION TABLE中未提供设备树时作为最后的手段。 > + > +“dtb=”的处理方式与上述“initrd=”选项相同。 > diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst > index 460034cbc2ab..d74f5e864898 100644 > --- a/Documentation/translations/zh_CN/admin-guide/index.rst > +++ b/Documentation/translations/zh_CN/admin-guide/index.rst > @@ -65,6 +65,7 @@ Todolist: > > clearing-warn-once > cpu-load > + efi-stub > lockup-watchdogs > unicode > > @@ -87,7 +88,6 @@ Todolist: > dell_rbu > device-mapper/index > edid > - efi-stub > ext4 > nfs/index > gpio/index > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst 2021-06-23 3:28 ` teng sterling @ 2021-06-23 6:44 ` Wu X.C. 0 siblings, 0 replies; 10+ messages in thread From: Wu X.C. @ 2021-06-23 6:44 UTC (permalink / raw) To: teng sterling; +Cc: Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si On Wed, Jun 23, 2021 at 11:28:46AM +0800, teng sterling wrote: > Wu XiangCheng <bobwxc@email.cn> 于2021年6月20日周日 下午6:41写道: > > > > Add a new translation > > Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > and link it to zh_CN/admin-guide/index.rst > > > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > > --- > > .../zh_CN/admin-guide/efi-stub.rst | 86 +++++++++++++++++++ > > .../translations/zh_CN/admin-guide/index.rst | 2 +- > > 2 files changed, 87 insertions(+), 1 deletion(-) > > create mode 100644 Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > > > diff --git a/Documentation/translations/zh_CN/admin-guide/efi-stub.rst b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > new file mode 100644 > > index 000000000000..b6a4cedec8eb > > --- /dev/null > > +++ b/Documentation/translations/zh_CN/admin-guide/efi-stub.rst > > @@ -0,0 +1,86 @@ > > +.. include:: ../disclaimer-zh_CN.rst > > + > > +:Original: Documentation/admin-guide/efi-stub.rst > > + > > +:译者: > > + > > + 吴想成 Wu XiangCheng <bobwxc@email.cn> > > + > > +========= > > +EFI引导桩 > > +========= > > + > > +在x86和ARM平台上,内核zImage/bzImage可以伪装成PE/COFF映像,从而使EFI固件加载 > > +程序加载其作为EFI可执行文件。修改bzImage头以及固件加载程序跳转特定入口点的 > how about: > 将其作为EFI可执行文件加载? OK, good. Thanks, Wu > > Thanks, > > Yanteng ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst 2021-06-20 10:40 [PATCH 0/2] docs/zh_CN: Add two new translations in zh_CN/admin-guide Wu XiangCheng 2021-06-20 10:40 ` [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst Wu XiangCheng @ 2021-06-20 10:41 ` Wu XiangCheng 2021-06-22 3:08 ` teng sterling 1 sibling, 1 reply; 10+ messages in thread From: Wu XiangCheng @ 2021-06-20 10:41 UTC (permalink / raw) To: Alex Shi; +Cc: Jonathan Corbet, linux-doc, Yanteng Si Add a new translation Documentation/translations/zh_CN/admin-guide/initrd.rst and link it to zh_CN/admin-guide/index.rst Signed-off-by: Wu XiangCheng <bobwxc@email.cn> --- .../translations/zh_CN/admin-guide/index.rst | 2 +- .../translations/zh_CN/admin-guide/initrd.rst | 324 ++++++++++++++++++ 2 files changed, 325 insertions(+), 1 deletion(-) create mode 100644 Documentation/translations/zh_CN/admin-guide/initrd.rst diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst index d74f5e864898..843f0ced97a3 100644 --- a/Documentation/translations/zh_CN/admin-guide/index.rst +++ b/Documentation/translations/zh_CN/admin-guide/index.rst @@ -66,6 +66,7 @@ Todolist: clearing-warn-once cpu-load efi-stub + initrd lockup-watchdogs unicode @@ -93,7 +94,6 @@ Todolist: gpio/index highuid hw_random - initrd iostats java jfs diff --git a/Documentation/translations/zh_CN/admin-guide/initrd.rst b/Documentation/translations/zh_CN/admin-guide/initrd.rst new file mode 100644 index 000000000000..15b52230b314 --- /dev/null +++ b/Documentation/translations/zh_CN/admin-guide/initrd.rst @@ -0,0 +1,324 @@ +.. include:: ../disclaimer-zh_CN.rst + +:Original: Documentation/admin-guide/initrd.rst + +:译者: 吴想成 Wu XiangCheng <bobwxc@email.cn> + +使用初始化RAM磁盘(initrd) +=========================== + +Werner Almesberger <werner.almesberger@epfl.ch> 和 +Hans Lermen <lermen@fgan.de> 写于1996、2000年。 + + +初始化RAM磁盘(initial RAM disk,initrd)提供了由引导加载程序加载RAM磁盘的 +能力。此RAM磁盘可被挂载为根文件系统并于其上运行程序。然后再从一个不同的设备 +挂载新的根文件系统。前根文件系统(来自initrd)则被移动到一个目录并随后卸载。 + +initrd主要设计为允许系统分两个阶段启动,其中内核以一最小内建驱动程序集启动, +再从initrd加载其他模块。 + +本文档简述了initrd的用法。更详细的有关引导过程的讨论见 [#f1]_ 。 + + +操作 +---- + +使用initrd时,系统通常按如下方式启动: + + 1) 引导加载程序加载内核和初始化RAM磁盘(initrd) + 2) 内核将initrd转换为“普通”RAM磁盘,然后释放initrd使用的内存 + 3) 如果根设备不是 ``/dev/ram0`` ,则遵循旧的(已弃用)change_root 步骤。 + 请参阅“过时的根更改”“机制”一节 + 4) 根设备已挂载。如果是 ``/dev/ram0`` ,则initrd映像作为根目录挂载 + 5) 执行 ``/sbin/init`` (这可以是任何有效的可执行文件,包括shell脚本; + 它以uid 0运行,基本可以执行所有初始化操作) + 6) init挂载“真正的”根文件系统 + 7) init使用pivot_root系统调用将根文件系统放到根目录 + 8) init在新的根文件系统上执行 ``/sbin/init`` ,如同普通引导顺序 + 9) 移除initrd文件系统 + +请注意,更改根目录并不涉及卸载它。因此在此期间可以继续让进程在initrd上运行。 +同时initrd下挂载的文件系统也仍可访问。 + + +启动命令行选项 +-------------- + +initrd加入了以下新选项:: + + initrd=<path> (例如 LOADLIN) + + 加载指定的文件作为initrd。使用LILO时,您必须在/etc/lilo.conf中使用 + INITRD配置变量指定RAM磁盘映像文件。 + + noinitrd + + initrd数据会被保留但不转换为RAM磁盘,并挂载“普通”根文件系统。可以从/dev/initrd + 读取initrd数据。注意此种情况下initrd中的数据为任意结构,无须限定于文件系统 + 映像。 + 此选项主要用于调试。 + + 注意:/dev/initrd为只读,且只能使用一次。当最后一个进程关闭它时,所有数据 + 都将被释放,/dev/initrd不再可打开。 + + root=/dev/ram0 + + initrd挂载为根目录,并以initrd为根目录执行普通的引导流程。 + +压缩的cpio映像 +-------------- + +内核现已支持从压缩的cpio存档文件提取数据到ramdisk。在这种系统上,创建ramdisk +映像无需涉及特殊的块设备或回环;您只需在磁盘上创建一个包含所需initrd内容的目录, +cd到该目录,然后运行(示例如下):: + + find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img + +检查现有映像文件的内容同样很简单:: + + mkdir /tmp/imagefile + cd /tmp/imagefile + gzip -cd /boot/imagefile.img | cpio -imd --quiet + +安装 +---- + +首先,必须在“普通”根文件系统上创建一个给initrd文件系统的目录,例如:: +First, a directory for the initrd file system has to be created on the +"normal" root file system, e.g.:: + + # mkdir /initrd + +名字无关紧要。更多细节参见 :manpage:`pivot_root(2)` 手册页。 + +如果根文件系统是在引导过程中创建的(例如你正在构建一个安装软盘),根文件系统 +的创建过程应创建 ``/initrd`` 目录。 + +如果initrd在某些情况下不被挂载,则若已创建以下设备,其内容仍可访问:: + + # mknod /dev/initrd b 1 250 + # chmod 400 /dev/initrd + +第二,内核必须在编译时启用RAM磁盘支持并打开initrd支持选项。此外至少所有从initrd +执行程序依赖的组件(例如可执行格式和文件)都必须编译到内核中。 + +第三,必须创建RAM磁盘映像。先创建一个块设备上的文件系统,将所需文件复制到其中, +然后再将此块设备的内容复制进initrd文件。现时内核中至少有三种类型的设备适合于此: + + - 软盘(兼容性强但速度慢得令人痛苦) + - RAM磁盘(快速但需要分配物理内存) + - 回环设备(最优雅的解决方案) + +我们将讲述使用回环设备的方法: + + 1) 确保回环块设备被配置进内核了 + 2) 创建一个适合大小的空文件系统,例如:: + + # dd if=/dev/zero of=initrd bs=300k count=1 + # mke2fs -F -m0 initrd + + (如果空间紧缺,您可能希望使用Minux FS来代替Ext2) + 3) 挂载此文件系统,例如:: + + # mount -t ext2 -o loop initrd /mnt + + 4) 创建控制台设备:: + + # mkdir /mnt/dev + # mknod /mnt/dev/console c 5 1 + + 5) 复制正常使用initrd环境所需的所有文件。别忘了最重要的文件, ``/sbin/init`` + + .. note:: ``/sbin/init`` 必须有 ``x`` (执行)权限。 + + 6) 正确操作可以频繁测试initrd环境而无需使用命令重新启动:: + + # chroot /mnt /sbin/init + + This is of course limited to initrds that do not interfere with the + general system state (e.g. by reconfiguring network interfaces, + overwriting mounted devices, trying to start already running demons, + etc. Note however that it is usually possible to use pivot_root in + such a chroot'ed initrd environment.) + 7) 卸载此文件系统:: + + # umount /mnt + + 8) initrd现在在文件“initrd”中。现在可以选择是否压缩:: + + # gzip -9 initrd + +使用initrd进行试验,您可能需要一张救援软盘并只添加来 ``/sbin/init`` 到 ``/bin/sh`` +的符号链接。或者你可以尝试实验性的newlib环境 [#f2]_ 来创建一个小initrd。 + +最后,必须引导内核并加载initrd。几乎所有Linux引导加载程序都支持initrd。因为 +引导过程仍然兼容旧的机制,以下引导命令行参数必须给出:: + + root=/dev/ram0 rw + +(只有在需要写入initrd文件系统时才需要rw) + +使用LOADLIN,你只需要执行:: + + LOADLIN <kernel> initrd=<disk_image> + +例如:: + + LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 rw + +W使用LILO,可以添加选项 ``INITRD=<path>`` 到 ``/etc/lilo.conf`` 全局设置部分 +或者相应内核的部分,然后通过使用APPEND传递选项,例如:: + + image = /bzImage + initrd = /boot/initrd.gz + append = "root=/dev/ram0 rw" + +并运行 ``/sbin/lilo`` + +对应其他的启动引导加载器,请参考相关文档。 + +现在你可以启动并享受initrd时光了。 + + +更改根设备 +---------- + +完成任务后,init通常会更改根设备然后在“真正的”根设备上启动Linux系统。 + +该流程包括以下步骤: + - 挂载新的根文件系统 + - 把它转换成根文件系统 + - 移除对旧(initrd)根文件系统的所有访问 + - 卸载initrd文件系统并释放RAM磁盘 + +挂载新的根文件系统很容易:只需将其挂载到当前根目录下的目录中。 +例如:: + + # mkdir /new-root + # mount -o ro /dev/hda1 /new-root + +更改根目录是通过 ``pivot_root`` 系统调用完成的,该调用也可以通过 ``pivot_root`` +实用程序使用(参见 :manpage:`pivot_root(8)` 手册页; ``pivot_root`` 与util-linux +2.10h或更高版本一起分发 [#f3]_ )。 ``pivot_root`` 根将当前根目录移到新根下的 +一个目录里,并设置好新根目录。调用前必须准备好给就根的目录。 +例如:: + + # cd /new-root + # mkdir initrd + # pivot_root . initrd + +现在,init进程仍然可以通过其执行、共享库、标准输入/输出/错误流访问旧根目录和 +现在的根目录。所有这些引用都可被以下命令卸载:: + + # exec chroot . what-follows <dev/console >dev/console 2>&1 + +what-follows是一个新根下的程序,例如 ``/sbin/init`` 。 +如果新根文件系统将与udev一起使用,并且无有效的 ``/dev`` 目录,则udev必须在按顺 +序调用chroot之前初始化以提供 ``/dev/console`` 。 + +注意:pivot_root的实现细节可能会随时间而变化。为确保兼容性,应遵守以下几点: + + - 在调用pivot_root之前,调用进程的现目录应该指向新的根目录 + - 使用 ``.`` 作为第一个参数,旧根目录的 *相对路径* 作为第二个参数 + - chroot程序必须在新旧根目录下均可用 + - 之后再chroot到新根 + - 在exec命令中对dev/console使用相对路径 + +现在,可以卸载initrd并释放分配的RAM内存磁盘:: + + # umount /initrd + # blockdev --flushbufs /dev/ram0 + +也可以将initrd与NFS挂载的根目录一起使用,详细请参阅 :manpage:`pivot_root(8)` +手册页。 + + +使用场景 +-------- + +实现initrd的主要动机是在系统安装时允许模块化的内核配置。流程如下: + + 1) 系统用软盘或其他媒体上的最小内核引导(例如RAM磁盘支持、initrd、a.out和ext2 + FS)并加载初始值 + 2) ``/sbin/init`` 确定需要(1)装入“真正”根文件系统的内容(即设备类型、 + 设备驱动程序、文件系统)和(2)分发介质(如CD-ROM、网络、磁带等)。 + 这可以通过询问用户、自动探测或混合使用来完成。 + 3) ``/sbin/init`` 加载必要的内核模块 + 4) ``/sbin/init`` 创建并填充根文件系统(这不必为一个非常有用的系统) + 5) ``/sbin/init`` 调用 ``pivot_root`` 更改根文件系统并通过chroot执行一个程序 + 继续此安装 + 6) 引导加载程序已安装 + 7) 引导加载程序被配置为加载包含一系列模块、可用于启动系统的initrd。例如 + ``/initrd`` 可被修改,然后卸载,最后映像被从 ``/dev/ram0`` 或 ``/dev/rd/0`` + 写入文件) + 8) 现在系统可以启动,可以执行其他安装任务 + +initrd的关键作用在于:无需使用膨胀的“通用”内核或重新编译/重新链接内核即可 +重用普通系统操作过程中的配置数据。 + +第二个场景是在运行于单个管理域中不同硬件配置上的Linux安装。在在这种情况下, +最好只生成很少一系列内核(最好就一个)并使配置信息中系统特定部分尽可能少。 +而公共initrd可以生成所有必要的模块。这样只有 ``/sbin/init`` 或者它读取的一个 +文件才一定会不同。 + +第三种情况是更方便的恢复磁盘。因为像根文件系统分区的位置之类的信息无需在引导 +时提供,但是从initrd加载的系统可以调用用户友好的对话框,它还可以执行一些健全 +性检查(或者甚至某种形式的自动检测)。 + +最后一点也很重要,CD-ROM发行商可能会使用它以更好地从CD安装。例如使用引导软盘 +并通过CD上的initrd引导一个更大的RAM磁盘;或者通过像 ``LOADLIN`` 这样的启动器 +或者直接从CD-ROM中引导,以及在无需软盘的情况下直接从CD加载RAM磁盘。 + + +过时的根变更机制 +---------------- + +在引入pivot_root之前,曾使用以下机制。当前的内核仍然支持它,但是你 *不应* 继续 +依赖它。 + +它在linuxrc退出时挂载“真正的”根设备(即带有rdev的内核映像或启动命令行中的 +root=...)来工作在内核映像中或在引导命令行中使用root=…)作为根文件系统。 +initrd文件系统即行卸载,或若仍在忙,则将其移动到 ``/initrd`` 目录,如果这样 +的目录存在于新的根文件系统上的话。 + +要使用此机制,您不必指定引导命令选项root、init或rw(如果指定,它们将影响真正的 +根文件系统,而不是initrd环境)。 + +如果挂载了 ``/proc`` ,则可以通过将新根文件系统设备编号写入 +``/proc/sys/kernel/real-root-dev`` ,从linuxrc内部更改“真正的”根设备,例如:: + + # echo 0x301 >/proc/sys/kernel/real-root-dev + +请注意,该机制不兼容NFS及类似的文件系统。 + +此过时的旧机制通常被称为 ``change_root`` ,同时新的、受支持的机制称为 ``pivot_root`` 。 + + +混用change_root和pivot_root机制 +------------------------------- + +如果你不想使用 ``root=dev/ram0`` 触发pivot_root机制,你可以在initrd映像中同时 +创建 ``/linuxrc`` 和 ``/sbin/init`` 。 + +``/linuxrc`` 只包含以下内容:: + + #! /bin/sh + mount -n -t proc proc /proc + echo 0x0100 >/proc/sys/kernel/real-root-dev + umount -n /proc + +一旦linuxrc退出,内核将再次以根用户身份挂载initrd,并执行 ``/sbin/init`` 。 +此次初始化要在最终执行真正的 ``/sbin/init`` 之前建立正确的环境(可能是使用 +``root=device`` 传递命令行)。 + + +参考资料 +-------- + +.. [#f1] Almesberger, Werner; "Booting Linux: The History and the Future(启动Linux,历史与未来)" + https://www.almesberger.net/cv/papers/ols2k-9.ps.gz +.. [#f2] newlib包(实验性),附带initrd样例 + https://www.sourceware.org/newlib/ +.. [#f3] util-linux:Linux的其他实用程序 + https://www.kernel.org/pub/linux/utils/util-linux/ -- 2.20.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst 2021-06-20 10:41 ` [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst Wu XiangCheng @ 2021-06-22 3:08 ` teng sterling 2021-06-23 7:30 ` Wu X.C. 0 siblings, 1 reply; 10+ messages in thread From: teng sterling @ 2021-06-22 3:08 UTC (permalink / raw) To: Wu XiangCheng; +Cc: Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si Wu XiangCheng <bobwxc@email.cn> 于2021年6月20日周日 下午6:42写道: > > Add a new translation > Documentation/translations/zh_CN/admin-guide/initrd.rst > and link it to zh_CN/admin-guide/index.rst > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > --- > .../translations/zh_CN/admin-guide/index.rst | 2 +- > .../translations/zh_CN/admin-guide/initrd.rst | 324 ++++++++++++++++++ > 2 files changed, 325 insertions(+), 1 deletion(-) > create mode 100644 Documentation/translations/zh_CN/admin-guide/initrd.rst > > diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst > index d74f5e864898..843f0ced97a3 100644 > --- a/Documentation/translations/zh_CN/admin-guide/index.rst > +++ b/Documentation/translations/zh_CN/admin-guide/index.rst > @@ -66,6 +66,7 @@ Todolist: > clearing-warn-once > cpu-load > efi-stub > + initrd > lockup-watchdogs > unicode > > @@ -93,7 +94,6 @@ Todolist: > gpio/index > highuid > hw_random > - initrd > iostats > java > jfs > diff --git a/Documentation/translations/zh_CN/admin-guide/initrd.rst b/Documentation/translations/zh_CN/admin-guide/initrd.rst > new file mode 100644 > index 000000000000..15b52230b314 > --- /dev/null > +++ b/Documentation/translations/zh_CN/admin-guide/initrd.rst > @@ -0,0 +1,324 @@ > +.. include:: ../disclaimer-zh_CN.rst > + > +:Original: Documentation/admin-guide/initrd.rst > + > +:译者: 吴想成 Wu XiangCheng <bobwxc@email.cn> > + > +使用初始化RAM磁盘(initrd) > +=========================== > + > +Werner Almesberger <werner.almesberger@epfl.ch> 和 > +Hans Lermen <lermen@fgan.de> 写于1996、2000年。 > + > + > +初始化RAM磁盘(initial RAM disk,initrd)提供了由引导加载程序加载RAM磁盘的 > +能力。此RAM磁盘可被挂载为根文件系统并于其上运行程序。然后再从一个不同的设备 how about: 另一个不同的设备? > +挂载新的根文件系统。前根文件系统(来自initrd)则被移动到一个目录并随后卸载。 > + > +initrd主要设计为允许系统分两个阶段启动,其中内核以一最小内建驱动程序集启动, > +再从initrd加载其他模块。 > + > +本文档简述了initrd的用法。更详细的有关引导过程的讨论见 [#f1]_ 。 > + > + > +操作 > +---- > + > +使用initrd时,系统通常按如下方式启动: I think the following is more appropriately described as a "过程/步骤". > + > + 1) 引导加载程序加载内核和初始化RAM磁盘(initrd) > + 2) 内核将initrd转换为“普通”RAM磁盘,然后释放initrd使用的内存 > + 3) 如果根设备不是 ``/dev/ram0`` ,则遵循旧的(已弃用)change_root 步骤。 > + 请参阅“过时的根更改”“机制”一节 > + 4) 根设备已挂载。如果是 ``/dev/ram0`` ,则initrd映像作为根目录挂载 > + 5) 执行 ``/sbin/init`` (这可以是任何有效的可执行文件,包括shell脚本; > + 它以uid 0运行,基本可以执行所有初始化操作) > + 6) init挂载“真正的”根文件系统 > + 7) init使用pivot_root系统调用将根文件系统放到根目录 > + 8) init在新的根文件系统上执行 ``/sbin/init`` ,如同普通引导顺序 > + 9) 移除initrd文件系统 > + > +请注意,更改根目录并不涉及卸载它。因此在此期间可以继续让进程在initrd上运行。 > +同时initrd下挂载的文件系统也仍可访问。 > + > + > +启动命令行选项 > +-------------- > + > +initrd加入了以下新选项:: > + > + initrd=<path> (例如 LOADLIN) > + > + 加载指定的文件作为initrd。使用LILO时,您必须在/etc/lilo.conf中使用 > + INITRD配置变量指定RAM磁盘映像文件。 > + > + noinitrd > + > + initrd数据会被保留但不转换为RAM磁盘,并挂载“普通”根文件系统。可以从/dev/initrd > + 读取initrd数据。注意此种情况下initrd中的数据为任意结构,无须限定于文件系统 > + 映像。 注意此种情况下initrd中的数据可以为任意结构 BTW: I think the word "结构" is ambiguous here。 这里是不是指的是文件系统的格式? Then, how about: 不需要一定是文件系统…… > + 此选项主要用于调试。 > + > + 注意:/dev/initrd为只读,且只能使用一次。当最后一个进程关闭它时,所有数据 > + 都将被释放,/dev/initrd不再可打开。 > + > + root=/dev/ram0 > + > + initrd挂载为根目录,并以initrd为根目录执行普通的引导流程。 > + > +压缩的cpio映像 > +-------------- > + > +内核现已支持从压缩的cpio存档文件提取数据到ramdisk。在这种系统上,创建ramdisk > +映像无需涉及特殊的块设备或回环;您只需在磁盘上创建一个包含所需initrd内容的目录, > +cd到该目录,然后运行(示例如下):: > + > + find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img > + > +检查现有映像文件的内容同样很简单:: > + > + mkdir /tmp/imagefile > + cd /tmp/imagefile > + gzip -cd /boot/imagefile.img | cpio -imd --quiet > + > +安装 > +---- > + > +首先,必须在“普通”根文件系统上创建一个给initrd文件系统的目录,例如:: mybe 第一? because you write 第二 and 第三 in follow;or use 首先,然后,最后。 > +First, a directory for the initrd file system has to be created on the > +"normal" root file system, e.g.:: omg!maybe you need remove them. :-o > + > + # mkdir /initrd > + > +名字无关紧要。更多细节参见 :manpage:`pivot_root(2)` 手册页。 > + > +如果根文件系统是在引导过程中创建的(例如你正在构建一个安装软盘),根文件系统 > +的创建过程应创建 ``/initrd`` 目录。 > + > +如果initrd在某些情况下不被挂载,则若已创建以下设备,其内容仍可访问:: how about: 此时若已创建…… > + > + # mknod /dev/initrd b 1 250 > + # chmod 400 /dev/initrd > + > +第二,内核必须在编译时启用RAM磁盘支持并打开initrd支持选项。此外至少所有从initrd > +执行程序依赖的组件(例如可执行格式和文件)都必须编译到内核中。 > + > +第三,必须创建RAM磁盘映像。先创建一个块设备上的文件系统,将所需文件复制到其中, > +然后再将此块设备的内容复制进initrd文件。现时内核中至少有三种类型的设备适合于此: > + > + - 软盘(兼容性强但速度慢得令人痛苦) > + - RAM磁盘(快速但需要分配物理内存) > + - 回环设备(最优雅的解决方案) > + > +我们将讲述使用回环设备的方法: > + > + 1) 确保回环块设备被配置进内核了 > + 2) 创建一个适合大小的空文件系统,例如:: > + > + # dd if=/dev/zero of=initrd bs=300k count=1 > + # mke2fs -F -m0 initrd > + > + (如果空间紧缺,您可能希望使用Minux FS来代替Ext2) > + 3) 挂载此文件系统,例如:: > + > + # mount -t ext2 -o loop initrd /mnt > + > + 4) 创建控制台设备:: > + > + # mkdir /mnt/dev > + # mknod /mnt/dev/console c 5 1 > + > + 5) 复制正常使用initrd环境所需的所有文件。别忘了最重要的文件, ``/sbin/init`` > + > + .. note:: ``/sbin/init`` 必须有 ``x`` (执行)权限。 > + > + 6) 正确操作可以频繁测试initrd环境而无需使用命令重新启动:: > + > + # chroot /mnt /sbin/init > + > + This is of course limited to initrds that do not interfere with the > + general system state (e.g. by reconfiguring network interfaces, > + overwriting mounted devices, trying to start already running demons, > + etc. Note however that it is usually possible to use pivot_root in > + such a chroot'ed initrd environment.) hi xiangcheng,what is it?:-) > + 7) 卸载此文件系统:: > + > + # umount /mnt > + > + 8) initrd现在在文件“initrd”中。现在可以选择是否压缩:: > + > + # gzip -9 initrd > + > +使用initrd进行试验,您可能需要一张救援软盘并只添加来 ``/sbin/init`` 到 ``/bin/sh`` 一张只添加来 ``/sbin/init`` 到 ``/bin/sh`` 的符号链接的救援软盘 > +的符号链接。或者你可以尝试实验性的newlib环境 [#f2]_ 来创建一个小initrd。 > + > +最后,必须引导内核并加载initrd。几乎所有Linux引导加载程序都支持initrd。因为 > +引导过程仍然兼容旧的机制,以下引导命令行参数必须给出:: > + > + root=/dev/ram0 rw > + > +(只有在需要写入initrd文件系统时才需要rw) > + > +使用LOADLIN,你只需要执行:: > + > + LOADLIN <kernel> initrd=<disk_image> > + > +例如:: > + > + LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 rw > + > +W使用LILO,可以添加选项 ``INITRD=<path>`` 到 ``/etc/lilo.conf`` 全局设置部分 > +或者相应内核的部分,然后通过使用APPEND传递选项,例如:: > + > + image = /bzImage > + initrd = /boot/initrd.gz > + append = "root=/dev/ram0 rw" > + > +并运行 ``/sbin/lilo`` > + > +对应其他的启动引导加载器,请参考相关文档。 > + > +现在你可以启动并享受initrd时光了。 how about 并愉快的玩耍initrd了? > + > + > +更改根设备 > +---------- > + > +完成任务后,init通常会更改根设备然后在“真正的”根设备上启动Linux系统。 > + > +该流程包括以下步骤: > + - 挂载新的根文件系统 > + - 把它转换成根文件系统 切换 > + - 移除对旧(initrd)根文件系统的所有访问 > + - 卸载initrd文件系统并释放RAM磁盘 > + > +挂载新的根文件系统很容易:只需将其挂载到当前根目录下的目录中。 > +例如:: > + > + # mkdir /new-root > + # mount -o ro /dev/hda1 /new-root > + > +更改根目录是通过 ``pivot_root`` 系统调用完成的,该调用也可以通过 ``pivot_root`` > +实用程序使用(参见 :manpage:`pivot_root(8)` 手册页; ``pivot_root`` 与util-linux > +2.10h或更高版本一起分发 [#f3]_ )。 ``pivot_root`` 根将当前根目录移到新根下的 > +一个目录里,并设置好新根目录。调用前必须准备好给就根的目录。 maybe 在调用``pivot_root'之前,旧根目录必须存在。 ? > +例如:: > + > + # cd /new-root > + # mkdir initrd > + # pivot_root . initrd > + > +现在,init进程仍然可以通过其执行、共享库、标准输入/输出/错误流访问旧根目录和 > +现在的根目录。所有这些引用都可被以下命令卸载:: > + > + # exec chroot . what-follows <dev/console >dev/console 2>&1 > + > +what-follows是一个新根下的程序,例如 ``/sbin/init`` 。 > +如果新根文件系统将与udev一起使用,并且无有效的 ``/dev`` 目录,则udev必须在按顺 > +序调用chroot之前初始化以提供 ``/dev/console`` 。 初始化完成 or 完成初始化? > + > +注意:pivot_root的实现细节可能会随时间而变化。为确保兼容性,应遵守以下几点: emmmm,how about 细节可能会随着演进历程而变化 ? > + > + - 在调用pivot_root之前,调用进程的现目录应该指向新的根目录 > + - 使用 ``.`` 作为第一个参数,旧根目录的 *相对路径* 作为第二个参数 > + - chroot程序必须在新旧根目录下均可用 > + - 之后再chroot到新根 目录 > + - 在exec命令中对dev/console使用相对路径 > + > +现在,可以卸载initrd并释放分配的RAM内存磁盘:: > + > + # umount /initrd > + # blockdev --flushbufs /dev/ram0 > + > +也可以将initrd与NFS挂载的根目录一起使用,详细请参阅 :manpage:`pivot_root(8)` > +手册页。 > + > + > +使用场景 > +-------- > + > +实现initrd的主要动机是在系统安装时允许模块化的内核配置。流程如下: > + > + 1) 系统用软盘或其他媒体上的最小内核引导(例如RAM磁盘支持、initrd、a.out和ext2 其他媒介 > + FS)并加载初始值 > + 2) ``/sbin/init`` 确定需要(1)装入“真正”根文件系统的内容(即设备类型、 > + 设备驱动程序、文件系统)和(2)分发介质(如CD-ROM、网络、磁带等)。 > + 这可以通过询问用户、自动探测或混合使用来完成。 > + 3) ``/sbin/init`` 加载必要的内核模块 > + 4) ``/sbin/init`` 创建并填充根文件系统(这不必为一个非常有用的系统) > + 5) ``/sbin/init`` 调用 ``pivot_root`` 更改根文件系统并通过chroot执行一个程序 > + 继续此安装 > + 6) 引导加载程序已安装 > + 7) 引导加载程序被配置为加载包含一系列模块、可用于启动系统的initrd。例如 > + ``/initrd`` 可被修改,然后卸载,最后映像被从 ``/dev/ram0`` 或 ``/dev/rd/0`` > + 写入文件) > + 8) 现在系统可以启动,可以执行其他安装任务 > + > +initrd的关键作用在于:无需使用膨胀的“通用”内核或重新编译/重新链接内核即可 臃肿的 > +重用普通系统操作过程中的配置数据。 > + > +第二个场景是在运行于单个管理域中不同硬件配置上的Linux安装。在在这种情况下, > +最好只生成很少一系列内核(最好就一个)并使配置信息中系统特定部分尽可能少。 > +而公共initrd可以生成所有必要的模块。这样只有 ``/sbin/init`` 或者它读取的一个 > +文件才一定会不同。 文件必须是不同的。 > + > +第三种情况是更方便的恢复磁盘。因为像根文件系统分区的位置之类的信息无需在引导 > +时提供,但是从initrd加载的系统可以调用用户友好的对话框,它还可以执行一些健全 > +性检查(或者甚至某种形式的自动检测)。 > + > +最后一点也很重要,CD-ROM发行商可能会使用它以更好地从CD安装。例如使用引导软盘 > +并通过CD上的initrd引导一个更大的RAM磁盘;或者通过像 ``LOADLIN`` 这样的启动器 > +或者直接从CD-ROM中引导,以及在无需软盘的情况下直接从CD加载RAM磁盘。 > + > + > +过时的根变更机制 > +---------------- > + > +在引入pivot_root之前,曾使用以下机制。当前的内核仍然支持它,但是你 *不应* 继续 > +依赖它。 > + > +它在linuxrc退出时挂载“真正的”根设备(即带有rdev的内核映像或启动命令行中的 > +root=...)来工作在内核映像中或在引导命令行中使用root=…)作为根文件系统。 > +initrd文件系统即行卸载,或若仍在忙,则将其移动到 ``/initrd`` 目录,如果这样 > +的目录存在于新的根文件系统上的话。 > + > +要使用此机制,您不必指定引导命令选项root、init或rw(如果指定,它们将影响真正的 > +根文件系统,而不是initrd环境)。 > + > +如果挂载了 ``/proc`` ,则可以通过将新根文件系统设备编号写入 > +``/proc/sys/kernel/real-root-dev`` ,从linuxrc内部更改“真正的”根设备,例如:: > + > + # echo 0x301 >/proc/sys/kernel/real-root-dev > + > +请注意,该机制不兼容NFS及类似的文件系统。 > + > +此过时的旧机制通常被称为 ``change_root`` ,同时新的、受支持的机制称为 ``pivot_root`` 。 > + > + > +混用change_root和pivot_root机制 > +------------------------------- > + > +如果你不想使用 ``root=dev/ram0`` 触发pivot_root机制,你可以在initrd映像中同时 > +创建 ``/linuxrc`` 和 ``/sbin/init`` 。 > + > +``/linuxrc`` 只包含以下内容:: > + > + #! /bin/sh > + mount -n -t proc proc /proc > + echo 0x0100 >/proc/sys/kernel/real-root-dev > + umount -n /proc > + > +一旦linuxrc退出,内核将再次以根用户身份挂载initrd,并执行 ``/sbin/init`` 。 > +此次初始化要在最终执行真正的 ``/sbin/init`` 之前建立正确的环境(可能是使用 > +``root=device`` 传递命令行)。 > + > + > +参考资料 > +-------- > + > +.. [#f1] Almesberger, Werner; "Booting Linux: The History and the Future(启动Linux,历史与未来)" > + https://www.almesberger.net/cv/papers/ols2k-9.ps.gz > +.. [#f2] newlib包(实验性),附带initrd样例 > + https://www.sourceware.org/newlib/ > +.. [#f3] util-linux:Linux的其他实用程序 > + https://www.kernel.org/pub/linux/utils/util-linux/ > -- > 2.20.1 > Thanks, Yanteng ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst 2021-06-22 3:08 ` teng sterling @ 2021-06-23 7:30 ` Wu X.C. 0 siblings, 0 replies; 10+ messages in thread From: Wu X.C. @ 2021-06-23 7:30 UTC (permalink / raw) To: teng sterling; +Cc: Alex Shi, Jonathan Corbet, linux-doc, Yanteng Si [-- Attachment #1: Type: text/plain, Size: 18677 bytes --] On Tue, Jun 22, 2021 at 11:08:33AM +0800, teng sterling wrote: > Wu XiangCheng <bobwxc@email.cn> 于2021年6月20日周日 下午6:42写道: > > > > Add a new translation > > Documentation/translations/zh_CN/admin-guide/initrd.rst > > and link it to zh_CN/admin-guide/index.rst > > > > Signed-off-by: Wu XiangCheng <bobwxc@email.cn> > > --- > > .../translations/zh_CN/admin-guide/index.rst | 2 +- > > .../translations/zh_CN/admin-guide/initrd.rst | 324 ++++++++++++++++++ > > 2 files changed, 325 insertions(+), 1 deletion(-) > > create mode 100644 Documentation/translations/zh_CN/admin-guide/initrd.rst > > > > diff --git a/Documentation/translations/zh_CN/admin-guide/index.rst b/Documentation/translations/zh_CN/admin-guide/index.rst > > index d74f5e864898..843f0ced97a3 100644 > > --- a/Documentation/translations/zh_CN/admin-guide/index.rst > > +++ b/Documentation/translations/zh_CN/admin-guide/index.rst > > @@ -66,6 +66,7 @@ Todolist: > > clearing-warn-once > > cpu-load > > efi-stub > > + initrd > > lockup-watchdogs > > unicode > > > > @@ -93,7 +94,6 @@ Todolist: > > gpio/index > > highuid > > hw_random > > - initrd > > iostats > > java > > jfs > > diff --git a/Documentation/translations/zh_CN/admin-guide/initrd.rst b/Documentation/translations/zh_CN/admin-guide/initrd.rst > > new file mode 100644 > > index 000000000000..15b52230b314 > > --- /dev/null > > +++ b/Documentation/translations/zh_CN/admin-guide/initrd.rst > > @@ -0,0 +1,324 @@ > > +.. include:: ../disclaimer-zh_CN.rst > > + > > +:Original: Documentation/admin-guide/initrd.rst > > + > > +:译者: 吴想成 Wu XiangCheng <bobwxc@email.cn> > > + > > +使用初始化RAM磁盘(initrd) > > +=========================== > > + > > +Werner Almesberger <werner.almesberger@epfl.ch> 和 > > +Hans Lermen <lermen@fgan.de> 写于1996、2000年。 > > + > > + > > +初始化RAM磁盘(initial RAM disk,initrd)提供了由引导加载程序加载RAM磁盘的 > > +能力。此RAM磁盘可被挂载为根文件系统并于其上运行程序。然后再从一个不同的设备 > how about: > 另一个不同的设备? OK. > > +挂载新的根文件系统。前根文件系统(来自initrd)则被移动到一个目录并随后卸载。 > > + > > +initrd主要设计为允许系统分两个阶段启动,其中内核以一最小内建驱动程序集启动, > > +再从initrd加载其他模块。 > > + > > +本文档简述了initrd的用法。更详细的有关引导过程的讨论见 [#f1]_ 。 > > + > > + > > +操作 > > +---- > > + > > +使用initrd时,系统通常按如下方式启动: > I think the following is more appropriately described as a "过程/步骤". OK. > > + > > + 1) 引导加载程序加载内核和初始化RAM磁盘(initrd) > > + 2) 内核将initrd转换为“普通”RAM磁盘,然后释放initrd使用的内存 > > + 3) 如果根设备不是 ``/dev/ram0`` ,则遵循旧的(已弃用)change_root 步骤。 > > + 请参阅“过时的根更改”“机制”一节 > > + 4) 根设备已挂载。如果是 ``/dev/ram0`` ,则initrd映像作为根目录挂载 > > + 5) 执行 ``/sbin/init`` (这可以是任何有效的可执行文件,包括shell脚本; > > + 它以uid 0运行,基本可以执行所有初始化操作) > > + 6) init挂载“真正的”根文件系统 > > + 7) init使用pivot_root系统调用将根文件系统放到根目录 > > + 8) init在新的根文件系统上执行 ``/sbin/init`` ,如同普通引导顺序 > > + 9) 移除initrd文件系统 > > + > > +请注意,更改根目录并不涉及卸载它。因此在此期间可以继续让进程在initrd上运行。 > > +同时initrd下挂载的文件系统也仍可访问。 > > + > > + > > +启动命令行选项 > > +-------------- > > + > > +initrd加入了以下新选项:: > > + > > + initrd=<path> (例如 LOADLIN) > > + > > + 加载指定的文件作为initrd。使用LILO时,您必须在/etc/lilo.conf中使用 > > + INITRD配置变量指定RAM磁盘映像文件。 > > + > > + noinitrd > > + > > + initrd数据会被保留但不转换为RAM磁盘,并挂载“普通”根文件系统。可以从/dev/initrd > > + 读取initrd数据。注意此种情况下initrd中的数据为任意结构,无须限定于文件系统 > > + 映像。 > 注意此种情况下initrd中的数据可以为任意结构 > BTW: > I think the word "结构" is ambiguous here。 > 这里是不是指的是文件系统的格式? > > Then, how about: > 不需要一定是文件系统…… Use 注意此种情况下initrd中的数据可以为任意结构,不一定要是文件系统映像。 > > + 此选项主要用于调试。 > > + > > + 注意:/dev/initrd为只读,且只能使用一次。当最后一个进程关闭它时,所有数据 > > + 都将被释放,/dev/initrd不再可打开。 > > + > > + root=/dev/ram0 > > + > > + initrd挂载为根目录,并以initrd为根目录执行普通的引导流程。 > > + > > +压缩的cpio映像 > > +-------------- > > + > > +内核现已支持从压缩的cpio存档文件提取数据到ramdisk。在这种系统上,创建ramdisk > > +映像无需涉及特殊的块设备或回环;您只需在磁盘上创建一个包含所需initrd内容的目录, > > +cd到该目录,然后运行(示例如下):: > > + > > + find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img > > + > > +检查现有映像文件的内容同样很简单:: > > + > > + mkdir /tmp/imagefile > > + cd /tmp/imagefile > > + gzip -cd /boot/imagefile.img | cpio -imd --quiet > > + > > +安装 > > +---- > > + > > +首先,必须在“普通”根文件系统上创建一个给initrd文件系统的目录,例如:: > mybe 第一? because you write 第二 and 第三 in follow;or use 首先,然后,最后。 OK use 首先,然后,最后 > > +First, a directory for the initrd file system has to be created on the > > +"normal" root file system, e.g.:: > omg!maybe you need remove them. :-o Yeah! > > + > > + # mkdir /initrd > > + > > +名字无关紧要。更多细节参见 :manpage:`pivot_root(2)` 手册页。 > > + > > +如果根文件系统是在引导过程中创建的(例如你正在构建一个安装软盘),根文件系统 > > +的创建过程应创建 ``/initrd`` 目录。 > > + > > +如果initrd在某些情况下不被挂载,则若已创建以下设备,其内容仍可访问:: > how about: > 此时若已创建…… ok > > + > > + # mknod /dev/initrd b 1 250 > > + # chmod 400 /dev/initrd > > + > > +第二,内核必须在编译时启用RAM磁盘支持并打开initrd支持选项。此外至少所有从initrd > > +执行程序依赖的组件(例如可执行格式和文件)都必须编译到内核中。 > > + > > +第三,必须创建RAM磁盘映像。先创建一个块设备上的文件系统,将所需文件复制到其中, > > +然后再将此块设备的内容复制进initrd文件。现时内核中至少有三种类型的设备适合于此: > > + > > + - 软盘(兼容性强但速度慢得令人痛苦) > > + - RAM磁盘(快速但需要分配物理内存) > > + - 回环设备(最优雅的解决方案) > > + > > +我们将讲述使用回环设备的方法: > > + > > + 1) 确保回环块设备被配置进内核了 > > + 2) 创建一个适合大小的空文件系统,例如:: > > + > > + # dd if=/dev/zero of=initrd bs=300k count=1 > > + # mke2fs -F -m0 initrd > > + > > + (如果空间紧缺,您可能希望使用Minux FS来代替Ext2) > > + 3) 挂载此文件系统,例如:: > > + > > + # mount -t ext2 -o loop initrd /mnt > > + > > + 4) 创建控制台设备:: > > + > > + # mkdir /mnt/dev > > + # mknod /mnt/dev/console c 5 1 > > + > > + 5) 复制正常使用initrd环境所需的所有文件。别忘了最重要的文件, ``/sbin/init`` > > + > > + .. note:: ``/sbin/init`` 必须有 ``x`` (执行)权限。 > > + > > + 6) 正确操作可以频繁测试initrd环境而无需使用命令重新启动:: > > + > > + # chroot /mnt /sbin/init > > + > > + This is of course limited to initrds that do not interfere with the > > + general system state (e.g. by reconfiguring network interfaces, > > + overwriting mounted devices, trying to start already running demons, > > + etc. Note however that it is usually possible to use pivot_root in > > + such a chroot'ed initrd environment.) > hi xiangcheng,what is it?:-) 当然,这仅限于不干扰一般系统状态的initrd(例如通过重新配置网络接口、覆盖已安装的设备、尝试启动已运行的守护进程等。不过请注意,在此类chroot的initrd环境中,通常可以使用pivot_root)。 > > + 7) 卸载此文件系统:: > > + > > + # umount /mnt > > + > > + 8) initrd现在在文件“initrd”中。现在可以选择是否压缩:: > > + > > + # gzip -9 initrd > > + > > +使用initrd进行试验,您可能需要一张救援软盘并只添加来 ``/sbin/init`` 到 ``/bin/sh`` > 一张只添加来 ``/sbin/init`` 到 ``/bin/sh`` 的符号链接的救援软盘 OK, use 使用initrd进行测试,您可能需要一张只添加了从 ``/sbin/init`` 到 ``/bin/sh`` 的符号链接的救援软盘。 > > +的符号链接。或者你可以尝试实验性的newlib环境 [#f2]_ 来创建一个小initrd。 > > + > > +最后,必须引导内核并加载initrd。几乎所有Linux引导加载程序都支持initrd。因为 > > +引导过程仍然兼容旧的机制,以下引导命令行参数必须给出:: > > + > > + root=/dev/ram0 rw > > + > > +(只有在需要写入initrd文件系统时才需要rw) > > + > > +使用LOADLIN,你只需要执行:: > > + > > + LOADLIN <kernel> initrd=<disk_image> > > + > > +例如:: > > + > > + LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0 rw > > + > > +W使用LILO,可以添加选项 ``INITRD=<path>`` 到 ``/etc/lilo.conf`` 全局设置部分 > > +或者相应内核的部分,然后通过使用APPEND传递选项,例如:: > > + > > + image = /bzImage > > + initrd = /boot/initrd.gz > > + append = "root=/dev/ram0 rw" > > + > > +并运行 ``/sbin/lilo`` > > + > > +对应其他的启动引导加载器,请参考相关文档。 > > + > > +现在你可以启动并享受initrd时光了。 > how about 并愉快的玩耍initrd了? Good! > > + > > + > > +更改根设备 > > +---------- > > + > > +完成任务后,init通常会更改根设备然后在“真正的”根设备上启动Linux系统。 > > + > > +该流程包括以下步骤: > > + - 挂载新的根文件系统 > > + - 把它转换成根文件系统 > 切换 ok > > + - 移除对旧(initrd)根文件系统的所有访问 > > + - 卸载initrd文件系统并释放RAM磁盘 > > + > > +挂载新的根文件系统很容易:只需将其挂载到当前根目录下的目录中。 > > +例如:: > > + > > + # mkdir /new-root > > + # mount -o ro /dev/hda1 /new-root > > + > > +更改根目录是通过 ``pivot_root`` 系统调用完成的,该调用也可以通过 ``pivot_root`` > > +实用程序使用(参见 :manpage:`pivot_root(8)` 手册页; ``pivot_root`` 与util-linux > > +2.10h或更高版本一起分发 [#f3]_ )。 ``pivot_root`` 根将当前根目录移到新根下的 > > +一个目录里,并设置好新根目录。调用前必须准备好给就根的目录。 > maybe 在调用``pivot_root'之前,旧根目录必须存在。 ? use 调用它之前必须准备好给旧根的目录。 > > +例如:: > > + > > + # cd /new-root > > + # mkdir initrd > > + # pivot_root . initrd > > + > > +现在,init进程仍然可以通过其执行、共享库、标准输入/输出/错误流访问旧根目录和 > > +现在的根目录。所有这些引用都可被以下命令卸载:: > > + > > + # exec chroot . what-follows <dev/console >dev/console 2>&1 > > + > > +what-follows是一个新根下的程序,例如 ``/sbin/init`` 。 > > +如果新根文件系统将与udev一起使用,并且无有效的 ``/dev`` 目录,则udev必须在按顺 > > +序调用chroot之前初始化以提供 ``/dev/console`` 。 > 初始化完成 or 完成初始化? 完成初始化 > > + > > +注意:pivot_root的实现细节可能会随时间而变化。为确保兼容性,应遵守以下几点: > emmmm,how about 细节可能会随着演进历程而变化 ? I perfer 细节可能会在未来出现变化 > > + > > + - 在调用pivot_root之前,调用进程的现目录应该指向新的根目录 > > + - 使用 ``.`` 作为第一个参数,旧根目录的 *相对路径* 作为第二个参数 > > + - chroot程序必须在新旧根目录下均可用 > > + - 之后再chroot到新根 > 目录 done > > + - 在exec命令中对dev/console使用相对路径 > > + > > +现在,可以卸载initrd并释放分配的RAM内存磁盘:: > > + > > + # umount /initrd > > + # blockdev --flushbufs /dev/ram0 > > + > > +也可以将initrd与NFS挂载的根目录一起使用,详细请参阅 :manpage:`pivot_root(8)` > > +手册页。 > > + > > + > > +使用场景 > > +-------- > > + > > +实现initrd的主要动机是在系统安装时允许模块化的内核配置。流程如下: > > + > > + 1) 系统用软盘或其他媒体上的最小内核引导(例如RAM磁盘支持、initrd、a.out和ext2 > 其他媒介 done > > + FS)并加载初始值 > > + 2) ``/sbin/init`` 确定需要(1)装入“真正”根文件系统的内容(即设备类型、 > > + 设备驱动程序、文件系统)和(2)分发介质(如CD-ROM、网络、磁带等)。 > > + 这可以通过询问用户、自动探测或混合使用来完成。 > > + 3) ``/sbin/init`` 加载必要的内核模块 > > + 4) ``/sbin/init`` 创建并填充根文件系统(这不必为一个非常有用的系统) > > + 5) ``/sbin/init`` 调用 ``pivot_root`` 更改根文件系统并通过chroot执行一个程序 > > + 继续此安装 > > + 6) 引导加载程序已安装 > > + 7) 引导加载程序被配置为加载包含一系列模块、可用于启动系统的initrd。例如 > > + ``/initrd`` 可被修改,然后卸载,最后映像被从 ``/dev/ram0`` 或 ``/dev/rd/0`` > > + 写入文件) > > + 8) 现在系统可以启动,可以执行其他安装任务 > > + > > +initrd的关键作用在于:无需使用膨胀的“通用”内核或重新编译/重新链接内核即可 > 臃肿的 OK! > > +重用普通系统操作过程中的配置数据。 > > + > > +第二个场景是在运行于单个管理域中不同硬件配置上的Linux安装。在在这种情况下, > > +最好只生成很少一系列内核(最好就一个)并使配置信息中系统特定部分尽可能少。 > > +而公共initrd可以生成所有必要的模块。这样只有 ``/sbin/init`` 或者它读取的一个 > > +文件才一定会不同。 > 文件必须是不同的。 ok > > + > > +第三种情况是更方便的恢复磁盘。因为像根文件系统分区的位置之类的信息无需在引导 > > +时提供,但是从initrd加载的系统可以调用用户友好的对话框,它还可以执行一些健全 > > +性检查(或者甚至某种形式的自动检测)。 > > + > > +最后一点也很重要,CD-ROM发行商可能会使用它以更好地从CD安装。例如使用引导软盘 > > +并通过CD上的initrd引导一个更大的RAM磁盘;或者通过像 ``LOADLIN`` 这样的启动器 > > +或者直接从CD-ROM中引导,以及在无需软盘的情况下直接从CD加载RAM磁盘。 > > + > > + > > +过时的根变更机制 > > +---------------- > > + > > +在引入pivot_root之前,曾使用以下机制。当前的内核仍然支持它,但是你 *不应* 继续 > > +依赖它。 > > + > > +它在linuxrc退出时挂载“真正的”根设备(即带有rdev的内核映像或启动命令行中的 > > +root=...)来工作在内核映像中或在引导命令行中使用root=…)作为根文件系统。 > > +initrd文件系统即行卸载,或若仍在忙,则将其移动到 ``/initrd`` 目录,如果这样 > > +的目录存在于新的根文件系统上的话。 > > + > > +要使用此机制,您不必指定引导命令选项root、init或rw(如果指定,它们将影响真正的 > > +根文件系统,而不是initrd环境)。 > > + > > +如果挂载了 ``/proc`` ,则可以通过将新根文件系统设备编号写入 > > +``/proc/sys/kernel/real-root-dev`` ,从linuxrc内部更改“真正的”根设备,例如:: > > + > > + # echo 0x301 >/proc/sys/kernel/real-root-dev > > + > > +请注意,该机制不兼容NFS及类似的文件系统。 > > + > > +此过时的旧机制通常被称为 ``change_root`` ,同时新的、受支持的机制称为 ``pivot_root`` 。 > > + > > + > > +混用change_root和pivot_root机制 > > +------------------------------- > > + > > +如果你不想使用 ``root=dev/ram0`` 触发pivot_root机制,你可以在initrd映像中同时 > > +创建 ``/linuxrc`` 和 ``/sbin/init`` 。 > > + > > +``/linuxrc`` 只包含以下内容:: > > + > > + #! /bin/sh > > + mount -n -t proc proc /proc > > + echo 0x0100 >/proc/sys/kernel/real-root-dev > > + umount -n /proc > > + > > +一旦linuxrc退出,内核将再次以根用户身份挂载initrd,并执行 ``/sbin/init`` 。 > > +此次初始化要在最终执行真正的 ``/sbin/init`` 之前建立正确的环境(可能是使用 > > +``root=device`` 传递命令行)。 > > + > > + > > +参考资料 > > +-------- > > + > > +.. [#f1] Almesberger, Werner; "Booting Linux: The History and the Future(启动Linux,历史与未来)" > > + https://www.almesberger.net/cv/papers/ols2k-9.ps.gz > > +.. [#f2] newlib包(实验性),附带initrd样例 > > + https://www.sourceware.org/newlib/ > > +.. [#f3] util-linux:Linux的其他实用程序 > > + https://www.kernel.org/pub/linux/utils/util-linux/ > > -- > > 2.20.1 > > > > Thanks, > > Yanteng Thanks for your review! Wu X.C. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 659 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-06-23 7:30 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-06-20 10:40 [PATCH 0/2] docs/zh_CN: Add two new translations in zh_CN/admin-guide Wu XiangCheng 2021-06-20 10:40 ` [PATCH 1/2] docs/zh_CN: Add translation zh_CN/admin-guide/efi-stub.rst Wu XiangCheng 2021-06-21 9:12 ` Alex Shi 2021-06-21 13:32 ` teng sterling 2021-06-21 15:59 ` Wu X.C. 2021-06-23 3:28 ` teng sterling 2021-06-23 6:44 ` Wu X.C. 2021-06-20 10:41 ` [PATCH 2/2] docs/zh_CN: Add translation zh_CN/admin-guide/initrd.rst Wu XiangCheng 2021-06-22 3:08 ` teng sterling 2021-06-23 7:30 ` Wu X.C.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.