summaryrefslogtreecommitdiff
path: root/mk/image.mk
diff options
context:
space:
mode:
authorPhil Sutter <phil.sutter@viprinet.com>2012-01-12 19:36:37 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2012-01-15 11:23:46 +0100
commit6e06191abda82fa771eeec309cb529c1dad26cef (patch)
tree926246a398f4a63559e69482adf4f21eff1a66fd /mk/image.mk
parent51a0c4d0d98e758c9e7d4d06f2580d8e92ed3caf (diff)
mk/image.mk: improve and simplify initramfs generation
Using the kernel tools is a lot better than calling cpio ourselfs, as this way we can have it create device nodes for us. So no need to reopen /dev/console and things like that. While here, fix also initramfs compression (untested), as in my experience the kernel drops all symbols regarding compression from it's .config in the first compile phase. Probably one should make the actual compression algorithm configurable (and ideally depending on what the kernel supports for the given architecture). This is a rough hack based on what I'm using in the custom viprinux build file, so something like this is already running somewhere. ;)
Diffstat (limited to 'mk/image.mk')
-rw-r--r--mk/image.mk43
1 files changed, 25 insertions, 18 deletions
diff --git a/mk/image.mk b/mk/image.mk
index e6dd06a82..4ea8ab235 100644
--- a/mk/image.mk
+++ b/mk/image.mk
@@ -71,14 +71,12 @@ INITRAMFS= ${ADK_TARGET_SYSTEM}-$(CPU_ARCH)-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}
ROOTFSSQUASHFS= ${ADK_TARGET_SYSTEM}-$(CPU_ARCH)-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.img
ROOTFSTARBALL= ${ADK_TARGET_SYSTEM}-$(CPU_ARCH)-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}+kernel.tar.gz
ROOTFSUSERTARBALL= ${ADK_TARGET_SYSTEM}-$(CPU_ARCH)-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.tar.gz
-INITRAMFS_PIGGYBACK= ${ADK_TARGET_SYSTEM}-$(CPU_ARCH)-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.cpio
else
TARGET_KERNEL= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_FS}-kernel
INITRAMFS= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}
ROOTFSSQUASHFS= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.img
ROOTFSTARBALL= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}+kernel.tar.gz
ROOTFSUSERTARBALL= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.tar.gz
-INITRAMFS_PIGGYBACK= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_LIBC}-${ADK_TARGET_FS}.cpio
endif
${BIN_DIR}/${ROOTFSTARBALL}: ${TARGET_DIR} kernel-package
@@ -91,29 +89,38 @@ ${BIN_DIR}/${ROOTFSUSERTARBALL}: ${TARGET_DIR}
sed "s#\(.*\)#:0:0::::::\1#" | sort | \
${TOOLS_DIR}/cpio -o -Hustar -P | gzip -n9 >$@
-${BIN_DIR}/${INITRAMFS}: ${TARGET_DIR}
- cd ${TARGET_DIR}; find . | sed -n '/^\.\//s///p' | \
- sed "s#\(.*\)#:0:0::::::\1#" | sort | \
- ${TOOLS_DIR}/cpio -o -C512 -Hnewc -P | \
- xz -C crc32 >$@ 2>/dev/null
+${BIN_DIR}/${INITRAMFS}_list: ${TARGET_DIR}
+ sh ${LINUX_DIR}/scripts/gen_initramfs_list.sh -u squash -g squash \
+ ${TARGET_DIR}/ >$@
+ ( \
+ echo "nod /dev/console 0644 0 0 c 5 1"; \
+ echo "nod /dev/tty 0644 0 0 c 5 0"; \
+ for i in 0 1 2 3 4; do \
+ echo "nod /dev/tty$$i 0644 0 0 c 4 $i"; \
+ done \
+ echo "nod /dev/systty 0644 0 0 c 4 0"; \
+ echo "nod /dev/null 0644 0 0 c 1 3"; \
+ echo "nod /dev/ram 0655 0 0 b 1 1"; \
+ ) >>$@
-${BUILD_DIR}/${INITRAMFS_PIGGYBACK}: ${TARGET_DIR}
- ${SED} 's/.*CONFIG_(BLK_DEV_INITRD|INITRAMFS_SOURCE).*//' \
- ${LINUX_DIR}/.config
- echo "CONFIG_BLK_DEV_INITRD=y" >> ${LINUX_DIR}/.config
- echo 'CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"' >> \
- ${LINUX_DIR}/.config
- cp $(TOPDIR)/scripts/dev.cpio $@
- cd ${TARGET_DIR}; find . | sed -n '/^\.\//s///p' | \
- sed "s#\(.*\)#:0:0::::::\1#" | sort | \
- ${TOOLS_DIR}/cpio -o -C512 -Hnewc -A -P -O $@ 2>/dev/null
+${BIN_DIR}/${INITRAMFS}: ${BIN_DIR}/${INITRAMFS}_list
+ sh ${LINUX_DIR}/usr/gen_init_cpio ${BIN_DIR}/${INITRAMFS}_list | \
+ gzip -9 -c >$@
${BUILD_DIR}/root.squashfs: ${TARGET_DIR}
${STAGING_HOST_DIR}/bin/mksquashfs ${TARGET_DIR} \
${BUILD_DIR}/root.squashfs \
-nopad -noappend -root-owned $(MAKE_TRACE)
-createinitramfs:
+createinitramfs: ${BIN_DIR}/${INITRAMFS}_list
+ ${SED} 's/.*CONFIG_(BLK_DEV_INITRD|INITRAMFS_SOURCE).*//' \
+ ${LINUX_DIR}/.config
+ ( \
+ echo "CONFIG_BLK_DEV_INITRD=y"; \
+ echo 'CONFIG_INITRAMFS_SOURCE="${BIN_DIR}/${INITRAMFS}_list"'; \
+ echo "CONFIG_INITRAMFS_COMPRESSION_GZIP=y"; \
+ ) >> ${LINUX_DIR}/.config
+
@-rm $(LINUX_DIR)/usr/initramfs_data.cpio* $(MAKE_TRACE)
echo N | \
$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \