From c72b1d8468b027f6d42eacfd741e288f552bc27d Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Fri, 15 Feb 2019 17:02:23 +0100 Subject: [PATCH] gemini: Generate harddisk image for DNS-313 This makes OpenWrt build an Ext2+Ext4 partitioned image for the D-Link DNS-313 with two blank partitions, a boot partition on /dev/sda3 and a rootfs partition on /dev/sda4. This uses the methods already used in apm821xx including the tricks to convert the generated Ext2 filesystem partition to version 1 so that the firmware bootloader will properly recognize it. We patch a bit around the build files to make sure we get the rootfs size set and that genext2fs is properly built. Tested on the D-Link DNS-313. Signed-off-by: Christian Lamparter [Fixing and tricksing] Signed-off-by: Linus Walleij --- target/linux/gemini/Makefile | 2 +- target/linux/gemini/image/Makefile | 27 ++++++++++++++---- .../linux/gemini/image/dns313_gen_hdd_img.sh | 28 +++++++++++++++++++ tools/Makefile | 2 +- 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100755 target/linux/gemini/image/dns313_gen_hdd_img.sh diff --git a/target/linux/gemini/Makefile b/target/linux/gemini/Makefile index 7c573c7c6d..304e515980 100644 --- a/target/linux/gemini/Makefile +++ b/target/linux/gemini/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=arm BOARD:=gemini BOARDNAME:=Cortina Systems CS351x -FEATURES:=squashfs pci rtc usb dt gpio display +FEATURES:=squashfs pci rtc usb dt gpio display ext4 rootfs-part boot-part CPU_TYPE:=fa526 MAINTAINER:=Roman Yeryomin diff --git a/target/linux/gemini/image/Makefile b/target/linux/gemini/image/Makefile index a612cf706d..7fcac8051f 100644 --- a/target/linux/gemini/image/Makefile +++ b/target/linux/gemini/image/Makefile @@ -28,6 +28,7 @@ endef # the only real content. define Build/dns313-images mkdir -p $@.tmp/.boot + chmod 755 $@.tmp/.boot echo "dummy" > $@.tmp/dummyfile @@ -38,9 +39,20 @@ define Build/dns313-images dns313-header $(IMAGE_KERNEL) \ $@.tmp/.boot/zImage - tar --sort=name --owner=0 --group=0 --numeric-owner -czf $@ \ - -C $@.tmp .boot \ - $(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") + rm $@.tmp/dummyfile + + genext2fs --block-size $(BLOCKSIZE:%k=%Ki) \ + --size-in-blocks $$((1024 * $(CONFIG_TARGET_KERNEL_PARTSIZE))) \ + --squash-uids \ + --root $@.tmp $@.tmp-boot + + # The device firmware needs revision 1 of EXT2 + tune2fs -O filetype $@.tmp-boot + e2fsck -pDf $@.tmp-boot > /dev/null + + ./dns313_gen_hdd_img.sh $@ $@.tmp-boot $(IMAGE_ROOTFS) \ + $(CONFIG_TARGET_KERNEL_PARTSIZE) \ + $(CONFIG_TARGET_ROOTFS_PARTSIZE) rm -rf $@.tmp endef @@ -106,7 +118,8 @@ GEMINI_NAS_PACKAGES:=kmod-md-mod kmod-md-linear kmod-md-multipath \ kmod-fs-btrfs kmod-fs-cifs kmod-fs-nfs \ kmod-fs-nfsd kmod-fs-ntfs kmod-fs-reiserfs kmod-fs-vfat \ kmod-nls-utf8 kmod-usb-storage-extras \ - samba36-server mdadm cfdisk fdisk e2fsprogs badblocks + samba36-server mdadm cfdisk fdisk e2fsprogs badblocks \ + partx-utils define Device/dlink_dir-685 DEVICE_TITLE := D-Link DIR-685 Xtreme N Storage Router @@ -123,8 +136,10 @@ define Device/dlink_dns-313 DEVICE_TITLE := D-Link DNS-313 1-Bay Network Storage Enclosure DEVICE_DTS := gemini-dlink-dns-313 DEVICE_PACKAGES := $(GEMINI_NAS_PACKAGES) - IMAGES := bootpart.tar.gz - IMAGE/bootpart.tar.gz := dns313-images + BLOCKSIZE := 1k + FILESYSTEMS := ext4 + IMAGES := factory.bin.gz + IMAGE/factory.bin.gz := dns313-images | gzip endef TARGET_DEVICES += dlink_dns-313 diff --git a/target/linux/gemini/image/dns313_gen_hdd_img.sh b/target/linux/gemini/image/dns313_gen_hdd_img.sh new file mode 100755 index 0000000000..1eb2c7c575 --- /dev/null +++ b/target/linux/gemini/image/dns313_gen_hdd_img.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +set -x +[ $# -eq 5 ] || { + echo "SYNTAX: $0 " + exit 1 +} + +OUTPUT="$1" +BOOTFS="$2" +ROOTFS="$3" +BOOTFSSIZE="$4" +ROOTFSSIZE="$5" + +head=4 +sect=63 + +# Create two empty partitions followed by the boot partition with +# the ./boot/zImage and then the rootfs partition. +set `ptgen -o $OUTPUT -h $head -s $sect -t 83 -n -p 0 -p 0 -p ${BOOTFSSIZE}M -p ${ROOTFSSIZE}M` + +BOOTOFFSET="$(($1 / 512))" +BOOTSIZE="$(($2 / 512))" +ROOTFSOFFSET="$(($3 / 512))" +ROOTFSSIZE="$(($4 / 512))" + +dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc +dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc diff --git a/tools/Makefile b/tools/Makefile index cacba5bcb4..0123a759c8 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -37,7 +37,7 @@ tools-y += lzma squashfs4 zip tools-$(BUILD_B43_TOOLS) += b43-tools tools-$(BUILD_ISL) += isl tools-$(CONFIG_USE_SPARSE) += sparse -tools-$(CONFIG_TARGET_apm821xx) += genext2fs +tools-$(CONFIG_TARGET_apm821xx)$(CONFIG_TARGET_gemini) += genext2fs # builddir dependencies $(curdir)/bison/compile := $(curdir)/flex/compile -- 2.25.1