Hi Josua,

On 06.05.2016 02:15, Josua Mayer wrote:
Hi Andrej,

First let me thank you for taking the time to review my proposals!

Am 06.05.2016 um 02:04 schrieb Andrej Vlasic:
Hi Josua,

On 04.05.2016 21:24, josua.maye...@gmail.com wrote:
From: Josua Mayer <josua.maye...@gmail.com>

Added gen_mvebu_sdcard_img.sh to create bootable sdcard images. It takes
the bootloader and partition images to create a bootable sdcard image.

Partition Layout:
p1: fat32: for kernel, dtb and boot config files if any
p2: squashfs: for openwrt

This change is developed for the Clearfog, but should work on all A38x
SoCs that can boot from mmc.

Signed-off-by: Josua Mayer <josua.maye...@gmail.com>
---
 target/linux/mvebu/image/Makefile                |  16 ++++
 target/linux/mvebu/image/gen_mvebu_sdcard_img.sh | 100
+++++++++++++++++++++++
 tools/Makefile                                   |   1 +
 3 files changed, 117 insertions(+)
 create mode 100755 target/linux/mvebu/image/gen_mvebu_sdcard_img.sh

diff --git a/target/linux/mvebu/image/Makefile
b/target/linux/mvebu/image/Makefile
index cb73c3b..fc5fded 100644
--- a/target/linux/mvebu/image/Makefile
+++ b/target/linux/mvebu/image/Makefile
@@ -107,6 +107,9 @@ define MMCProfile
     ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
     $(call Image/Build/Profile,$(1)/Initramfs)
     endif
+    ifneq ($(CONFIG_TARGET_ROOTFS_SQUASHFS),)
+    $(call Image/Build/squashfs)
+    endif
   endef

   define Image/Build/Profile/$(1)/Initramfs
@@ -114,6 +117,19 @@ define MMCProfile
     cp $(KDIR)/uImage-initramfs-$(2)
$(BIN_DIR)/$(IMG_PREFIX)-$(2)-initramfs
   endef

+  define Image/Build/Profile/$(1)/squashfs
+    $(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
+    cp $(KDIR)/root.squashfs $(BIN_DIR)/$(IMG_PREFIX)-$(2)-root.squashfs
+    rm -f $(BIN_DIR)/$(IMG_PREFIX)-$(2)-boot.fat32
+    mkfs.fat -C $(BIN_DIR)/$(IMG_PREFIX)-$(2)-boot.fat32 $(shell echo
$$((4*1024)) # 4MB)
+    mcopy -i $(BIN_DIR)/$(IMG_PREFIX)-$(2)-boot.fat32 $(KDIR)/zImage ::
+    mcopy -i $(BIN_DIR)/$(IMG_PREFIX)-$(2)-boot.fat32
$(DTS_DIR)/$(2).dtb ::
+    ./gen_mvebu_sdcard_img.sh
"$(BIN_DIR)/$(IMG_PREFIX)-$(2)-squashfs-sdcard.img" \
+
"$(BIN_DIR)/uboot-mvebu-clearfog/openwrt-mvebu-clearfog-u-boot-spl.kwb" \
+        c "$(BIN_DIR)/$(IMG_PREFIX)-$(2)-boot.fat32" \
+        83 "$(BIN_DIR)/$(IMG_PREFIX)-$(2)-root.squashfs"
+  endef
+

Image generation script here requires u-boot binary to exist, but what
if one doesn't select u-boot to be generated? It would be better to
That would certainly be a problem.
exclude it from generated sdcard image, it can be flashed anyway with dd
to beginning of the sd card.
While I agree that this would work, it does not give the one-click
solution I would like to build. Why burden people with using dd to flash
u-boot to some magic offset on sdcard?

Maybe we can add u-boot as a dependency so it is always built when
clearfog is selected?

You could modify script to check if u-boot is selected and than include it, otherwise user just needs to flash it with dd to the beginning of sd card.

Also one ext4 partition for boot and second one for rootfs would be
better than fat32 + squashfs on sdcard, both Marvell u-boot and
uboot-mvebu have support for loading kernel from ext4.
Very interesting you would argue on this part!
So I will just outline the reasons why I made this choice:
1) fat32
make it easier to edit boot files for Windows users too.
I think this will be very useful when somebody wants to supply bootargs
or try a different kernel, but is not familiar with using unix.

Ok.
2) squashfs
I like the read-only nature of squashfs. What I am working towards is a
system that feels like just any router out there. Factory wiping
involves just clearing the read-write part of storage, while firmware
updates replace the read-only parts.
If anyone messes up, they can just mkfs.ext4, or rm -rf * on the data
partition.

Also for that you can use block2mtd support with squashfs image, makes it easier for upgrades, factory reset, etc.

Please let me know if you agree or disagree here.

   PROFILES_LIST += $(1)
 endef

