早期用户空间支持 【ChatGPT】

简介: 早期用户空间支持 【ChatGPT】

早期用户空间(Early userspace)是一组库和程序,提供了在 Linux 内核启动过程中非常重要的功能,但不需要在内核本身内运行的功能。

它包括几个主要的基础组件:

  • gen_init_cpio:一个构建包含根文件系统镜像的 cpio 格式存档的程序。这个存档是经过压缩的,压缩后的镜像会链接到内核镜像中。
  • initramfs:一段代码,在内核引导过程中解压缩压缩的 cpio 镜像。
  • klibc:一个用户空间的 C 库,目前是单独打包的,它针对正确性和小尺寸进行了优化。

initramfs 使用的 cpio 文件格式是 "newc"(又名 "cpio -H newc")格式,其文档在文件 "initramfs buffer format" 中有说明。有两种方法可以添加早期用户空间镜像:指定现有的 cpio 存档用作镜像,或者让内核构建过程根据规范构建镜像。

CPIO 存档方法:

你可以创建一个包含早期用户空间镜像的 cpio 存档。你的 cpio 存档应该在 CONFIG_INITRAMFS_SOURCE 中指定,并将直接使用。在 CONFIG_INITRAMFS_SOURCE 中只能指定一个单独的 cpio 文件,不允许同时使用目录和文件名。

镜像构建方法:

内核构建过程也可以根据源部件构建早期用户空间镜像,而不是提供一个 cpio 存档。这种方法提供了一种创建具有根文件所有者文件的镜像的方式,即使该镜像是由一个非特权用户构建的。

镜像在 CONFIG_INITRAMFS_SOURCE 中指定为一个或多个源。源可以是目录或文件 - 在构建源时不允许使用 cpio 存档。

源目录及其所有内容将被打包。指定的目录名称将映射到 '/'。在打包目录时,可以执行有限的用户和组 ID 转换。INITRAMFS_ROOT_UID 可以设置为需要映射到用户 root(0)的用户 ID。INITRAMFS_ROOT_GID 可以设置为需要映射到组 root(0)的组 ID。

源文件必须是 usr/gen_init_cpio 实用程序所需格式的指令(运行 'usr/gen_init_cpio -h' 以获取文件格式)。文件中的指令将直接传递给 usr/gen_init_cpio。

当指定目录和文件的组合时,initramfs 镜像将是它们所有内容的聚合。通过这种方式,用户可以创建一个 'root-image' 目录,并将所有文件安装到其中。因为设备特殊文件无法由非特权用户创建,特殊文件可以列在一个 'root-files' 文件中。'root-image' 和 'root-files' 都可以列在 CONFIG_INITRAMFS_SOURCE 中,非特权用户可以构建完整的早期用户空间镜像。

作为技术说明,当指定目录和文件时,整个 CONFIG_INITRAMFS_SOURCE 都会传递给 usr/gen_initramfs.sh。这意味着 CONFIG_INITRAMFS_SOURCE 实际上可以被解释为 gen_initramfs.sh 的任何合法参数。如果将目录指定为参数,则会扫描内容,执行 uid/gid 转换,并输出 usr/gen_init_cpio 文件指令。如果将目录指定为 usr/gen_initramfs.sh 的参数,则文件内容的所有指令将简单地复制到输出中。目录扫描和文件内容复制的所有输出指令都将由 usr/gen_init_cpio 处理。

另请参阅 'usr/gen_initramfs.sh -h'。

这一切的目的是什么?

klibc 发行版包含了使早期用户空间变得有用的一些必要软件。klibc 发行版目前是与内核分开维护的。

你可以从 https://www.kernel.org/pub/linux/libs/klibc/ 获取 klibc 的一些不太频繁的快照。

对于活跃的用户,最好使用 klibc 的 git 存储库,网址是 https://git.kernel.org/?p=libs/klibc/klibc.git

独立的 klibc 发行版目前除了 klibc 库之外还提供了三个组件:

  • ipconfig:配置网络接口的程序。它可以静态配置它们,也可以使用 DHCP 动态获取信息(也称为 "IP 自动配置")。
  • nfsmount:可以挂载 NFS 文件系统的程序。
  • kinit:使用 ipconfig 和 nfsmount 来替换旧的 IP 自动配置支持,挂载 NFS 文件系统,并使用该文件系统作为根继续系统引导的 "粘合剂"。

kinit 被构建为一个单独的静态链接二进制文件,以节省空间。

最终,希望将更多的内核功能块移动到早期用户空间:

  • 几乎所有的 init/do_mounts*(其开始部分已经就位)
  • ACPI 表解析
  • 插入不需要真正位于内核空间的笨重子系统

如果 kinit 不满足你当前的需求,并且你有多余的空间,klibc 发行版包括一个小型的 Bourne 兼容 shell(ash)和许多其他实用程序,因此你可以替换 kinit 并构建符合你需求的自定义 initramfs 镜像。

有关问题和帮助,你可以在 https://www.zytor.com/mailman/listinfo/klibc 注册早期用户空间邮件列表。

它是如何工作的?

