<div dir="ltr"><div><div><div>Hi, <br><br></div>I noticed we do not document INITRAMFS_MAXSIZE in the ref-manual.  Should we be?<br><br></div>Thanks,<br></div>Scott<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 25, 2016 at 12:45 AM, Robert Yang <span dir="ltr">&lt;<a href="mailto:liezhi.yang@windriver.com" target="_blank">liezhi.yang@windriver.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Usually, the initramfs&#39; maxsize can be 1/2 of ram size since modern<br>
kernel uses tmpfs as initramfs by dafault, and tmpfs allocates 1/2 of<br>
ram by default at boot time, which will be used to locate the initramfs.<br>
<br>
Set INITRAMFS_MAXSIZE to 131072K (128M) by default (ram 256M), the<br>
initramfs is small usually, for example, core-image-minimal-initramfs is<br>
about 21M (uncompressed, 17M * 1.3) by default, but if the user add a<br>
lot pkgs to initramfs, we can error and stop to let the user know ealier<br>
rather than fail to boot (e.g., OOM-killer) at boot time.<br>
<br>
Please see the bug for more info:<br>
<a href="https://bugzilla.yoctoproject.org/show_bug.cgi?id=5963" rel="noreferrer" target="_blank">https://bugzilla.yoctoproject.org/show_bug.cgi?id=5963</a><br>
<br>
[YOCTO #5963]<br>
<br>
Signed-off-by: Robert Yang &lt;<a href="mailto:liezhi.yang@windriver.com">liezhi.yang@windriver.com</a>&gt;<br>
---<br>
<span class=""> meta/classes/image.bbclass |   14 +++++++++++++-<br>
 meta/conf/bitbake.conf     |    6 ++++++<br>
 2 files changed, 19 insertions(+), 1 deletion(-)<br>
<br>
</span>diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass<br>
index 3870516..30d1173 100644<br>
--- a/meta/classes/image.bbclass<br>
+++ b/meta/classes/image.bbclass<br>
@@ -423,6 +423,9 @@ def get_rootfs_size(d):<br>
     rootfs_req_size = int(d.getVar(&#39;IMAGE_ROOTFS_SIZE&#39;, True))<br>
     rootfs_extra_space = eval(d.getVar(&#39;IMAGE_ROOTFS_EXTRA_SPACE&#39;, True))<br>
     rootfs_maxsize = d.getVar(&#39;IMAGE_ROOTFS_MAXSIZE&#39;, True)<br>
+    image_fstypes = d.getVar(&#39;IMAGE_FSTYPES&#39;, True) or &#39;&#39;<br>
+    initramfs_fstypes = d.getVar(&#39;INITRAMFS_FSTYPES&#39;, True) or &#39;&#39;<br>
+    initramfs_maxsize = d.getVar(&#39;INITRAMFS_MAXSIZE&#39;, True)<br>
<br>
     output = subprocess.check_output([&#39;du&#39;, &#39;-ks&#39;,<br>
                                       d.getVar(&#39;IMAGE_ROOTFS&#39;, True)])<br>
@@ -443,8 +446,17 @@ def get_rootfs_size(d):<br>
     if rootfs_maxsize:<br>
         rootfs_maxsize_int = int(rootfs_maxsize)<br>
         if base_size &gt; rootfs_maxsize_int:<br>
-            bb.fatal(&quot;The rootfs size %d(K) overrides the max size %d(K)&quot; % \<br>
+            bb.fatal(&quot;The rootfs size %d(K) overrides IMAGE_ROOTFS_MAXSIZE: %d(K)&quot; % \<br>
                 (base_size, rootfs_maxsize_int))<br>
+<br>
+    # Check the initramfs size against INITRAMFS_MAXSIZE (if set)<br>
+    if image_fstypes == initramfs_fstypes != &#39;&#39;  and initramfs_maxsize:<br>
+        initramfs_maxsize_int = int(initramfs_maxsize)<br>
+        if base_size &gt; initramfs_maxsize_int:<br>
+            bb.error(&quot;The initramfs size %d(K) overrides INITRAMFS_MAXSIZE: %d(K)&quot; % \<br>
+                (base_size, initramfs_maxsize_int))<br>
+            bb.error(&quot;You can set INITRAMFS_MAXSIZE a larger value. Usually, it should&quot;)<br>
+            bb.fatal(&quot;be less than 1/2 of ram size, or you may fail to boot it.\n&quot;)<br>
     return base_size<br>
<br>
 python set_image_size () {<br>
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf<br>
index 7451eb8..e80ee18 100644<br>
--- a/meta/conf/bitbake.conf<br>
+++ b/meta/conf/bitbake.conf<br>
@@ -712,7 +712,13 @@ require conf/sanity.conf<br>
 DL_DIR ?= &quot;${TOPDIR}/downloads&quot;<br>
 SSTATE_DIR ?= &quot;${TOPDIR}/sstate-cache&quot;<br>
 IMAGE_FSTYPES ?= &quot;tar.gz&quot;<br>
+<br>
 INITRAMFS_FSTYPES ?= &quot;cpio.gz&quot;<br>
+# The maximum size in Kbytes for the generated initramfs image size.<br>
+# Usually, it should be less than 1/2 of ram size, or you may fail to<br>
+# boot it.<br>
+INITRAMFS_MAXSIZE ??= &quot;131072&quot;<br>
+<br>
 DEFAULT_TASK_PROVIDER ?= &quot;packagegroup-base&quot;<br>
 MACHINE_TASK_PROVIDER ?= &quot;${DEFAULT_TASK_PROVIDER}&quot;<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
1.7.9.5<br>
<br>
--<br>
_______________________________________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>
<a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
</div></div></blockquote></div><br></div>