diff --git a/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh
b/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh
new file mode 100755
index 0000000..88d017a
--- /dev/null
+++ b/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh
@@ -0,0 +1,100 @@
+#!/bin/bash -x
+#
+# Copyright (C) 2016 Josua Mayer
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
+#
+
+usage() {
+    echo "$0 <outfile> <bootloader> [<type_partitionN>
<img_partitionN>]?"
+}
+
+# always require first 2 arguments
+# then in pairs up to 8 more for a total of up to 4 partitions
+if [ $# -lt 2 ] || [ $# -gt 10 ] || [ $((($#-2)%2)) -ne 0 ]; then
+    usage
+    exit 1
+fi
+
+# static settings
+SDCARD_HEADS=16
+SDCARD_SECTORS=63
+SDCARD_ALIGNMENT=4096
+
+# parameters
+OUTFILE="$1"
+BOOTLOADER="$2"
+# up to 4 partitions
+# when calculating size of images in Kilobytes, NEVER round down!
+PART1_TYPE=$3
+PART1_IMG="$4"
+PART1_SIZE=$((($(stat --print="%s" "$PART1_IMG")+1023)/1024))K
+PART2_TYPE=$5
+PART2_IMG="$6"
+PART2_SIZE=$((($(stat --print="%s" "$PART2_IMG")+1023)/1024))K
+PART3_TYPE=$7
+PART3_IMG="$8"
+PART3_SIZE=$((($(stat --print="%s" "$PART3_IMG")+1023)/1024))K
+PART4_TYPE=$9
+PART4_IMG="${10}"
+PART4_SIZE=$((($(stat --print="%s" "$PART4_IMG")+1023)/1024))K
+
+# So how many partitions were given?
+numparts=$((($#-2)/2))
+case $numparts in
+    0)
+        set `ptgen -o "$OUTFILE" \
+            -h $SDCARD_HEADS -s $SDCARD_SECTORS -l $SDCARD_ALIGNMENT`
+            dd of="$OUTFILE" if="$BOOTLOADER" bs=512 seek=1 conv=notrunc
+        ;;
+    1)
+        set `ptgen -o "$OUTFILE" \
+            -h $SDCARD_HEADS -s $SDCARD_SECTORS -l $SDCARD_ALIGNMENT \
+            -t $PART1_TYPE -p $PART1_SIZE`
+        dd of="$OUTFILE" if="$PART1_IMG" bs=512 seek=$(($1/512))
conv=notrunc
+        ;;
+    2)
+        set `ptgen -o "$OUTFILE" \
+            -h $SDCARD_HEADS -s $SDCARD_SECTORS -l $SDCARD_ALIGNMENT \
+            -t $PART1_TYPE -p $PART1_SIZE \
+            -t $PART2_TYPE -p $PART2_SIZE`
+            dd of="$OUTFILE" if="$BOOTLOADER" bs=512 seek=1 conv=notrunc
+            dd of="$OUTFILE" if="$PART1_IMG" bs=512 seek=$(($1/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART2_IMG" bs=512 seek=$(($2/512))
conv=notrunc
+        ;;
+    3)
+        set `ptgen -o "$OUTFILE" \
+            -h $SDCARD_HEADS -s $SDCARD_SECTORS -l $SDCARD_ALIGNMENT \
+            -t $PART1_TYPE -p $PART1_SIZE \
+            -t $PART2_TYPE -p $PART2_SIZE \
+            -t $PART3_TYPE -p $PART3_SIZE`
+            dd of="$OUTFILE" if="$BOOTLOADER" bs=512 seek=1 conv=notrunc
+            dd of="$OUTFILE" if="$PART1_IMG" bs=512 seek=$(($1/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART2_IMG" bs=512 seek=$(($2/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART3_IMG" bs=512 seek=$(($3/512))
conv=notrunc
+        ;;
+    4)
+        set `ptgen -o "$OUTFILE" \
+            -h $SDCARD_HEADS -s $SDCARD_SECTORS -l $SDCARD_ALIGNMENT \
+            -t $PART1_TYPE -p $PART1_SIZE \
+            -t $PART2_TYPE -p $PART2_SIZE \
+            -t $PART3_TYPE -p $PART3_SIZE \
+            -t $PART4_TYPE -p $PART4_SIZE`
+            dd of="$OUTFILE" if="$BOOTLOADER" bs=512 seek=1 conv=notrunc
+            dd of="$OUTFILE" if="$PART1_IMG" bs=512 seek=$(($1/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART2_IMG" bs=512 seek=$(($2/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART3_IMG" bs=512 seek=$(($3/512))
conv=notrunc
+            dd of="$OUTFILE" if="$PART4_IMG" bs=512 seek=$(($4/512))
conv=notrunc
+esac
diff --git a/tools/Makefile b/tools/Makefile
index 187655e..9a08573 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -38,6 +38,7 @@ tools-$(CONFIG_TARGET_x86) += qemu
 tools-$(CONFIG_TARGET_mxs) += elftosb sdimage
 tools-$(CONFIG_TARGET_brcm2708)$(CONFIG_TARGET_sunxi)$(CONFIG_TARGET_mxs)
+= mtools dosfstools
 tools-$(CONFIG_TARGET_ar71xx) += lzma-old squashfs
+tools-$(CONFIG_TARGET_mvebu) += squashfs dosfstools
 tools-y += lzma squashfs4
 tools-$(BUILD_B43_TOOLS) += b43-tools
 tools-$(BUILD_PPL_CLOOG) += ppl cloog

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

Reply via email to