€•²dŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”ŒF/translations/zh_CN/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒF/translations/zh_TW/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒF/translations/it_IT/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒF/translations/ja_JP/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒF/translations/ko_KR/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒF/translations/sp_SP/driver-api/early-userspace/early_userspace_support”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒEarly userspace support”h]”hŒEarly userspace support”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒ`/var/lib/git/docbuild/linux/Documentation/driver-api/early-userspace/early_userspace_support.rst”h KubhŒ paragraph”“”)”}”(hŒLast update: 2004-12-20 tlh”h]”hŒLast update: 2004-12-20 tlh”…””}”(hh¹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubh¸)”}”(hŒæ"Early userspace" is a set of libraries and programs that provide various pieces of functionality that are important enough to be available while a Linux kernel is coming up, but that don't need to be run inside the kernel itself.”h]”hŒì“Early userspace†is a set of libraries and programs that provide various pieces of functionality that are important enough to be available while a Linux kernel is coming up, but that don’t need to be run inside the kernel itself.”…””}”(hhÇhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubh¸)”}”(hŒ7It consists of several major infrastructure components:”h]”hŒ7It consists of several major infrastructure components:”…””}”(hhÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K hh£hžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒµgen_init_cpio, a program that builds a cpio-format archive containing a root filesystem image. This archive is compressed, and the compressed image is linked into the kernel image.”h]”h¸)”}”(hŒµgen_init_cpio, a program that builds a cpio-format archive containing a root filesystem image. This archive is compressed, and the compressed image is linked into the kernel image.”h]”hŒµgen_init_cpio, a program that builds a cpio-format archive containing a root filesystem image. This archive is compressed, and the compressed image is linked into the kernel image.”…””}”(hhîhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khhêubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhhåhžhhŸh¶h Nubhé)”}”(hŒiinitramfs, a chunk of code that unpacks the compressed cpio image midway through the kernel boot process.”h]”h¸)”}”(hŒiinitramfs, a chunk of code that unpacks the compressed cpio image midway through the kernel boot process.”h]”hŒiinitramfs, a chunk of code that unpacks the compressed cpio image midway through the kernel boot process.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhhåhžhhŸh¶h Nubhé)”}”(hŒoklibc, a userspace C library, currently packaged separately, that is optimized for correctness and small size. ”h]”h¸)”}”(hŒnklibc, a userspace C library, currently packaged separately, that is optimized for correctness and small size.”h]”hŒnklibc, a userspace C library, currently packaged separately, that is optimized for correctness and small size.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhhåhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hãhŸh¶h Khh£hžhubh¸)”}”(hX8The cpio file format used by initramfs is the "newc" (aka "cpio -H newc") format, and is documented in the file "buffer-format.txt". There are two ways to add an early userspace image: specify an existing cpio archive to be used as the image or have the kernel build process build the image from specifications.”h]”hXDThe cpio file format used by initramfs is the “newc†(aka “cpio -H newcâ€) format, and is documented in the file “buffer-format.txtâ€. There are two ways to add an early userspace image: specify an existing cpio archive to be used as the image or have the kernel build process build the image from specifications.”…””}”(hj:hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubh¢)”}”(hhh]”(h§)”}”(hŒCPIO ARCHIVE method”h]”hŒCPIO ARCHIVE method”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjHhžhhŸh¶h Kubh¸)”}”(hX;You can create a cpio archive that contains the early userspace image. Your cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it will be used directly. Only a single cpio file may be specified in CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in combination with a cpio archive.”h]”hX;You can create a cpio archive that contains the early userspace image. Your cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it will be used directly. Only a single cpio file may be specified in CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in combination with a cpio archive.”…””}”(hjYhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K hjHhžhubeh}”(h]”Œcpio-archive-method”ah ]”h"]”Œcpio archive method”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒIMAGE BUILDING method”h]”hŒIMAGE BUILDING method”…””}”(hjrhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjohžhhŸh¶h K'ubh¸)”}”(hŒôThe kernel build process can also build an early userspace image from source parts rather than supplying a cpio archive. This method provides a way to create images with root-owned files even though the image was built by an unprivileged user.”h]”hŒôThe kernel build process can also build an early userspace image from source parts rather than supplying a cpio archive. This method provides a way to create images with root-owned files even though the image was built by an unprivileged user.”…””}”(hj€hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K)hjohžhubh¸)”}”(hŒ³The image is specified as one or more sources in CONFIG_INITRAMFS_SOURCE. Sources can be either directories or files - cpio archives are *not* allowed when building from sources.”h]”(hŒŠThe image is specified as one or more sources in CONFIG_INITRAMFS_SOURCE. Sources can be either directories or files - cpio archives are ”…””}”(hjŽhžhhŸNh NubhŒemphasis”“”)”}”(hŒ*not*”h]”hŒnot”…””}”(hj˜hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j–hjŽubhŒ$ allowed when building from sources.”…””}”(hjŽhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K.hjohžhubh¸)”}”(hXxA source directory will have it and all of its contents packaged. The specified directory name will be mapped to '/'. When packaging a directory, limited user and group ID translation can be performed. INITRAMFS_ROOT_UID can be set to a user ID that needs to be mapped to user root (0). INITRAMFS_ROOT_GID can be set to a group ID that needs to be mapped to group root (0).”h]”hX|A source directory will have it and all of its contents packaged. The specified directory name will be mapped to ‘/’. When packaging a directory, limited user and group ID translation can be performed. INITRAMFS_ROOT_UID can be set to a user ID that needs to be mapped to user root (0). INITRAMFS_ROOT_GID can be set to a group ID that needs to be mapped to group root (0).”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K2hjohžhubh¸)”}”(hŒ×A source file must be directives in the format required by the usr/gen_init_cpio utility (run 'usr/gen_init_cpio -h' to get the file format). The directives in the file will be passed directly to usr/gen_init_cpio.”h]”hŒÛA source file must be directives in the format required by the usr/gen_init_cpio utility (run ‘usr/gen_init_cpio -h’ to get the file format). The directives in the file will be passed directly to usr/gen_init_cpio.”…””}”(hj¾hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K9hjohžhubh¸)”}”(hXáWhen a combination of directories and files are specified then the initramfs image will be an aggregate of all of them. In this way a user can create a 'root-image' directory and install all files into it. Because device-special files cannot be created by a unprivileged user, special files can be listed in a 'root-files' file. Both 'root-image' and 'root-files' can be listed in CONFIG_INITRAMFS_SOURCE and a complete early userspace image can be built by an unprivileged user.”h]”hXñWhen a combination of directories and files are specified then the initramfs image will be an aggregate of all of them. In this way a user can create a ‘root-image’ directory and install all files into it. Because device-special files cannot be created by a unprivileged user, special files can be listed in a ‘root-files’ file. Both ‘root-image’ and ‘root-files’ can be listed in CONFIG_INITRAMFS_SOURCE and a complete early userspace image can be built by an unprivileged user.”…””}”(hjÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K>hjohžhubh¸)”}”(hXˆAs a technical note, when directories and files are specified, the entire CONFIG_INITRAMFS_SOURCE is passed to usr/gen_initramfs.sh. This means that CONFIG_INITRAMFS_SOURCE can really be interpreted as any legal argument to gen_initramfs.sh. If a directory is specified as an argument then the contents are scanned, uid/gid translation is performed, and usr/gen_init_cpio file directives are output. If a directory is specified as an argument to usr/gen_initramfs.sh then the contents of the file are simply copied to the output. All of the output directives from directory scanning and file contents copying are processed by usr/gen_init_cpio.”h]”hXˆAs a technical note, when directories and files are specified, the entire CONFIG_INITRAMFS_SOURCE is passed to usr/gen_initramfs.sh. This means that CONFIG_INITRAMFS_SOURCE can really be interpreted as any legal argument to gen_initramfs.sh. If a directory is specified as an argument then the contents are scanned, uid/gid translation is performed, and usr/gen_init_cpio file directives are output. If a directory is specified as an argument to usr/gen_initramfs.sh then the contents of the file are simply copied to the output. All of the output directives from directory scanning and file contents copying are processed by usr/gen_init_cpio.”…””}”(hjÚhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KFhjohžhubh¸)”}”(hŒ#See also 'usr/gen_initramfs.sh -h'.”h]”hŒ'See also ‘usr/gen_initramfs.sh -h’.”…””}”(hjèhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KRhjohžhubh¢)”}”(hhh]”(h§)”}”(hŒWhere's this all leading?”h]”hŒWhere’s this all leading?”…””}”(hjùhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjöhžhhŸh¶h KUubh¸)”}”(hŒªThe klibc distribution contains some of the necessary software to make early userspace useful. The klibc distribution is currently maintained separately from the kernel.”h]”hŒªThe klibc distribution contains some of the necessary software to make early userspace useful. The klibc distribution is currently maintained separately from the kernel.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KWhjöhžhubh¸)”}”(hŒgYou can obtain somewhat infrequent snapshots of klibc from https://www.kernel.org/pub/linux/libs/klibc/”h]”(hŒ;You can obtain somewhat infrequent snapshots of klibc from ”…””}”(hjhžhhŸNh NubhŒ reference”“”)”}”(hŒ,https://www.kernel.org/pub/linux/libs/klibc/”h]”hŒ,https://www.kernel.org/pub/linux/libs/klibc/”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j!uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K[hjöhžhubh¸)”}”(hŒvFor active users, you are better off using the klibc git repository, at https://git.kernel.org/?p=libs/klibc/klibc.git”h]”(hŒHFor active users, you are better off using the klibc git repository, at ”…””}”(hj4hžhhŸNh Nubj)”}”(hŒ.https://git.kernel.org/?p=libs/klibc/klibc.git”h]”hŒ.https://git.kernel.org/?p=libs/klibc/klibc.git”…””}”(hj<hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j>uh1jhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K^hjöhžhubh¸)”}”(hŒhThe standalone klibc distribution currently provides three components, in addition to the klibc library:”h]”hŒhThe standalone klibc distribution currently provides three components, in addition to the klibc library:”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kahjöhžhubhä)”}”(hhh]”(hé)”}”(hŒ¦ipconfig, a program that configures network interfaces. It can configure them statically, or use DHCP to obtain information dynamically (aka "IP autoconfiguration").”h]”h¸)”}”(hŒ¦ipconfig, a program that configures network interfaces. It can configure them statically, or use DHCP to obtain information dynamically (aka "IP autoconfiguration").”h]”hŒªipconfig, a program that configures network interfaces. It can configure them statically, or use DHCP to obtain information dynamically (aka “IP autoconfigurationâ€).”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kdhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhj_hžhhŸh¶h Nubhé)”}”(hŒ5nfsmount, a program that can mount an NFS filesystem.”h]”h¸)”}”(hj|h]”hŒ5nfsmount, a program that can mount an NFS filesystem.”…””}”(hj~hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kghjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhj_hžhhŸh¶h Nubhé)”}”(hŒµkinit, the "glue" that uses ipconfig and nfsmount to replace the old support for IP autoconfig, mount a filesystem over NFS, and continue system boot using that filesystem as root. ”h]”h¸)”}”(hŒ´kinit, the "glue" that uses ipconfig and nfsmount to replace the old support for IP autoconfig, mount a filesystem over NFS, and continue system boot using that filesystem as root.”h]”hŒ¸kinit, the “glue†that uses ipconfig and nfsmount to replace the old support for IP autoconfig, mount a filesystem over NFS, and continue system boot using that filesystem as root.”…””}”(hj•hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhj_hžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1hãhŸh¶h Kdhjöhžhubh¸)”}”(hŒBkinit is built as a single statically linked binary to save space.”h]”hŒBkinit is built as a single statically linked binary to save space.”…””}”(hj¯hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Klhjöhžhubh¸)”}”(hŒ_Eventually, several more chunks of kernel functionality will hopefully move to early userspace:”h]”hŒ_Eventually, several more chunks of kernel functionality will hopefully move to early userspace:”…””}”(hj½hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Knhjöhžhubhä)”}”(hhh]”(hé)”}”(hŒIAlmost all of init/do_mounts* (the beginning of this is already in place)”h]”h¸)”}”(hŒIAlmost all of init/do_mounts* (the beginning of this is already in place)”h]”hŒIAlmost all of init/do_mounts* (the beginning of this is already in place)”…””}”(hjÒhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KqhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhjËhžhhŸh¶h Nubhé)”}”(hŒACPI table parsing”h]”h¸)”}”(hjèh]”hŒACPI table parsing”…””}”(hjêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kshjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhjËhžhhŸh¶h Nubhé)”}”(hŒNInsert unwieldy subsystem that doesn't really need to be in kernel space here ”h]”h¸)”}”(hŒMInsert unwieldy subsystem that doesn't really need to be in kernel space here”h]”hŒOInsert unwieldy subsystem that doesn’t really need to be in kernel space here”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kthjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhjËhžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”j8j9uh1hãhŸh¶h Kqhjöhžhubh¸)”}”(hXIf kinit doesn't meet your current needs and you've got bytes to burn, the klibc distribution includes a small Bourne-compatible shell (ash) and a number of other utilities, so you can replace kinit and build custom initramfs images that meet your needs exactly.”h]”hX If kinit doesn’t meet your current needs and you’ve got bytes to burn, the klibc distribution includes a small Bourne-compatible shell (ash) and a number of other utilities, so you can replace kinit and build custom initramfs images that meet your needs exactly.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kwhjöhžhubh¸)”}”(hŒ|For questions and help, you can sign up for the early userspace mailing list at https://www.zytor.com/mailman/listinfo/klibc”h]”(hŒPFor questions and help, you can sign up for the early userspace mailing list at ”…””}”(hj)hžhhŸNh Nubj)”}”(hŒ,https://www.zytor.com/mailman/listinfo/klibc”h]”hŒ,https://www.zytor.com/mailman/listinfo/klibc”…””}”(hj1hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j3uh1jhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K|hjöhžhubeh}”(h]”Œwhere-s-this-all-leading”ah ]”h"]”Œwhere's this all leading?”ah$]”h&]”uh1h¡hjohžhhŸh¶h KUubh¢)”}”(hhh]”(h§)”}”(hŒHow does it work?”h]”hŒHow does it work?”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjNhžhhŸh¶h K€ubh¸)”}”(hŒ=The kernel has currently 3 ways to mount the root filesystem:”h]”hŒ=The kernel has currently 3 ways to mount the root filesystem:”…””}”(hj_hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K‚hjNhžhubhŒenumerated_list”“”)”}”(hhh]”(hé)”}”(hXall required device and filesystem drivers compiled into the kernel, no initrd. init/main.c:init() will call prepare_namespace() to mount the final root filesystem, based on the root= option and optional init= to run some other init binary than listed at the end of init/main.c:init(). ”h]”h¸)”}”(hXall required device and filesystem drivers compiled into the kernel, no initrd. init/main.c:init() will call prepare_namespace() to mount the final root filesystem, based on the root= option and optional init= to run some other init binary than listed at the end of init/main.c:init().”h]”hXall required device and filesystem drivers compiled into the kernel, no initrd. init/main.c:init() will call prepare_namespace() to mount the final root filesystem, based on the root= option and optional init= to run some other init binary than listed at the end of init/main.c:init().”…””}”(hjvhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K„hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhjohžhhŸh¶h Nubhé)”}”(hXKsome device and filesystem drivers built as modules and stored in an initrd. The initrd must contain a binary '/linuxrc' which is supposed to load these driver modules. It is also possible to mount the final root filesystem via linuxrc and use the pivot_root syscall. The initrd is mounted and executed via prepare_namespace(). ”h]”h¸)”}”(hXJsome device and filesystem drivers built as modules and stored in an initrd. The initrd must contain a binary '/linuxrc' which is supposed to load these driver modules. It is also possible to mount the final root filesystem via linuxrc and use the pivot_root syscall. The initrd is mounted and executed via prepare_namespace().”h]”hXNsome device and filesystem drivers built as modules and stored in an initrd. The initrd must contain a binary ‘/linuxrc’ which is supposed to load these driver modules. It is also possible to mount the final root filesystem via linuxrc and use the pivot_root syscall. The initrd is mounted and executed via prepare_namespace().”…””}”(hjŽhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K‰hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hèhjohžhhŸh¶h Nubhé)”}”(hX_using initramfs. The call to prepare_namespace() must be skipped. This means that a binary must do all the work. Said binary can be stored into initramfs either via modifying usr/gen_init_cpio.c or via the new initrd format, an cpio archive. It must be called "/init". This binary is responsible to do all the things prepare_namespace() would do. To maintain backwards compatibility, the /init binary will only run if it comes via an initramfs cpio archive. If this is not the case, init/main.c:init() will run prepare_namespace() to mount the final root and exec one of the predefined init binaries. ”h]”(h¸)”}”(hX^using initramfs. The call to prepare_namespace() must be skipped. This means that a binary must do all the work. Said binary can be stored into initramfs either via modifying usr/gen_init_cpio.c or via the new initrd format, an cpio archive. It must be called "/init". This binary is responsible to do all the things prepare_namespace() would do.”h]”hXbusing initramfs. The call to prepare_namespace() must be skipped. This means that a binary must do all the work. Said binary can be stored into initramfs either via modifying usr/gen_init_cpio.c or via the new initrd format, an cpio archive. It must be called “/initâ€. This binary is responsible to do all the things prepare_namespace() would do.”…””}”(hj¦hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khj¢ubh¸)”}”(hŒþTo maintain backwards compatibility, the /init binary will only run if it comes via an initramfs cpio archive. If this is not the case, init/main.c:init() will run prepare_namespace() to mount the final root and exec one of the predefined init binaries.”h]”hŒþTo maintain backwards compatibility, the /init binary will only run if it comes via an initramfs cpio archive. If this is not the case, init/main.c:init() will run prepare_namespace() to mount the final root and exec one of the predefined init binaries.”…””}”(hj´hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K•hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hèhjohžhhŸh¶h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œ loweralpha”Œprefix”hŒsuffix”Œ)”uh1jmhjNhžhhŸh¶h K„ubh¸)”}”(hŒ%Bryan O'Sullivan ”h]”(hŒBryan O’Sullivan <”…””}”(hjÓhžhhŸNh Nubj)”}”(hŒbos@serpentine.com”h]”hŒbos@serpentine.com”…””}”(hjÛhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:bos@serpentine.com”uh1jhjÓubhŒ>”…””}”(hjÓhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KšhjNhžhubeh}”(h]”Œhow-does-it-work”ah ]”h"]”Œhow does it work?”ah$]”h&]”uh1h¡hjohžhhŸh¶h K€ubeh}”(h]”Œimage-building-method”ah ]”h"]”Œimage building method”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K'ubeh}”(h]”Œearly-userspace-support”ah ]”h"]”Œearly userspace support”ah$]”h&]”uh1h¡hhhžhhŸh¶h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¶uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¦NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j0Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¶Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j jjljijjÿjKjHjúj÷uŒ nametypes”}”(j ‰jl‰j‰jK‰jú‰uh}”(jh£jijHjÿjojHjöj÷jNuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.