ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

kernel 的 bootconfig

kernel 的 bootconfig void start_kernel(void) { char *command_line; ... setup_arch(command_line); ... setup_boot_config(); setup_command_line(command_line); ... }参考链接Boot Configuration — The Linux Kernel documentation在 Android 12 中实现 bootconfig | Android Open Source Project使用 bootconfig 启动内核有两种选择将 bootconfig 附加到 initrd 映像或将其嵌入内核本身。1. 将启动配置(Boot Config)附加到 Initrd由于启动配置文件默认随 initrd 一起加载因此它将被添加到 initrdini​​tramfs映像文件的末尾并带有填充(padding)、大小(size)、校验和(checksum)以及如下所示的 12 字节魔字。[initrd][bootconfig][padding][size(le32)][checksum(le32)][#BOOTCONFIGn]大小(size)和校验和(checksum)字段是无符号 32 位小端值。当启动配置添加到 initrd 镜像时文件总大小按 4 字节对齐。为了填充剩余空间会添加空字符 (\0)。因此文件大小(size)为the length of the bootconfig file padding bytes。2. 将启动配置(Boot Config)嵌入内核如果无法使用 initrd也可以通过 Kconfig 选项将 bootconfig 文件嵌入内核。在这种情况下需要使用以下配置重新编译内核CONFIG_BOOT_CONFIG_EMBEDy CONFIG_BOOT_CONFIG_EMBED_FILE/PATH/TO/BOOTCONFIG/FILECONFIG_BOOT_CONFIG_EMBED_FILE 需要一个指向源树(source tree)或目标树(object tree)中 bootconfig 文件的绝对路径或相对路径。内核会将其嵌入为默认的 bootconfig 文件。配置文件(Boot Config File)限制目前最大配置大小为 32KB关键字(key-words)总数而非键值对条目(key-value entries)必须少于 1024 个节点。注意这里指的是节点数而非条目数一个条目必须占用两个以上的节点一个关键字(a key-word)和一个值(a value)。因此理论上最多可以包含 512 个键值对。如果键平均包含 3 个单词则可以包含 256 个键值对。大多数情况下配置项的数量会少于 100 个且小于 8KB因此足够了。如果节点数超过 1024即使文件大小小于 32KB解析器也会返回错误。请注意此最大大小不包括填充的空字符。无论如何由于 bootconfig 命令在将启动配置附加到 initrd 镜像时会进行验证因此用户可以在启动前注意到这一点。
返回列表