mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-03-28 19:31:18 +00:00
riscv: Add support for StarFive VisionFive
The image created uses a UEFI bootflow, so we install grub for this board only. We also need flash-kernel to install the dtb where grub can find it. This image is specifically architectured so that it can be installed on a "factory" board, meaning using the u-boot firmware which was originally implemented for Fedora, so we need the p3 partition that embeds a uEnv.txt file to tell u-boot what/where to load next stage. Signed-off-by: Alexandre Ghiti <alexandre.ghiti@canonical.com>
This commit is contained in:
parent
80c5ccd5c1
commit
ce9f5cacca
@ -345,8 +345,7 @@ fi
|
|||||||
# one also must request disk1-img-xz image format
|
# one also must request disk1-img-xz image format
|
||||||
if [ "$IMAGEFORMAT" = "ext4" ] && [ "$PROJECT" = "ubuntu-cpc" ]; then
|
if [ "$IMAGEFORMAT" = "ext4" ] && [ "$PROJECT" = "ubuntu-cpc" ]; then
|
||||||
case $ARCH:$SUBARCH in
|
case $ARCH:$SUBARCH in
|
||||||
armhf:raspi2|riscv64:sifive_*|*:generic)
|
armhf:raspi2|riscv64:sifive_*|riscv64:nezha|riscv64:visionfive|*:generic)
|
||||||
armhf:raspi2|riscv64:sifive_*|riscv64:nezha|*:generic)
|
|
||||||
IMAGE_HAS_HARDCODED_PASSWORD=1
|
IMAGE_HAS_HARDCODED_PASSWORD=1
|
||||||
if [ -z "${IMAGE_TARGETS:-}" ]; then
|
if [ -z "${IMAGE_TARGETS:-}" ]; then
|
||||||
export IMAGE_TARGETS="disk1-img-xz"
|
export IMAGE_TARGETS="disk1-img-xz"
|
||||||
@ -943,6 +942,9 @@ case $PROJECT in
|
|||||||
nezha)
|
nezha)
|
||||||
KERNEL_FLAVOURS=allwinner
|
KERNEL_FLAVOURS=allwinner
|
||||||
;;
|
;;
|
||||||
|
visionfive)
|
||||||
|
KERNEL_FLAVOURS=starfive
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
KERNEL_FLAVOURS=generic
|
KERNEL_FLAVOURS=generic
|
||||||
;;
|
;;
|
||||||
|
@ -89,6 +89,19 @@ create_partitions() {
|
|||||||
--change-name=12:CIDATA \
|
--change-name=12:CIDATA \
|
||||||
--new=1:: \
|
--new=1:: \
|
||||||
--attributes=1:set:2
|
--attributes=1:set:2
|
||||||
|
elif [ "${SUBARCH:-}" = "visionfive" ]; then
|
||||||
|
# VisionFive
|
||||||
|
sgdisk "${disk_image}" \
|
||||||
|
--set-alignment=2 \
|
||||||
|
--new=15::+106M \
|
||||||
|
--typecode=15:ef00 \
|
||||||
|
--change-name=15:ESP \
|
||||||
|
--new=12::+4M \
|
||||||
|
--change-name=12:CIDATA \
|
||||||
|
--new=3::+1M \
|
||||||
|
--change-name=3:uEnv \
|
||||||
|
--new=1:: \
|
||||||
|
--attributes=1:set:2
|
||||||
else
|
else
|
||||||
# preinstalled server, currently FU540
|
# preinstalled server, currently FU540
|
||||||
# FU740 too in the future
|
# FU740 too in the future
|
||||||
@ -203,15 +216,14 @@ install_grub() {
|
|||||||
;;
|
;;
|
||||||
riscv64)
|
riscv64)
|
||||||
# TODO grub-efi-riscv64 does not exist yet on riscv64
|
# TODO grub-efi-riscv64 does not exist yet on riscv64
|
||||||
chroot mountpoint apt-get install -qqy u-boot-menu #grub-efi-riscv64
|
|
||||||
efi_target=riscv64-efi
|
|
||||||
|
|
||||||
chroot mountpoint u-boot-update
|
|
||||||
|
|
||||||
if [ -n "${SUBARCH:-}" ]; then
|
if [ -n "${SUBARCH:-}" ]; then
|
||||||
case "${SUBARCH}" in
|
case "${SUBARCH}" in
|
||||||
"nezha")
|
"nezha")
|
||||||
echo "Installing U-Boot for Nezha board" &1>2
|
echo "Installing U-Boot for Nezha board" &1>2
|
||||||
|
chroot mountpoint apt-get install -qqy u-boot-menu #grub-efi-riscv64
|
||||||
|
efi_target=riscv64-efi
|
||||||
|
chroot mountpoint u-boot-update
|
||||||
|
|
||||||
chroot mountpoint apt-get install -qqy nezha-boot0
|
chroot mountpoint apt-get install -qqy nezha-boot0
|
||||||
# FSBL, which gets U-Boot SPL
|
# FSBL, which gets U-Boot SPL
|
||||||
loader1="/dev/mapper${loop_device///dev/}p13"
|
loader1="/dev/mapper${loop_device///dev/}p13"
|
||||||
@ -228,6 +240,53 @@ install_grub() {
|
|||||||
# without a cloud datasource.
|
# without a cloud datasource.
|
||||||
setup_cinocloud mountpoint
|
setup_cinocloud mountpoint
|
||||||
;;
|
;;
|
||||||
|
"visionfive")
|
||||||
|
echo "Installing GRUB for VisionFive board" &1>2
|
||||||
|
# flash-kernel is needed to install the dtb for update-grub: it uses the
|
||||||
|
# /proc/device-tree/model value to pick the correct dtb and as we are in a chroot,
|
||||||
|
# the model value is wrong and we need to use /etc/flash-kernel/machine instead.
|
||||||
|
# This explains why we install flash-kernel here.
|
||||||
|
chroot mountpoint mkdir -p /etc/flash-kernel/
|
||||||
|
chroot mountpoint bash -c "echo 'StarFive VisionFive V1' > /etc/flash-kernel/machine"
|
||||||
|
chroot mountpoint apt-get install -qqy grub-efi-riscv64 flash-kernel
|
||||||
|
efi_target=riscv64-efi
|
||||||
|
|
||||||
|
# factory u-boot requires a p3 partition with /boot/uEnv.txt file
|
||||||
|
uenv_dev="/dev/mapper${loop_device///dev/}p3"
|
||||||
|
mkfs.ext4 "${uenv_dev}"
|
||||||
|
uenv_mnt_dir=`mktemp -d uenvXXX`
|
||||||
|
mount "${uenv_dev}" "${uenv_mnt_dir}"
|
||||||
|
mkdir -p "${uenv_mnt_dir}"/boot
|
||||||
|
|
||||||
|
cat <<'EOF' >${uenv_mnt_dir}/boot/uEnv.txt
|
||||||
|
scriptaddr=0x88100000
|
||||||
|
script_offset_f=0x1fff000
|
||||||
|
script_size_f=0x1000
|
||||||
|
|
||||||
|
kernel_addr_r=0x84000000
|
||||||
|
kernel_comp_addr_r=0x90000000
|
||||||
|
kernel_comp_size=0x10000000
|
||||||
|
|
||||||
|
fdt_addr_r=0x88000000
|
||||||
|
ramdisk_addr_r=0x88300000
|
||||||
|
|
||||||
|
bootcmd=load mmc 0:f ${kernel_addr_r} /EFI/ubuntu/grubriscv64.efi; bootefi ${kernel_addr_r}
|
||||||
|
bootcmd_mmc0=devnum=0; run mmc_boot
|
||||||
|
|
||||||
|
ipaddr=192.168.120.200
|
||||||
|
netmask=255.255.255.0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
umount "${uenv_mnt_dir}"
|
||||||
|
rmdir "${uenv_mnt_dir}"
|
||||||
|
# Provide end-user modifyable CIDATA
|
||||||
|
cidata_dev="/dev/mapper${loop_device///dev/}p12"
|
||||||
|
setup_cidata "${cidata_dev}"
|
||||||
|
# Provide stock nocloud datasource
|
||||||
|
# Allow interactive login on baremetal SiFive board,
|
||||||
|
# without a cloud datasource.
|
||||||
|
setup_cinocloud mountpoint
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
u_boot_arch="${SUBARCH}"
|
u_boot_arch="${SUBARCH}"
|
||||||
if [ "${u_boot_arch}" = "hifive" ]; then
|
if [ "${u_boot_arch}" = "hifive" ]; then
|
||||||
@ -251,14 +310,16 @@ install_grub() {
|
|||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## TODO remove below once we have grub-efi-riscv64
|
if [ "${SUBARCH}" != "visionfive" ]; then
|
||||||
rm mountpoint/tmp/device.map
|
## TODO remove below once we have grub-efi-riscv64
|
||||||
umount mountpoint/boot/efi
|
rm mountpoint/tmp/device.map
|
||||||
mount
|
umount mountpoint/boot/efi
|
||||||
umount_partition mountpoint
|
mount
|
||||||
rmdir mountpoint
|
umount_partition mountpoint
|
||||||
return
|
rmdir mountpoint
|
||||||
##
|
return
|
||||||
|
##
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user