内核目前有 3 种方式挂载根文件系统:

  • 所有必需的设备和文件系统驱动程序都编译到内核中,没有 initrd。init/main.c:init() 将调用 prepare_namespace() 来挂载最终的根文件系统,基于 root= 选项和可选的 init= 来运行一些不在 init/main.c:init() 末尾列出的其他 init 二进制文件。
  • 一些设备和文件系统驱动程序作为模块构建,并存储在一个 initrd 中。initrd 必须包含一个名为 '/linuxrc' 的二进制文件,它应该加载这些驱动模块。也可以通过 linuxrc 挂载最终的根文件系统,并使用 pivot_root 系统调用。通过 prepare_namespace() 挂载和执行 initrd。
  • 使用 initramfs。必须跳过对 prepare_namespace() 的调用。这意味着一个二进制文件必须完成所有工作。所述二进制文件可以通过修改 usr/gen_init_cpio.c 或通过新的 initrd 格式,即 cpio 存档,存储到 initramfs 中。它必须被命名为 "/init"。这个二进制文件负责执行 prepare_namespace() 将要做的所有工作。

为了保持向后兼容性,只有当 /init 二进制文件通过 initramfs cpio 存档传递时,它才会运行。如果不是这种情况,init/main.c:init() 将运行 prepare_namespace() 来挂载最终的根,并执行预定义的 init 二进制文件之一。

Bryan O'Sullivan bos@serpentine.com

相关文章
|
自然语言处理
chatGPT意义空间和语义运动定律
chatGPT(Chat Generative Pre-trained Transformer)是一种基于Transformer模型的语言生成模型,具有强大的语言理解和生成能力。它在自然语言处理领域具有广泛的应用,可以用于对话系统、问答系统、翻译系统等任务。 在chatGPT的预训练过程中,模型通过大规模的对话数据进行训练,从而学习到了丰富的语言知识和上下文关联性。这使得chatGPT能够生成连贯、流畅的回复,并且能够理解人类的语言表达。 在预训练过程中,chatGPT使用的是基于自回归的语言模型。这意味着模型在生成每个单词时都会考虑前面生成的单词,从而保证生成的文本具有一定的连贯性和上下
68 0
|
2月前
|
存储 Linux 虚拟化
用户空间 I/O HOWTO【ChatGPT】
用户空间 I/O HOWTO【ChatGPT】
|
人工智能 机器人 人机交互
空间智能化的速度,连ChatGPT都低估了
过去相当长一段时间里,诸如此类的话题可能仅限在设计师的圈子里讨论。可当智能设备越来越流行,用户需求逐渐从PC、手机延伸到整个生活空间,交互已然成为人感知空间智能进化的起点。
|
存储 机器学习/深度学习 缓存
将26个token压缩成1个,新方法极致节省ChatGPT输入框空间
将26个token压缩成1个,新方法极致节省ChatGPT输入框空间
280 0
|
3月前
|
人工智能 自然语言处理 搜索推荐
chatgpt这么火,现在AI搜索引擎有哪些呢?
国外AI搜索引擎包括ChatGPT,擅长自然语言处理与内容生成;Google Bard,提供智能个性化搜索体验;Microsoft Bing集成GPT模型增强智能检索;Perplexity AI以简洁答案及文献引用著称;Neeva强调隐私保护与无广告服务。国内方面,天工AI支持多种功能如知识问答与代码编程;腾讯元宝基于混元模型助力内容创造与学习;360AI搜索以精准全面的信息搜索见长;秘塔AI专注提升写作质量和效率;开搜AI搜索提供个性化智能搜索服务。以上引擎均利用先进AI技术提升用户体验。更多详情参阅[AI搜索合集](zhangfeidezhu.com/?page_id=651)。
109 8
chatgpt这么火,现在AI搜索引擎有哪些呢?
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
HuggingGPT是一个框架,它使用大型语言模型(如ChatGPT)作为控制器来管理和协调Hugging Face上的AI模型,以语言作为通用接口解决多模态和领域的复杂AI任务。
56 0
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
|
3月前
|
机器学习/深度学习 人工智能 算法
为什么ChatGPT等AI大模型都是基于Python开发?
为什么ChatGPT等AI大模型都是基于Python开发?
|
3月前
|
人工智能 自然语言处理 Linux
免费ChatGPT4o灵办AI可体验浏览器插件
灵办AI就是您所需的最佳助手!我们为您带来了一款多功能AI工具,ChatGPT4o不仅能为您提供精准翻译,还能满足您的对话需求、智能续写、AI搜索、文档阅读、代码生成与修正等多种需求。灵办 AI,真正让工作和学习变得轻松高效!一款多功能智能助手,旨在提升工作和学习效率。它提供实时翻译、对话问答、搜索、写作和网页阅读等服务,支持多种浏览器和操作系统,帮助用户随时获取信息,打破语言障碍,优化内容创作和信息处理。
114 0
|
3月前
|
Web App开发 人工智能 安全
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
|
3月前
|
人工智能 安全 机器人
ChatGPT 1岁:创新、争议和AI产生突破的一年
ChatGPT 1岁:创新、争议和AI产生突破的一年