configs/hifive_unleashed: use mainline Linux + U-Boot

Update to use the official linux kernel v5.10 instead of an
out-of-tree kernel, and use the official U-Boot v2021.01 as the
bootloader. Provide two configuration files of genimage for different
boot flows:

- Boot from SD card (default)
- Boot from SPI flash

A boot script is generated to automatically boot the distro.

Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Bin Meng 2021-01-29 12:50:06 +08:00 committed by Thomas Petazzoni
parent f7922a57f5
commit bde832f710
7 changed files with 116 additions and 36 deletions

View File

@ -0,0 +1,4 @@
setenv bootargs earlycon=sbi root=/dev/mmcblk0p3 rootwait
load mmc 0:3 ${kernel_addr_r} boot/Image
load mmc 0:3 ${fdt_addr_r} boot/hifive-unleashed-a00.dtb
booti ${kernel_addr_r} - ${fdt_addr_r}

View File

@ -3,15 +3,21 @@ image sdcard.img {
gpt = true gpt = true
} }
partition bootloader { partition u-boot-spl {
image = "fw_payload.bin" image = "u-boot-spl.bin"
offset = 1M offset = 17K
size = 32M partition-type-uuid = 5B193300-FC78-40CD-8002-E86C45580B47
}
partition u-boot {
image = "u-boot.itb"
offset = 1041K
partition-type-uuid = 2E54B353-1271-4842-806F-E436D6AF6985 partition-type-uuid = 2E54B353-1271-4842-806F-E436D6AF6985
} }
partition rootfs { partition rootfs {
image = "rootfs.ext4" image = "rootfs.ext4"
partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4 partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
bootable = true
} }
} }

View File

@ -0,0 +1,19 @@
image spi-nor.img {
size = 32M
hdimage {
gpt = true
}
partition u-boot-spl {
image = "u-boot-spl.bin"
offset = 20K
partition-type-uuid = 5B193300-FC78-40CD-8002-E86C45580B47
}
partition u-boot {
image = "u-boot.itb"
offset = 1044K
partition-type-uuid = 2E54B353-1271-4842-806F-E436D6AF6985
}
}

View File

@ -1,16 +1,10 @@
CONFIG_HZ_100=y CONFIG_HZ_100=y
CONFIG_CMDLINE="earlycon=sbi root=/dev/mmcblk0p2 rootwait"
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_SERIAL_SIFIVE=y
CONFIG_SERIAL_SIFIVE_CONSOLE=y
CONFIG_SPI=y
CONFIG_SPI_SIFIVE=y
CONFIG_GPIOLIB=y CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_SIFIVE=y CONFIG_GPIO_SIFIVE=y
CONFIG_MMC=y CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_MMC_SPI=y CONFIG_MTD=y
CONFIG_CLK_U54_PRCI=y CONFIG_MTD_BLOCK=y
CONFIG_CLK_GEMGXL_MGMT=y CONFIG_MTD_SPI_NOR=y
CONFIG_PWM=y CONFIG_PWM=y
CONFIG_PWM_SIFIVE=y CONFIG_PWM_SIFIVE=y

View File

@ -0,0 +1,2 @@
#!/bin/sh
cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr

View File

