[OpenWrt-Devel] [PATCH v4 1/4] mvebu: add squashfs image type to MMCProfile

Josua Mayer josua.mayer97 at gmail.com
Tue Jun 21 05:22:34 EDT 2016


Hi Andrej,

Many thanks to your last reply which I seem to have totally missed,
sorry about that.

Am 11.05.2016 um 21:31 schrieb Andrej Vlasic:
> 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.mayer97 at gmail.com wrote:
>>>> From: Josua Mayer <josua.mayer97 at 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.mayer97 at 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.
You are right. For simplicity I could just check if the u-boot binary
exists.
Another solution is to introduce a special value, say '-' and call it
with that from the Makefile if u-boot was not selected.
> 
>>> 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.
Is it really easier?
My liking for this additional layer is very low though. I would much
rather see support in fstools to use the device node as an identifier of
the overlay partition.
However, there might be another solution: GPT and partition names. Do
you think this would be an option for mvebu?
>>
>> 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 at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list