2015-07-20 73 views
1

在运行Linux 2.6.36的嵌入式平台上,我偶尔会遇到一个问题,其中文件未出现在我们的initramfs cpio文件中的ARE的根文件系统中。从initramfs中“消失”的文件

我正在从cpio列表文件构建initramfs(请参阅gen_init_cpio.c),但在使用完整目录之前也遇到了问题。

当我说我知道文件存在于cpio文件中时,我的意思是如果我提取usr/initrmafs_data.cpio.gz文件在那里。

它似乎与initramfs中的内容数量松散相关,但我还没有找到导致文件开始消失的魔术数量和/或总存储容量。

有没有在make menuconfig选项我错过了,将解决这个问题?启动参数?还有别的吗?

有什么建议吗?

更新:为了澄清,这是使用CONFIG_INITRAMFS_SOURCE内置内存盘,它的通过设置CONFIG_INITRAMFS_COMPRESSION_GZIP用gzip压缩。此外,这是一个mipsel-linux平台。

更新#2:我已经添加了一个printk到init/initramfs.c:clean_path和神秘地,以前的“消失”文件现在都在那里。我认为如果尝试记录行为改变了行为,这种类似似乎指向内核错误。我会在明天将initramfs.c与新的内核进行比较,看看是否能够解决这个问题。

+1

投票结束的人:从什么时候涉及*编译*内核的问题在superuser.com上进行?我现在正在添加'printk'语句并破解了“init/*。c”文件以达到这个目的..... –

+0

这是一种关于主题但在这里边界的集成问题,完全是[su]越位,[unix.se]越界,并可能在[自己的站点]上做得最好(http://area51.stackexchange.com/proposals/70800/embedded-systems?referrer=ugotaNldoh5JOVkcEm-iDw2) 。 – Gilles

回答

0

可能您的图像尺寸大于默认的虚拟硬盘大小(4MB afaik)。检查是否将ramdisk_size=valuebiggerthanyourimagesize作为内核参数(在root=...参数之前)可以解决您的问题。您也可以尝试更改内核配置值CONFIG_BLK_DEV_RAM_SIZE

+0

好的建议,但没有运气。 :(。CONFIG_BLK_DEV_RAM_SIZE已经显着大于initramfs映像解压缩后的难度 –

+0

好吧,看起来我把旧式的initrd与initramfs混淆了,所以这个参数真的不重要,如果你没有构建,这些文件也会消失将initramfs加载到内核中,但将其加载为initrd(如果您的bootloader可以做到这一点)? – nsilent22