@ -28,30 +28,41 @@ Result of the build
Once the build has finished you will have the following files: Once the build has finished you will have the following files:
output/images/ output/images/
+-- boot.scr
+-- fw_dynamic.bin
+-- fw_dynamic.elf
+-- fw_jump.bin +-- fw_jump.bin
+-- fw_jump.elf +-- fw_jump.elf
+-- fw_payload.bin +-- hifive-unleashed-a00.dtb
+-- fw_payload.elf
+-- Image +-- Image
+-- rootfs.cpio
+-- rootfs.ext2 +-- rootfs.ext2
+-- rootfs.ext4 +-- rootfs.ext4
+-- rootfs.tar +-- rootfs.tar
+-- sdcard.img +-- sdcard.img
+-- u-boot.bin
+-- u-boot.itb
+-- u-boot-spl.bin
Creating a bootable SD card with genimage Creating a bootable SD card with genimage
========================================= =========================================
Buildroot builds a SD card image for you. All you need to do is dd the By default Buildroot builds a SD card image for you. All you need to do
image to your SD card, which can be done with the following command: is dd the image to your SD card, which can be done with the following
command on your development host:
$ sudo dd if=output/images/sdcard.img of=/dev/mmcblk0 bs=4096 $ sudo dd if=output/images/sdcard.img of=/dev/sdb bs=4096
The above example command assumes the SD card is accessed via a USB card
reader and shows up as /dev/sdb on the host. Adjust it accordingly per
your actual setup.
Booting the SD card on the board Booting the SD card on the board
================================ ================================
Make sure that the all DIP switches are set to the off position for Make sure that the all DIP switches are set to the off position for
default boot mode (MSEL mode = 1111), insert the SD card and power default boot mode (MSEL mode = 1011), insert the SD card and power
up the board. up the board.
Connect the USB cable and open minicom (/dev/ttyUSB1, 115200, 8N1). Connect the USB cable and open minicom (/dev/ttyUSB1, 115200, 8N1).
@ -60,16 +71,45 @@ See the 'SiFive HiFive Unleashed Getting Started Guide' for
more details (https://www.sifive.com/documentation). more details (https://www.sifive.com/documentation).
You will get a warning reported by fdisk when you examine the SD card. You will get a warning reported by fdisk when you examine the SD card.
This is because the genimage.cfg file doesn't specify the SD card size This is because the genimage_sdcard.cfg file doesn't specify the SD card
(as people will naturally have different sized cards), so the size (as people will naturally have different sized cards), so the
secondary GPT header is placed after the rootfs rather than at the end secondary GPT header is placed after the rootfs rather than at the end
of the disk where it is expected to be. of the disk where it is expected to be.
You will see something like this at boot time: You will see something like this at boot time:
[ 2.318722] GPT:Primary header thinks Alt. header is not at the end of the disk. [ 0.989458] mmc0: host does not support reading read-only switch, assuming write-enable
[ 2.325390] GPT:190496 != 122142719 [ 0.996772] mmc0: new SDHC card on SPI
[ 2.328843] GPT:Alternate GPT header not at the end of the disk. [ 1.001634] mmcblk0: mmc0:0000 SD8GB 7.28 GiB
[ 2.334824] GPT:190496 != 122142719 [ 1.038079] GPT:Primary header thinks Alt. header is not at the end of the disk.
[ 2.338302] GPT: Use GNU Parted to correct GPT errors. [ 1.044759] GPT:52389 != 15264767
[ 2.343456] mmcblk0: p1 p2 [ 1.048051] GPT:Alternate GPT header not at the end of the disk.
[ 1.054015] GPT:52389 != 15264767
[ 1.057323] GPT: Use GNU Parted to correct GPT errors.
[ 1.062479] mmcblk0: p1 p2 p3
Creating a bootable SPI flash with genimage
===========================================
Adjust Buildroot configuration by:
$ make menuconfig
Change "System configuration" -> "Extra arguments passed to custom scripts"
value to "-c board/sifive/hifive-unleashed/genimage_spi-nor.cfg", save the
configuration and build. This creates a output/images/spi-nor.img that can
be programmed to the on-board SPI flash.
Boot the board from the SD card prepared above, stop the U-Boot auto boot,
and type the following commands to program the whole SPI flash:
=> tftp 82000000 output/images/spi-nor.img
=> sf probe
=> sf update 82000000 0 2000000
Booting the SPI flash on the board
==================================
Make sure that the all DIP switches are set to the off position for
default boot mode (MSEL mode = 0110) to boot from SPI flash.

View File

@ -12,29 +12,44 @@ BR2_RISCV_ABI_LP64D=y
BR2_SYSTEM_DHCP="eth0" BR2_SYSTEM_DHCP="eth0"
BR2_TARGET_GENERIC_GETTY=y BR2_TARGET_GENERIC_GETTY=y
BR2_TARGET_GENERIC_GETTY_PORT="ttySIF0" BR2_TARGET_GENERIC_GETTY_PORT="ttySIF0"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/sifive/hifive-unleashed/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/sifive/hifive-unleashed/genimage.cfg" BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/sifive/hifive-unleashed/genimage_sdcard.cfg"
# Filesystem # Filesystem
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_EXT2=y BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y BR2_TARGET_ROOTFS_EXT2_4=y
# Linux headers same as kernel, a 5.1 series # Linux headers same as kernel, a 5.10 series
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_1=y BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y
# Kernel # Kernel
BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/alistair23/linux.git" BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="hifive-unleashed-5.1"
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/sifive/hifive-unleashed/linux.config.fragment" BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/sifive/hifive-unleashed/linux.config.fragment"
BR2_LINUX_KERNEL_IMAGE=y BR2_LINUX_KERNEL_IMAGE=y
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="sifive/hifive-unleashed-a00"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
# Bootloader # Bootloader
BR2_TARGET_OPENSBI=y BR2_TARGET_OPENSBI=y
BR2_TARGET_OPENSBI_PLAT="sifive/fu540" BR2_TARGET_OPENSBI_PLAT="generic"
BR2_TARGET_OPENSBI_LINUX_PAYLOAD=y BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.01"
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="sifive_fu540"
BR2_TARGET_UBOOT_NEEDS_DTC=y
BR2_TARGET_UBOOT_NEEDS_OPENSBI=y
BR2_TARGET_UBOOT_FORMAT_ITB=y
BR2_TARGET_UBOOT_SPL=y
# Host tools # Host tools
BR2_PACKAGE_HOST_GENIMAGE=y BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_UBOOT_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/sifive/hifive-unleashed/boot.cmd"