[Buildroot] [PATCH v2 2/3] package/mkrawimg: new package
Karoly Kasza
kaszak at gmail.com
Tue Dec 9 16:03:26 UTC 2014
mkrawimg is a helper script like mke2img.
It a host package, useful to build a complete raw disk image,
with grub in the MBR and one ext* partition.
Creates a bootable raw disk image as a new rootfs image.
Boots in QEMU or on bare metal after written (dd) to disk.
Signed-off-by: Karoly Kasza <kaszak at gmail.com>
---
Changes v1 -> v2:
- Created a new package from the script in v1.
- Fdisk now specifies head and sector.
- Sector size of ext* image is calculated properly.
package/Config.in.host | 1 +
package/mkrawimg/Config.in.host | 13 +++++++++++++
package/mkrawimg/mkrawimg | 38 ++++++++++++++++++++++++++++++++++++++
package/mkrawimg/mkrawimg.mk | 14 ++++++++++++++
4 files changed, 66 insertions(+)
create mode 100644 package/mkrawimg/Config.in.host
create mode 100755 package/mkrawimg/mkrawimg
create mode 100644 package/mkrawimg/mkrawimg.mk
diff --git a/package/Config.in.host b/package/Config.in.host
index 0b7bc36..4fa58f8 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -11,6 +11,7 @@ menu "Host utilities"
source "package/genpart/Config.in.host"
source "package/lpc3250loader/Config.in.host"
source "package/mke2img/Config.in.host"
+ source "package/mkrawimg/Config.in.host"
source "package/mtd/Config.in.host"
source "package/mtools/Config.in.host"
source "package/omap-u-boot-utils/Config.in.host"
diff --git a/package/mkrawimg/Config.in.host b/package/mkrawimg/Config.in.host
new file mode 100644
index 0000000..f5083b4
--- /dev/null
+++ b/package/mkrawimg/Config.in.host
@@ -0,0 +1,12 @@
+config BR2_PACKAGE_HOST_MKRAWIMG
+ bool "host mkrawimg"
+ select BR2_TARGET_GRUB
+ select BR2_TARGET_GRUB_FS_EXT2
+ select BR2_PACKAGE_HOST_UTIL_LINUX
+ select BR2_PACKAGE_HOST_UTIL_LINUX_FDISK
+ help
+ Easily create raw disk images.
+
+ This tool is bundled by, and specific to Buildroot.
+ It does not make much sense, to use it without
+ the "raw disk image" rootfs target.
diff --git a/package/mkrawimg/mkrawimg b/package/mkrawimg/mkrawimg
new file mode 100755
index 0000000..dcc5d06
--- /dev/null
+++ b/package/mkrawimg/mkrawimg
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Buildroot tool to generate bootable raw disk image
+# GRUB in MBR, boot first primary partition (ext*)
+
+set -e
+
+BINARIES_DIR="$1"
+OUTPUT_IMG="$2"
+# Size of generated ext* fs in sectors
+SECTORS=`fdisk -l $BINARIES_DIR/rootfs.ext2 | grep $BINARIES_DIR/rootfs.ext2 | cut -d" " -f7`
+# Size of image with MBR and partition table (512 block size with fdisk image file)
+SECTOR_COUNT=$(($SECTORS+2048))
+
+# Create an empty file, final size
+dd if=/dev/zero of=$OUTPUT_IMG bs=512 count=$SECTOR_COUNT 2>/dev/null
+
+# Create a partition table - call our own fdisk in $PATH from host-util-linux
+fdisk -H 16 -S 63 $OUTPUT_IMG >/dev/null 2>/dev/null <<EOB
+n
+p
+1
+
+
+w
+EOB
+
+# Write the rootfs to the 1st partition
+dd if=$BINARIES_DIR/rootfs.ext2 of=$OUTPUT_IMG conv=notrunc bs=512 iflag=fullblock seek=2048 skip=0 2>/dev/null
+
+# Write MBR, grub is also called from $PATH
+grub --no-floppy --batch >/dev/null 2>/dev/null <<EOB
+device (hd0) $OUTPUT_IMG
+geometry (hd0)
+root (hd0,0)
+setup (hd0)
+quit
+EOB
diff --git a/package/mkrawimg/mkrawimg.mk b/package/mkrawimg/mkrawimg.mk
new file mode 100644
index 0000000..858db79
--- /dev/null
+++ b/package/mkrawimg/mkrawimg.mk
@@ -0,0 +1,14 @@
+################################################################################
+#
+# mkrawimg
+#
+################################################################################
+
+HOST_MKRAWIMG_SOURCE =
+HOST_MKRAWIMG_DEPENDENCIES = host-util-linux grub
+
+define HOST_MKRAWIMG_INSTALL_CMDS
+ $(INSTALL) -D -m 0755 package/mkrawimg/mkrawimg $(HOST_DIR)/usr/bin/mkrawimg
+endef
+
+$(eval $(host-generic-package))
--
1.7.10.4
More information about the buildroot
mailing list