Signed-off-by: Álvaro Fernández Rojas <nolt...@gmail.com> --- target/linux/brcm2708/config-3.18 | 1 + target/linux/brcm2708/image/Config.in | 13 +- target/linux/brcm2708/image/Makefile | 32 ++++- target/linux/brcm2708/image/create_sdcard.sh | 191 +++++++++++++++++++++++++++ 4 files changed, 235 insertions(+), 2 deletions(-) create mode 100755 target/linux/brcm2708/image/create_sdcard.sh
diff --git a/target/linux/brcm2708/config-3.18 b/target/linux/brcm2708/config-3.18 index 873a0f6..d700210 100644 --- a/target/linux/brcm2708/config-3.18 +++ b/target/linux/brcm2708/config-3.18 @@ -258,6 +258,7 @@ CONFIG_USB_UAS=y CONFIG_USB_USBNET=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_VFP=y +# CONFIG_VIDEO_BCM2835 is not set # CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_3G is not set CONFIG_VT=y diff --git a/target/linux/brcm2708/image/Config.in b/target/linux/brcm2708/image/Config.in index f7abd9d..b6aea19 100644 --- a/target/linux/brcm2708/image/Config.in +++ b/target/linux/brcm2708/image/Config.in @@ -1,5 +1,16 @@ +config BRCM2708_BOOTFS_TGZ + bool "Build a compressed tar archive of the boot filesystem." + depends on TARGET_brcm2708 + default y + +config BRCM2708_SD_SCRIPT + bool "Include SD creation script" + depends on TARGET_brcm2708 + select BRCM2708_BOOTFS_TGZ + select TARGET_ROOTFS_TARGZ + default y + config BRCM2708_SD_BOOT_PARTSIZE int "Boot (SD Card) filesystem partition size (in MB)" depends on TARGET_brcm2708 default 20 - diff --git a/target/linux/brcm2708/image/Makefile b/target/linux/brcm2708/image/Makefile index ae977a6..56e6f48 100644 --- a/target/linux/brcm2708/image/Makefile +++ b/target/linux/brcm2708/image/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2012 OpenWrt.org +# Copyright (C) 2012-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -28,6 +28,36 @@ define Image/Build/RaspberryPi mcopy -i $(KDIR)/boot.img $(KDIR)/Image ::kernel.img # Copy OpenWrt built kernel ./gen_rpi_sdcard_img.sh $(BIN_DIR)/$(IMG_PREFIX)-sdcard-vfat-$(1).img $(KDIR)/boot.img $(KDIR)/root.$(1) \ $(CONFIG_BRCM2708_SD_BOOT_PARTSIZE) $(CONFIG_TARGET_ROOTFS_PARTSIZE) + + ifeq ($(CONFIG_BRCM2708_BOOTFS_TGZ),y) + rm -rf $(BUILD_DIR)/brcm2708-bootfs + mkdir -p $(BUILD_DIR)/brcm2708-bootfs + + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/bootcode.bin $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/COPYING.linux $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/LICENCE.broadcom $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/start.elf $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/start_cd.elf $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/fixup.dat $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(BUILD_DIR)/brcm2708-gpu-fw-boot/fixup_cd.dat $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) cmdline.txt $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) config.txt $(BUILD_DIR)/brcm2708-bootfs/ + $(CP) $(KDIR)/Image $(BUILD_DIR)/brcm2708-bootfs/kernel.img + + $(TAR) -czpf $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-bootfs.tar.gz --numeric-owner --owner=0 --group=0 -C $(BUILD_DIR)/brcm2708-bootfs/ . + endif + + ifeq ($(CONFIG_BRCM2708_SD_SCRIPT),y) + $(CP) create_sdcard.sh $(BIN_DIR) + + rm -f $(BIN_DIR)/config_sdcard + touch $(BIN_DIR)/config_sdcard + echo -e "BOOT_SIZE=$(CONFIG_BRCM2708_SD_BOOT_PARTSIZE)" >> $(BIN_DIR)/config_sdcard + echo -e "BOOTFS_FILE=$(IMG_PREFIX)-$(PROFILE)-bootfs.tar.gz" >> $(BIN_DIR)/config_sdcard + echo -e "ROOTFS_FILE=$(IMG_PREFIX)-$(PROFILE)-rootfs.tar.gz" >> $(BIN_DIR)/config_sdcard + + $(TAR) -zcvf $(BIN_DIR)/$(IMG_PREFIX)-createsd.tar.gz -C $(BIN_DIR)/ $(IMG_PREFIX)-$(PROFILE)-bootfs.tar.gz $(IMG_PREFIX)-$(PROFILE)-rootfs.tar.gz config_sdcard create_sdcard.sh + endif endef define Image/Build diff --git a/target/linux/brcm2708/image/create_sdcard.sh b/target/linux/brcm2708/image/create_sdcard.sh new file mode 100755 index 0000000..93eb5fa --- /dev/null +++ b/target/linux/brcm2708/image/create_sdcard.sh @@ -0,0 +1,191 @@ +#!/bin/sh + +. ./config_sdcard + +################################################################################ +# Based on OpenELEC create_sdcard - http://www.openelec.tv +# Copyright (C) 2009-2014 Stephan Raue (step...@openelec.tv) +# Copyright (C) 2015 Álvaro Fernández Rojas (nolt...@gmail.com) +################################################################################ + +# usage: sudo ./create_sdcard <drive> +# example: sudo ./create_sdcard /dev/sdb + +if [ "$(id -u)" != "0" ]; then + clear + echo "#########################################################" + echo "# please execute with 'sudo' or -DANGEROUS!!!- as root #" + echo "# example: sudo ./create_sdcard <drive> #" + echo "#########################################################" + exit 1 +fi + +if [ -z "$1" ]; then + clear + echo "#########################################################" + echo "# please execute with your drive as option #" + echo "# example: sudo ./create_sdcard /dev/sdb #" + echo "# or: sudo ./create_sdcard /dev/mmcblk0 #" + echo "#########################################################" + exit 1 +fi + +DISK="$1" +case $DISK in + "/dev/mmcblk"*) + PART1="${DISK}p1" + PART2="${DISK}p2" + ;; + *) + PART1="${DISK}1" + PART2="${DISK}2" + ;; +esac + +clear +echo "#########################################################" +echo "# #" +echo "# OpenWRT SD Installer #" +echo "# #" +echo "#########################################################" +echo "# #" +echo "# This will wipe any data off your chosen drive #" +echo "# Please read the instructions and use very carefully.. #" +echo "# #" +echo "#########################################################" + +# check for some required tools + + # this is needed to partion the drive + which parted > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenWRT missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"parted\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to format the drive + which mkfs.vfat > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenWRT missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"mkfs.vfat\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to format the drive + which mkfs.ext4 > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenWRT missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"mkfs.ext4\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to tell the kernel for partition changes + which partprobe > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenWRT missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"partprobe\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + +# (TODO) umount everything (if more than one partition) + umount ${DISK}* + +# remove all partitions from the drive + echo "writing new disklabel on $DISK (removing all partitions)..." + parted -s "$DISK" mklabel msdos + +# create a single partition + echo "creating partitions on $DISK..." + parted -s "$DISK" mkpart primary fat32 -- 0 ${BOOT_SIZE}MiB +# align the partition on 4mb boundary + parted -s "$DISK" mkpart primary ext2 -- $(($BOOT_SIZE + 4))MiB -2cyl + +# make partition active (bootable) + echo "marking partition active..." + parted -s "$DISK" set 1 boot on + +# tell kernel we have a new partition table + echo "telling kernel we have a new partition table..." + partprobe "$DISK" + +# create filesystem + echo "creating filesystem on $PART1..." + mkfs.vfat "$PART1" -I -n boot + +# create ext4 partition with optimized settings for running on flash/sd +# See http://blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card/ for reference. + echo "creating filesystem on $PART2..." + mkfs.ext4 -O ^has_journal -E stride=2,stripe-width=1024 -b 4096 "$PART2" -L rootfs + +# mount partitions + MNT_BOOT=/tmp/openwrt_boot + MNT_ROOTFS=/tmp/openwrt_rootfs + + echo "mounting partition $PART1 on $MNT_BOOT..." + rm -rf $MNT_BOOT + mkdir -p $MNT_BOOT + mount -t vfat "$PART1" $MNT_BOOT + + echo "mounting partition $PART2 on $MNT_ROOTFS..." + rm -rf $MNT_ROOTFS + mkdir -p $MNT_ROOTFS + mount -t ext4 "$PART2" $MNT_ROOTFS + +# copy boot files + echo "copying bootloader files to $MNT_BOOT..." + tar -zxvf $BOOTFS_FILE -C $MNT_BOOT + +# copy rootfs files + echo "copying rootfs files to $MNT_ROOTFS..." + tar -zxvf $ROOTFS_FILE -C $MNT_ROOTFS + +# sync disk + echo "syncing disk..." + sync + +# unmount partitions + echo "unmounting partition $MNT_BOOT..." + umount $MNT_BOOT + + echo "unmounting partition $MNT_ROOTFS..." + umount $MNT_ROOTFS + +# cleaning + echo "cleaning tempdirs..." + rmdir $MNT_BOOT + rmdir $MNT_ROOTFS + +echo "...installation finished" -- 1.9.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel