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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to