我正在尝试将我的 buildroot 从使用 mdev 移动到 udev。我已从 v5 build-root dev_defconfig 中删除了以下配置参数以删除 mdev:
-BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
并启用系统中启用 udev 所需的配置:
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
然后尝试通过以下方式构建内核:
make dev_defconfig
make
但这似乎让我陷入以下编译错误:
Loading RAMDisk Image
Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
Signature check Bad (error 1)
make[1]: *** [Makefile:817: target-post-image] Error 1
make: *** [Makefile:84: _all] Error 2
有人知道我应该在哪里解决这个问题吗?看起来包括udev在内的图像大小已经超出了限制。但不确定这个集合在哪里以及如何增加它?
这原来是gunzip大小和uboot对大小限制的问题。 uboot代码中定义的默认gunzip大小如下: (我正在使用这个 uboot 版本 u-boot-2021.07):
common/bootm.c
#define CONFIG_SYS_BOOTM_LEN 0x800000
即8MB。我的 Gunzip 图像大小超过 27MB,因此我必须将上述大小更改为 30MB。我通过一个补丁实现了这一点,如下所示:
diff --git a/common/bootm.c b/common/bootm.c
index ea71522d..8347316f 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -34,8 +34,8 @@
#include <image.h>
#ifndef CONFIG_SYS_BOOTM_LEN
-/* use 8MByte as default max gunzip size */
-#define CONFIG_SYS_BOOTM_LEN 0x800000
+/* changing the default 8MByte gunzip size to ~27MB */
+#define CONFIG_SYS_BOOTM_LEN 0x1AE0000
#endif
#define MAX_CMDLINE_SIZE SZ_4K
所以我使用的整体结构如下:
在 buildroot 中有以下包:
包/uboot-tools/
在buildroot中有以下补丁文件:
board/xxxx/yyyy/patches/uboot-tools/0004-max-gunzip-size-increased-from-8-MByte-to-30-MByte.patch
然后构建堆栈不会再抛出编译错误。