At first I was offended by the fact that my recently-added TARGET_ROOTFS_RESERVED_PCT option only affected the *root* partition, and not the boot partition. So I added '-m 0' unconditionally to the genext2fs invocation which creates the boot partition.
But then I was offended by the *existence* of the boot partition, which is entirely pointless when both it and the rootfs are ext4. So I had a go at fixing that... Does this seem reasonable? From 458d58b0ca667a28085657416fb1f0b9dedcb85a Mon Sep 17 00:00:00 2001 From: David Woodhouse <david.woodho...@intel.com> Date: Mon, 3 Dec 2012 01:12:32 +0000 Subject: [PATCH] Use a single partition for ext4, rather than separate boot filesystem Signed-off-by: David Woodhouse <david.woodho...@intel.com> --- include/image.mk | 12 ++++++++++++ target/linux/x86/image/Config.in | 16 ++++++++-------- target/linux/x86/image/Makefile | 18 +++++++++++++----- target/linux/x86/image/gen_image_generic.sh | 2 +- target/linux/x86/image/gen_image_onepart.sh | 27 +++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 14 deletions(-) create mode 100755 target/linux/x86/image/gen_image_onepart.sh diff --git a/include/image.mk b/include/image.mk index 503115d..82af23a 100644 --- a/include/image.mk +++ b/include/image.mk @@ -122,7 +122,19 @@ endif ifneq ($(CONFIG_TARGET_ROOTFS_EXT4FS),) E2SIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_PARTSIZE)*1024))) + define generate_ext4_fs +# generate an ext2 fs + $(STAGING_DIR_HOST)/bin/genext2fs -U -b $(E2SIZE) -N $(CONFIG_TARGET_ROOTFS_MAXINODE) -d $(TARGET_DIR)/ $(KDIR)/$(1).ext4 -m $(CONFIG_TARGET_ROOTFS_RESERVED_PCT) $(2) +# convert it to ext4 + $(STAGING_DIR_HOST)/bin/tune2fs -O extents,uninit_bg,dir_index $(KDIR)/$(1).ext4 +# fix it up + $(STAGING_DIR_HOST)/bin/e2fsck -fy $(KDIR)/$(1).ext4 + endef + define Image/mkfs/ext4 + $(call generate_ext4_fs,root,) + $(call Image/Build,ext4) + # generate an ext2 fs $(STAGING_DIR_HOST)/bin/genext2fs -U -b $(E2SIZE) -N $(CONFIG_TARGET_ROOTFS_MAXINODE) -d $(TARGET_DIR)/ $(KDIR)/root.ext4 -m $(CONFIG_TARGET_ROOTFS_RESERVED_PCT) # convert it to ext4 diff --git a/target/linux/x86/image/Config.in b/target/linux/x86/image/Config.in index 9ced34c..8d7c7eb 100644 --- a/target/linux/x86/image/Config.in +++ b/target/linux/x86/image/Config.in @@ -87,15 +87,15 @@ config TARGET_IMAGES_GZIP config TARGET_KERNEL_PARTSIZE int "Kernel partition size (in MB)" - depends OLPC_BOOTSCRIPT_IMAGES || X86_GRUB_IMAGES + depends (OLPC_BOOTSCRIPT_IMAGES || X86_GRUB_IMAGES) && (TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS) default 4 -config TARGET_ROOTFS_PARTNAME - string "Root partition on target device" +config TARGET_ROOTFS_DEVNAME + string "Root device name on target" depends OLPC_BOOTSCRIPT_IMAGES || X86_GRUB_IMAGES - default "/dev/vda2" if TARGET_x86_kvm_guest - default "/dev/xvda2" if TARGET_x86_xen_domu - default "/dev/sda2" if ! (TARGET_x86_kvm_guest || TARGET_x86_xen_domu) + default "/dev/vda" if TARGET_x86_kvm_guest + default "/dev/xvda" if TARGET_x86_xen_domu + default "/dev/sda" if ! (TARGET_x86_kvm_guest || TARGET_x86_xen_domu) help - The root partition on the final device. If you don't know, - you probably want the default (/dev/sda2). + The root device (without partition number) on the final device. If you + don't know, you probably want the default (/dev/sda). diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index e317348..ed18c38 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -38,7 +38,7 @@ ifneq ($(GRUB_TERMINALS),) GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS) endif -ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME)) +ROOTDEV:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_DEVNAME)) GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_X86_GRUB_TIMEOUT)) @@ -47,19 +47,19 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),) BOOTOPTS:=$(call qstrip,$(CONFIG_X86_GRUB_BOOTOPTS)) define Image/cmdline/ext4 - root=$(ROOTPART) rootfstype=ext4 rootwait + root=$(ROOTDEV)1 rootfstype=ext4 rootwait endef define Image/cmdline/jffs2-64k - block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait + block2mtd.block2mtd=$(ROOTDEV)2,65536,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait endef define Image/cmdline/jffs2-128k - block2mtd.block2mtd=$(ROOTPART),131072,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait + block2mtd.block2mtd=$(ROOTDEV)2,131072,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait endef define Image/cmdline/squashfs - block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait + block2mtd.block2mtd=$(ROOTDEV)2,65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait endef define Image/Build/grub2 @@ -79,11 +79,19 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),) -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \ ./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg + ifeq ($(1),ext4) + $(call generate_ext4_fs,onepart,-d $(KDIR)/root.grub/) + PADDING="$(CONFIG_TARGET_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_onepart.sh \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/onepart.$(1) \ + 256 + else PADDING="$(CONFIG_TARGET_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_generic.sh \ $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ $(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \ $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \ 256 + endif grub-bios-setup \ --device-map="$(KDIR)/grub2/device.map" \ -d "$(KDIR)/grub2" \ diff --git a/target/linux/x86/image/gen_image_generic.sh b/target/linux/x86/image/gen_image_generic.sh index 9d11efb..24bb332 100755 --- a/target/linux/x86/image/gen_image_generic.sh +++ b/target/linux/x86/image/gen_image_generic.sh @@ -34,6 +34,6 @@ dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc [ -n "$NOGRUB" ] && exit 0 -genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" +genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" -m 0 dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc rm -f "$OUTPUT.kernel" diff --git a/target/linux/x86/image/gen_image_onepart.sh b/target/linux/x86/image/gen_image_onepart.sh new file mode 100755 index 0000000..2e7994c --- /dev/null +++ b/target/linux/x86/image/gen_image_onepart.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# Copyright (C) 2006-2012 OpenWrt.org + +[ $# == 3 -o $# == 4 ] || { + echo "SYNTAX: $0 <file> <rootfs size> <rootfs image> [<align>]" + exit 1 +} + +OUTPUT="$1" +ROOTFSSIZE="$2" +ROOTFSIMAGE="$3" +ALIGN="$4" + +rm -f "$OUTPUT" + +head=16 +sect=63 +cyl=$(( ($KERNELSIZE + $ROOTFSSIZE) * 1024 * 1024 / ($head * $sect * 512))) + +# create partition table +set `ptgen -o "$OUTPUT" -h $head -s $sect -p ${ROOTFSSIZE}m ${ALIGN:+-l $ALIGN}` + +ROOTFSOFFSET="$(($1 / 512))" +ROOTFSSIZE="$(($2 / 512))" + +[ -n "$PADDING" ] && dd if=/dev/zero of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc count="$ROOTFSSIZE" +dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc -- 1.7.7.6 -- dwmw2
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel