Message ID | 1488202681-9744-3-git-send-email-abhimanyu.vishwakarma@imgtec.com |
---|---|
State | Superseded |
Headers | show |
On 27-02-17 14:38, Abhimanyu V wrote: > From: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com> > > Also add post-build script to create fitImage which is used > by u-boot to boot the device. It also add post-image script > to generate sdcard.img for preparing sdcard/usb device > > Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com> > Reviewed-by: Rahul Bedarkar <Rahul.Bedarkar@imgtec.com> > --- > Changes v1->v2 > - No change > Changes v2->v3 (Suggested by Arnout) > - Remove uImage and add fitImage generation > - Tidy readme.txt > - Tidy ci40_defconfig, remove custom toolchain and add wifi helper packages > Some changes are not done: > - Using git-helper: > - Custom kernel doesnt provide tar file, so it didnt work for me Works for me: https://github.com/CreatorDev/linux/archive/openwrt-4.4.14/linux-openwrt-4.4.14.tar.gz > > board/ci40/create_fitImage.sh | 29 ++++++++++++++++++++++ > board/ci40/fitImage.its | 52 +++++++++++++++++++++++++++++++++++++++ > board/ci40/genimage.cfg | 13 ++++++++++ > board/ci40/post-image.sh | 15 ++++++++++++ > board/ci40/readme.txt | 57 +++++++++++++++++++++++++++++++++++++++++++ > configs/ci40_defconfig | 47 +++++++++++++++++++++++++++++++++++ > 6 files changed, 213 insertions(+) > create mode 100755 board/ci40/create_fitImage.sh > create mode 100644 board/ci40/fitImage.its > create mode 100644 board/ci40/genimage.cfg > create mode 100755 board/ci40/post-image.sh > create mode 100644 board/ci40/readme.txt > create mode 100644 configs/ci40_defconfig > > diff --git a/board/ci40/create_fitImage.sh b/board/ci40/create_fitImage.sh > new file mode 100755 > index 0000000..6ad9b3a > --- /dev/null > +++ b/board/ci40/create_fitImage.sh > @@ -0,0 +1,29 @@ > +#!/bin/sh > + > +# inputs > +BOARD_DIR="$(dirname $0)" > +FIT_ITS_FILE=$BOARD_DIR/fitImage.its Since this is a template file, call it fitImage.its.in > +MKIMAGE=$HOST_DIR/usr/bin/mkimage > +UIMAGE=$BINARIES_DIR/uImage > + > +#output > +MODIFIED_FIT_ITS=$BINARIES_DIR/fitImage.its > +FITIMAGE=$BINARIES_DIR/fitImage > + > +# Extract kernel load address and entry address from uImage > +load=0x$($MKIMAGE -l $UIMAGE | grep "Load Address: " | sed 's/Load Address: //g') > +entry=0x$($MKIMAGE -l $UIMAGE | grep "Entry Point: " | sed 's/Entry Point: //g') > + > +# Create a copy of fitImage.its file and replace these address in that file > +cp $FIT_ITS_FILE $MODIFIED_FIT_ITS > +sed -i "s/load = <0>;/load = <$load>;/1" $MODIFIED_FIT_ITS The /1 is a little useless, there is only one such statement in a line. Instead, I would anchor the expression at the end of the line. Also, it's nicer to use something clearly invalid in the template, e.g. load = <@load@>; This would also allow to make the substitution more generic, just replacing all occurences of @load@ instead of matching the specific line. > +sed -i "s/entry = <0>;/entry = <$entry>;/1" $MODIFIED_FIT_ITS Small nit: we generally prefer to do the manipulations while copying, i.e. sed -e "s/@load@/$load/g" \ -e "s/@entry@/$entry/g \ $FIT_ITS_FILE > $MODIFIED_FIT_ITS > + > +# copy vmlinux.bin.gz to output/images, it is used in .its file > +cp -a $LINUX_DIR/arch/mips/boot/vmlinux.bin.gz $BINARIES_DIR I could be mistaken, but isn't it possible to select BR2_LINUX_KERNEL_VMLINUX_BIN, then gzip the image which is already in $BINARIES_DIR? Of course it's not a perfect solution either because you can't extract $load and $entry from it... So forget about that idea. Another option is to ask your kernel developers to use a FIT image as the uImage in linux arch/mips/boot/Makefile. For now, however, your current solution is OK for Buildroot. > + > +# create fitImage > +$MKIMAGE -f $MODIFIED_FIT_ITS $FITIMAGE > + > +# copy to target > +cp -a $FITIMAGE $TARGET_DIR/fitImage Just to be sure I understand this correctly: U-Boot will look for a file called fitImage in the root directory of an ext2 filesystem on MMC/USB? I'm asking because usually it is either a FAT partition, or it looks in the /boot directory. > diff --git a/board/ci40/fitImage.its b/board/ci40/fitImage.its > new file mode 100644 > index 0000000..0812eb3 > --- /dev/null > +++ b/board/ci40/fitImage.its > @@ -0,0 +1,52 @@ > +/* > + * Description file for fitImage > + */ > + > +/dts-v1/; > + > +/ { > + description = "Buildroot CI40 FTD Image"; > + #address-cells = <1>; > + > + images { > + kernel@1 { > + description = "Linux kernel"; > + data = /incbin/("./vmlinux.bin.gz"); > + type = "kernel"; > + arch = "mips"; > + os = "linux"; > + compression = "gzip"; > + load = <0>; > + entry = <0>; > + hash@1 { > + algo = "crc32"; > + }; > + hash@2 { > + algo = "sha1"; > + }; > + }; > + marduk-fdt@1 { > + description = "CI40 Flattened Device Tree blob"; > + data = /incbin/("./pistachio_marduk.dtb"); Just an idea: perhaps the create_fitImage script could take the DTB as an argument as well, or use the first DTB found in $BINARIES_DIR. > + type = "flat_dt"; > + arch = "mips"; > + compression = "none"; > + hash@1 { > + algo = "crc32"; > + }; > + hash@2 { > + algo = "sha1"; > + }; > + }; > + }; > + > + configurations { > + default = "config@1"; > + config@1 { > + description = "CI40 dtb"; > + kernel = "kernel@1"; > + fdt = "marduk-fdt@1"; > + }; > + }; > +}; > + > diff --git a/board/ci40/genimage.cfg b/board/ci40/genimage.cfg > new file mode 100644 > index 0000000..8b4303a > --- /dev/null > +++ b/board/ci40/genimage.cfg > @@ -0,0 +1,13 @@ > +# Minimal SD card image > +# > + > +image sdcard.img { > + hdimage { > + } > + > + partition rootfs { > + partition-type = 0x83 > + image = "rootfs.ext4" > + size = 256M # Maximum firmware size in partition is 268M There is no need to specify the size. The filesystem size will anyway be whatever it was created as. The size you specify here is the partition size. But the difference between filesystem size and partition size will anyway not be useable until you do a resize2fs. So I think it's easier to leave the size open. > + } > +} > diff --git a/board/ci40/post-image.sh b/board/ci40/post-image.sh > new file mode 100755 > index 0000000..18e76aa > --- /dev/null > +++ b/board/ci40/post-image.sh > @@ -0,0 +1,15 @@ > +#!/usr/bin/env bash > + > +BOARD_DIR="$(dirname $0)" > +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" > +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" > + > +rm -rf "${GENIMAGE_TMP}" > + > +genimage \ > + --rootpath "${TARGET_DIR}" \ > + --tmppath "${GENIMAGE_TMP}" \ > + --inputpath "${BINARIES_DIR}" \ > + --outputpath "${BINARIES_DIR}" \ > + --config "${GENIMAGE_CFG}" > + > diff --git a/board/ci40/readme.txt b/board/ci40/readme.txt > new file mode 100644 > index 0000000..252c19d > --- /dev/null > +++ b/board/ci40/readme.txt > @@ -0,0 +1,57 @@ > +********************* > +* MIPS Creator CI40 * > +********************* > + > +The 'ci40_defconfig' will create a root filesystem and a fitImage > +under the 'output/images/' directory. This document will try to explain how ^^^^^^^^^^^^^^^^^^^ just "explains" > +to use them in order to run Buildroot in the MIPS Creator CI40 board. > + > +Prepare USB/MMC for boot > +------------------------ > +It can be done 2 ways: > + > +1. Using "sdcard.img" file created in output/images folder > + > +Use following command to write image to bootable device > + > +# dd if=./output/images/sdcard.img of=/dev/<your-microsd-or-usb-device> > + > +2. Manually preparing USB/MMC device > + > +Extract the generated root filesystem "rootfs.tar" into a ext4 formatted > +USB drive or SD-Card. > + > +Booting from USB/MMC > +-------------------- > +Here you have the instructions to boot from the two of them. You have to > +choose the one you prefer: > + > +From USB > + pistachio # run usbboot I guess these are U-Boot commands? Perhaps that should be clarified as well. I would also start with something like The boot loader is already present in NOR flash. To boot your newly generated Linux and root filesystem, you need to interrupt U-Boot. <Explain how to interrupt U-Boot>. Perhaps also explain how to make it persistent: # setenv bootcmd run usbboot # saveenv > + > +From SD-Card > + pistachio # run mmcboot > + > +Booting from network (nfsboot) > +------------------------------ > +Prepare nfs root and extract rootfs.tar file into it. ^(See Buildroot manual) > + > + pistachio # setenv serverip <server-ip-address> > + pistachio # setenv rootpath <nfs root path> > + pistachio # run netboot > + > +Flash new bootloader > +-------------------- > +After booting with above method. Copy file u-boot-pistachio_marduk-2015.10-v1.0.4.img > +to /tmp. Use following command to flash new bootloader: > + > +# flashcp -v /tmp/u-boot-pistachio_marduk-2015.10-v1.0.4.img /dev/mtd0 I never used flashcp. It doesn't need a preceding flash_erase like nandwrite? > + > +Online docs > +----------- > +mostly for openwrt but it also applicable on buildroot Mostly for OpenWRT ^is to > +https://docs.creatordev.io/ci40/guides/openwrt-platform/#overview > + > +Prebuilt uboot > +-------------- > +http://downloads.creatordev.io/?q=u-boot/ In general a very clear explanation! > diff --git a/configs/ci40_defconfig b/configs/ci40_defconfig > new file mode 100644 > index 0000000..cf5972e > --- /dev/null > +++ b/configs/ci40_defconfig > @@ -0,0 +1,47 @@ > +# architecture > +BR2_mipsel=y > +BR2_mips_32r2=y > + > +# linux header same as custom kernel ie 4.4.x > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y > + > +# kernel > +BR2_LINUX_KERNEL=y > +BR2_LINUX_KERNEL_CUSTOM_GIT=y > +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/CreatorDev/linux.git" > +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="openwrt-4.4.14" > +BR2_LINUX_KERNEL_DEFCONFIG="pistachio" > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="img/pistachio_marduk" > + > +# bootloader flash support > +BR2_PACKAGE_MTD=y > + > +# wireless firmware > +BR2_PACKAGE_UCCP420WLAN=y > + > +# wireless package > +BR2_PACKAGE_WIRELESS_TOOLS=y > +BR2_PACKAGE_WPA_SUPPLICANT=y > +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y > + > +# bootloader > +BR2_TARGET_UBOOT=y > +BR2_TARGET_UBOOT_BOARDNAME="pistachio_marduk" > +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y > +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/CreatorDev/u-boot/archive/v1.0.4.tar.gz" You can use archive/v1.0.4/u-boot-CreatorDev-v1.0.4.tar.gz to have a reasonable name for the tarball. Regards, Arnout > +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y > +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-pistachio_marduk-2015.10-v1.0.4.img" > + > +# fitimage / image generation > +BR2_PACKAGE_HOST_UBOOT_TOOLS=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y > +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y > +BR2_ROOTFS_POST_BUILD_SCRIPT="board/ci40/create_fitImage.sh" > + > +# image generation > +BR2_TARGET_ROOTFS_EXT2=y > +BR2_TARGET_ROOTFS_EXT2_4=y > +BR2_PACKAGE_HOST_GENIMAGE=y > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/ci40/post-image.sh" > + >
Thankyou again for review Arnout! On Tuesday 14 March 2017 02:27 PM, Arnout Vandecappelle wrote: > > On 27-02-17 14:38, Abhimanyu V wrote: >> From: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com> >> >> Also add post-build script to create fitImage which is used >> by u-boot to boot the device. It also add post-image script >> to generate sdcard.img for preparing sdcard/usb device >> >> Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com> >> Reviewed-by: Rahul Bedarkar <Rahul.Bedarkar@imgtec.com> >> --- >> Changes v1->v2 >> - No change >> Changes v2->v3 (Suggested by Arnout) >> - Remove uImage and add fitImage generation >> - Tidy readme.txt >> - Tidy ci40_defconfig, remove custom toolchain and add wifi helper packages >> Some changes are not done: >> - Using git-helper: >> - Custom kernel doesnt provide tar file, so it didnt work for me > Works for me: > https://github.com/CreatorDev/linux/archive/openwrt-4.4.14/linux-openwrt-4.4.14.tar.gz Oh, i must be doing something wrong, thankyou for suggestion. > > >> board/ci40/create_fitImage.sh | 29 ++++++++++++++++++++++ >> board/ci40/fitImage.its | 52 +++++++++++++++++++++++++++++++++++++++ >> board/ci40/genimage.cfg | 13 ++++++++++ >> board/ci40/post-image.sh | 15 ++++++++++++ >> board/ci40/readme.txt | 57 +++++++++++++++++++++++++++++++++++++++++++ >> configs/ci40_defconfig | 47 +++++++++++++++++++++++++++++++++++ >> 6 files changed, 213 insertions(+) >> create mode 100755 board/ci40/create_fitImage.sh >> create mode 100644 board/ci40/fitImage.its >> create mode 100644 board/ci40/genimage.cfg >> create mode 100755 board/ci40/post-image.sh >> create mode 100644 board/ci40/readme.txt >> create mode 100644 configs/ci40_defconfig >> >> diff --git a/board/ci40/create_fitImage.sh b/board/ci40/create_fitImage.sh >> new file mode 100755 >> index 0000000..6ad9b3a >> --- /dev/null >> +++ b/board/ci40/create_fitImage.sh >> @@ -0,0 +1,29 @@ >> +#!/bin/sh >> + >> +# inputs >> +BOARD_DIR="$(dirname $0)" >> +FIT_ITS_FILE=$BOARD_DIR/fitImage.its > Since this is a template file, call it fitImage.its.in Thanks > >> +MKIMAGE=$HOST_DIR/usr/bin/mkimage >> +UIMAGE=$BINARIES_DIR/uImage >> + >> +#output >> +MODIFIED_FIT_ITS=$BINARIES_DIR/fitImage.its >> +FITIMAGE=$BINARIES_DIR/fitImage >> + >> +# Extract kernel load address and entry address from uImage >> +load=0x$($MKIMAGE -l $UIMAGE | grep "Load Address: " | sed 's/Load Address: //g') >> +entry=0x$($MKIMAGE -l $UIMAGE | grep "Entry Point: " | sed 's/Entry Point: //g') >> + >> +# Create a copy of fitImage.its file and replace these address in that file >> +cp $FIT_ITS_FILE $MODIFIED_FIT_ITS >> +sed -i "s/load = <0>;/load = <$load>;/1" $MODIFIED_FIT_ITS > The /1 is a little useless, there is only one such statement in a line. > Instead, I would anchor the expression at the end of the line. > > Also, it's nicer to use something clearly invalid in the template, e.g. > load = <@load@>; > This would also allow to make the substitution more generic, just replacing all > occurences of @load@ instead of matching the specific line. > >> +sed -i "s/entry = <0>;/entry = <$entry>;/1" $MODIFIED_FIT_ITS > Small nit: we generally prefer to do the manipulations while copying, i.e. > > sed -e "s/@load@/$load/g" \ > -e "s/@entry@/$entry/g \ > $FIT_ITS_FILE > $MODIFIED_FIT_ITS Thanks! >> + >> +# copy vmlinux.bin.gz to output/images, it is used in .its file >> +cp -a $LINUX_DIR/arch/mips/boot/vmlinux.bin.gz $BINARIES_DIR > I could be mistaken, but isn't it possible to select > BR2_LINUX_KERNEL_VMLINUX_BIN, then gzip the image which is already in > $BINARIES_DIR? Of course it's not a perfect solution either because you can't > extract $load and $entry from it... So forget about that idea. > > Another option is to ask your kernel developers to use a FIT image as the > uImage in linux arch/mips/boot/Makefile. For now, however, your current solution > is OK for Buildroot. Yes this is something i also had in my mind, i will start the discussion with the team which manage this repo. Once we have this solution in place i will update it in follow up patch. > >> + >> +# create fitImage >> +$MKIMAGE -f $MODIFIED_FIT_ITS $FITIMAGE >> + >> +# copy to target >> +cp -a $FITIMAGE $TARGET_DIR/fitImage > Just to be sure I understand this correctly: U-Boot will look for a file called > fitImage in the root directory of an ext2 filesystem on MMC/USB? I'm asking > because usually it is either a FAT partition, or it looks in the /boot directory. Ci40 bootloader is coded to boot from either ubi volume "kernel" or from the rootfs. Since i have not added ubi volume support yet, i copied the fitImage to rootfs root. to support booting from /boot, u-boot change will require. > >> diff --git a/board/ci40/fitImage.its b/board/ci40/fitImage.its >> new file mode 100644 >> index 0000000..0812eb3 >> --- /dev/null >> +++ b/board/ci40/fitImage.its >> @@ -0,0 +1,52 @@ >> +/* >> + * Description file for fitImage >> + */ >> + >> +/dts-v1/; >> + >> +/ { >> + description = "Buildroot CI40 FTD Image"; >> + #address-cells = <1>; >> + >> + images { >> + kernel@1 { >> + description = "Linux kernel"; >> + data = /incbin/("./vmlinux.bin.gz"); >> + type = "kernel"; >> + arch = "mips"; >> + os = "linux"; >> + compression = "gzip"; >> + load = <0>; >> + entry = <0>; >> + hash@1 { >> + algo = "crc32"; >> + }; >> + hash@2 { >> + algo = "sha1"; >> + }; >> + }; >> + marduk-fdt@1 { >> + description = "CI40 Flattened Device Tree blob"; >> + data = /incbin/("./pistachio_marduk.dtb"); > Just an idea: perhaps the create_fitImage script could take the DTB as an > argument as well, or use the first DTB found in $BINARIES_DIR. Passing dtb as argument is nice idea i will update this. > >> + type = "flat_dt"; >> + arch = "mips"; >> + compression = "none"; >> + hash@1 { >> + algo = "crc32"; >> + }; >> + hash@2 { >> + algo = "sha1"; >> + }; >> + }; >> + }; >> + >> + configurations { >> + default = "config@1"; >> + config@1 { >> + description = "CI40 dtb"; >> + kernel = "kernel@1"; >> + fdt = "marduk-fdt@1"; >> + }; >> + }; >> +}; >> + >> diff --git a/board/ci40/genimage.cfg b/board/ci40/genimage.cfg >> new file mode 100644 >> index 0000000..8b4303a >> --- /dev/null >> +++ b/board/ci40/genimage.cfg >> @@ -0,0 +1,13 @@ >> +# Minimal SD card image >> +# >> + >> +image sdcard.img { >> + hdimage { >> + } >> + >> + partition rootfs { >> + partition-type = 0x83 >> + image = "rootfs.ext4" >> + size = 256M # Maximum firmware size in partition is 268M > There is no need to specify the size. The filesystem size will anyway be > whatever it was created as. The size you specify here is the partition size. But > the difference between filesystem size and partition size will anyway not be > useable until you do a resize2fs. So I think it's easier to leave the size open. Ok >> + } >> +} >> diff --git a/board/ci40/post-image.sh b/board/ci40/post-image.sh >> new file mode 100755 >> index 0000000..18e76aa >> --- /dev/null >> +++ b/board/ci40/post-image.sh >> @@ -0,0 +1,15 @@ >> +#!/usr/bin/env bash >> + >> +BOARD_DIR="$(dirname $0)" >> +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" >> +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" >> + >> +rm -rf "${GENIMAGE_TMP}" >> + >> +genimage \ >> + --rootpath "${TARGET_DIR}" \ >> + --tmppath "${GENIMAGE_TMP}" \ >> + --inputpath "${BINARIES_DIR}" \ >> + --outputpath "${BINARIES_DIR}" \ >> + --config "${GENIMAGE_CFG}" >> + >> diff --git a/board/ci40/readme.txt b/board/ci40/readme.txt >> new file mode 100644 >> index 0000000..252c19d >> --- /dev/null >> +++ b/board/ci40/readme.txt >> @@ -0,0 +1,57 @@ >> +********************* >> +* MIPS Creator CI40 * >> +********************* >> + >> +The 'ci40_defconfig' will create a root filesystem and a fitImage >> +under the 'output/images/' directory. This document will try to explain how > ^^^^^^^^^^^^^^^^^^^ > just "explains" Thanks > >> +to use them in order to run Buildroot in the MIPS Creator CI40 board. >> + >> +Prepare USB/MMC for boot >> +------------------------ >> +It can be done 2 ways: >> + >> +1. Using "sdcard.img" file created in output/images folder >> + >> +Use following command to write image to bootable device >> + >> +# dd if=./output/images/sdcard.img of=/dev/<your-microsd-or-usb-device> >> + >> +2. Manually preparing USB/MMC device >> + >> +Extract the generated root filesystem "rootfs.tar" into a ext4 formatted >> +USB drive or SD-Card. >> + >> +Booting from USB/MMC >> +-------------------- >> +Here you have the instructions to boot from the two of them. You have to >> +choose the one you prefer: >> + >> +From USB >> + pistachio # run usbboot > I guess these are U-Boot commands? Perhaps that should be clarified as well. > > I would also start with something like > > The boot loader is already present in NOR flash. To boot your newly generated > Linux and root filesystem, you need to interrupt U-Boot. <Explain how to > interrupt U-Boot>. > > Perhaps also explain how to make it persistent: > > # setenv bootcmd run usbboot > # saveenv > Shall update this in next patch. >> + >> +From SD-Card >> + pistachio # run mmcboot >> + >> +Booting from network (nfsboot) >> +------------------------------ >> +Prepare nfs root and extract rootfs.tar file into it. > ^(See Buildroot manual) > >> + >> + pistachio # setenv serverip <server-ip-address> >> + pistachio # setenv rootpath <nfs root path> >> + pistachio # run netboot >> + >> +Flash new bootloader >> +-------------------- >> +After booting with above method. Copy file u-boot-pistachio_marduk-2015.10-v1.0.4.img >> +to /tmp. Use following command to flash new bootloader: >> + >> +# flashcp -v /tmp/u-boot-pistachio_marduk-2015.10-v1.0.4.img /dev/mtd0 > I never used flashcp. It doesn't need a preceding flash_erase like nandwrite? > Yes, flashcp run erase first, example output is: # flashcp -v u-boot-pistachio_marduk-2015.10-v1.0.4.img /dev/mtd0 Erasing blocks: 384/384 (100%) Writing data: 1536k/0k (100%)) Verifying data: 1536k/0k (100%)) >> + >> +Online docs >> +----------- >> +mostly for openwrt but it also applicable on buildroot > Mostly for OpenWRT ^is to > >> +https://docs.creatordev.io/ci40/guides/openwrt-platform/#overview >> + >> +Prebuilt uboot >> +-------------- >> +http://downloads.creatordev.io/?q=u-boot/ > In general a very clear explanation! > > >> diff --git a/configs/ci40_defconfig b/configs/ci40_defconfig >> new file mode 100644 >> index 0000000..cf5972e >> --- /dev/null >> +++ b/configs/ci40_defconfig >> @@ -0,0 +1,47 @@ >> +# architecture >> +BR2_mipsel=y >> +BR2_mips_32r2=y >> + >> +# linux header same as custom kernel ie 4.4.x >> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y >> + >> +# kernel >> +BR2_LINUX_KERNEL=y >> +BR2_LINUX_KERNEL_CUSTOM_GIT=y >> +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/CreatorDev/linux.git" >> +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="openwrt-4.4.14" >> +BR2_LINUX_KERNEL_DEFCONFIG="pistachio" >> +BR2_LINUX_KERNEL_DTS_SUPPORT=y >> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="img/pistachio_marduk" >> + >> +# bootloader flash support >> +BR2_PACKAGE_MTD=y >> + >> +# wireless firmware >> +BR2_PACKAGE_UCCP420WLAN=y >> + >> +# wireless package >> +BR2_PACKAGE_WIRELESS_TOOLS=y >> +BR2_PACKAGE_WPA_SUPPLICANT=y >> +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y >> + >> +# bootloader >> +BR2_TARGET_UBOOT=y >> +BR2_TARGET_UBOOT_BOARDNAME="pistachio_marduk" >> +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y >> +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/CreatorDev/u-boot/archive/v1.0.4.tar.gz" > You can use archive/v1.0.4/u-boot-CreatorDev-v1.0.4.tar.gz to have a reasonable > name for the tarball. Thanks, i didnt know these tricks with github :) > > Regards, > Arnout > >> +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y >> +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-pistachio_marduk-2015.10-v1.0.4.img" >> + >> +# fitimage / image generation >> +BR2_PACKAGE_HOST_UBOOT_TOOLS=y >> +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y >> +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y >> +BR2_ROOTFS_POST_BUILD_SCRIPT="board/ci40/create_fitImage.sh" >> + >> +# image generation >> +BR2_TARGET_ROOTFS_EXT2=y >> +BR2_TARGET_ROOTFS_EXT2_4=y >> +BR2_PACKAGE_HOST_GENIMAGE=y >> +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/ci40/post-image.sh" >> + >> Thanks again! Regards, Abhimanyu V
Hi Abhi, On 15.03.2017 08:06, Abhimanyu V wrote: > On Tuesday 14 March 2017 02:27 PM, Arnout Vandecappelle wrote: >> >> >> Another option is to ask your kernel developers to use a FIT image >> as the >> uImage in linux arch/mips/boot/Makefile. For now, however, your >> current solution >> is OK for Buildroot. > Yes this is something i also had in my mind, i will start the discussion > with the team which manage this > repo. Once we have this solution in place i will update it in follow up > patch. We've got fit image support available upstream now: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/mips/boot?id=cf2a5e0bb4c66e8c43caf9f1be93a1bd7fd07b17 This patch should be easy to backport, and the patch below will be useful as a reference on how to update your platform code: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/mips/?id=eed0eabd12ef061821cbfa20d903476e07645320 Marcin
On Wednesday 15 March 2017 01:30 PM, Marcin Nowakowski wrote: > Hi Abhi, > > On 15.03.2017 08:06, Abhimanyu V wrote: >> On Tuesday 14 March 2017 02:27 PM, Arnout Vandecappelle wrote: >>> > > We've got fit image support available upstream now: > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/mips/boot?id=cf2a5e0bb4c66e8c43caf9f1be93a1bd7fd07b17 > > > This patch should be easy to backport, and the patch below will be > useful as a reference on how to update your platform code: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/mips/?id=eed0eabd12ef061821cbfa20d903476e07645320 > Thankyou marcin for pointer. This is indeed a good start point. > > Marcin Regards Abhimanyu
diff --git a/board/ci40/create_fitImage.sh b/board/ci40/create_fitImage.sh new file mode 100755 index 0000000..6ad9b3a --- /dev/null +++ b/board/ci40/create_fitImage.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# inputs +BOARD_DIR="$(dirname $0)" +FIT_ITS_FILE=$BOARD_DIR/fitImage.its +MKIMAGE=$HOST_DIR/usr/bin/mkimage +UIMAGE=$BINARIES_DIR/uImage + +#output +MODIFIED_FIT_ITS=$BINARIES_DIR/fitImage.its +FITIMAGE=$BINARIES_DIR/fitImage + +# Extract kernel load address and entry address from uImage +load=0x$($MKIMAGE -l $UIMAGE | grep "Load Address: " | sed 's/Load Address: //g') +entry=0x$($MKIMAGE -l $UIMAGE | grep "Entry Point: " | sed 's/Entry Point: //g') + +# Create a copy of fitImage.its file and replace these address in that file +cp $FIT_ITS_FILE $MODIFIED_FIT_ITS +sed -i "s/load = <0>;/load = <$load>;/1" $MODIFIED_FIT_ITS +sed -i "s/entry = <0>;/entry = <$entry>;/1" $MODIFIED_FIT_ITS + +# copy vmlinux.bin.gz to output/images, it is used in .its file +cp -a $LINUX_DIR/arch/mips/boot/vmlinux.bin.gz $BINARIES_DIR + +# create fitImage +$MKIMAGE -f $MODIFIED_FIT_ITS $FITIMAGE + +# copy to target +cp -a $FITIMAGE $TARGET_DIR/fitImage diff --git a/board/ci40/fitImage.its b/board/ci40/fitImage.its new file mode 100644 index 0000000..0812eb3 --- /dev/null +++ b/board/ci40/fitImage.its @@ -0,0 +1,52 @@ +/* + * Description file for fitImage + */ + +/dts-v1/; + +/ { + description = "Buildroot CI40 FTD Image"; + #address-cells = <1>; + + images { + kernel@1 { + description = "Linux kernel"; + data = /incbin/("./vmlinux.bin.gz"); + type = "kernel"; + arch = "mips"; + os = "linux"; + compression = "gzip"; + load = <0>; + entry = <0>; + hash@1 { + algo = "crc32"; + }; + hash@2 { + algo = "sha1"; + }; + }; + marduk-fdt@1 { + description = "CI40 Flattened Device Tree blob"; + data = /incbin/("./pistachio_marduk.dtb"); + type = "flat_dt"; + arch = "mips"; + compression = "none"; + hash@1 { + algo = "crc32"; + }; + hash@2 { + algo = "sha1"; + }; + }; + }; + + configurations { + default = "config@1"; + config@1 { + description = "CI40 dtb"; + kernel = "kernel@1"; + fdt = "marduk-fdt@1"; + }; + }; +}; + diff --git a/board/ci40/genimage.cfg b/board/ci40/genimage.cfg new file mode 100644 index 0000000..8b4303a --- /dev/null +++ b/board/ci40/genimage.cfg @@ -0,0 +1,13 @@ +# Minimal SD card image +# + +image sdcard.img { + hdimage { + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + size = 256M # Maximum firmware size in partition is 268M + } +} diff --git a/board/ci40/post-image.sh b/board/ci40/post-image.sh new file mode 100755 index 0000000..18e76aa --- /dev/null +++ b/board/ci40/post-image.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +BOARD_DIR="$(dirname $0)" +GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg" +GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp" + +rm -rf "${GENIMAGE_TMP}" + +genimage \ + --rootpath "${TARGET_DIR}" \ + --tmppath "${GENIMAGE_TMP}" \ + --inputpath "${BINARIES_DIR}" \ + --outputpath "${BINARIES_DIR}" \ + --config "${GENIMAGE_CFG}" + diff --git a/board/ci40/readme.txt b/board/ci40/readme.txt new file mode 100644 index 0000000..252c19d --- /dev/null +++ b/board/ci40/readme.txt @@ -0,0 +1,57 @@ +********************* +* MIPS Creator CI40 * +********************* + +The 'ci40_defconfig' will create a root filesystem and a fitImage +under the 'output/images/' directory. This document will try to explain how +to use them in order to run Buildroot in the MIPS Creator CI40 board. + +Prepare USB/MMC for boot +------------------------ +It can be done 2 ways: + +1. Using "sdcard.img" file created in output/images folder + +Use following command to write image to bootable device + +# dd if=./output/images/sdcard.img of=/dev/<your-microsd-or-usb-device> + +2. Manually preparing USB/MMC device + +Extract the generated root filesystem "rootfs.tar" into a ext4 formatted +USB drive or SD-Card. + +Booting from USB/MMC +-------------------- +Here you have the instructions to boot from the two of them. You have to +choose the one you prefer: + +From USB + pistachio # run usbboot + +From SD-Card + pistachio # run mmcboot + +Booting from network (nfsboot) +------------------------------ +Prepare nfs root and extract rootfs.tar file into it. + + pistachio # setenv serverip <server-ip-address> + pistachio # setenv rootpath <nfs root path> + pistachio # run netboot + +Flash new bootloader +-------------------- +After booting with above method. Copy file u-boot-pistachio_marduk-2015.10-v1.0.4.img +to /tmp. Use following command to flash new bootloader: + +# flashcp -v /tmp/u-boot-pistachio_marduk-2015.10-v1.0.4.img /dev/mtd0 + +Online docs +----------- +mostly for openwrt but it also applicable on buildroot +https://docs.creatordev.io/ci40/guides/openwrt-platform/#overview + +Prebuilt uboot +-------------- +http://downloads.creatordev.io/?q=u-boot/ diff --git a/configs/ci40_defconfig b/configs/ci40_defconfig new file mode 100644 index 0000000..cf5972e --- /dev/null +++ b/configs/ci40_defconfig @@ -0,0 +1,47 @@ +# architecture +BR2_mipsel=y +BR2_mips_32r2=y + +# linux header same as custom kernel ie 4.4.x +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_4=y + +# kernel +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_GIT=y +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/CreatorDev/linux.git" +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="openwrt-4.4.14" +BR2_LINUX_KERNEL_DEFCONFIG="pistachio" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="img/pistachio_marduk" + +# bootloader flash support +BR2_PACKAGE_MTD=y + +# wireless firmware +BR2_PACKAGE_UCCP420WLAN=y + +# wireless package +BR2_PACKAGE_WIRELESS_TOOLS=y +BR2_PACKAGE_WPA_SUPPLICANT=y +BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y + +# bootloader +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARDNAME="pistachio_marduk" +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="https://github.com/CreatorDev/u-boot/archive/v1.0.4.tar.gz" +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-pistachio_marduk-2015.10-v1.0.4.img" + +# fitimage / image generation +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/ci40/create_fitImage.sh" + +# image generation +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/ci40/post-image.sh" +