{ callPackage , writeShellApplication , stdenv , mtdutils }: rec { opensbi = callPackage ./opensbi.nix { }; uboot = callPackage ./uboot.nix { inherit opensbi; }; updater-flash = writeShellApplication { name = "visionfive2-firmware-update-flash"; runtimeInputs = [ mtdutils ]; text = '' flashcp -v ${uboot}/u-boot-spl.bin.normal.out /dev/mtd0 flashcp -v ${uboot}/u-boot.itb /dev/mtd2 ''; }; updater-sd = writeShellApplication { name = "visionfive2-firmware-update-sd"; runtimeInputs = [ ]; text = '' dd if=${uboot}/u-boot-spl.bin.normal.out of=/dev/mmcblk0p1 conv=fsync dd if=${uboot}/u-boot.itb of=/dev/mmcblk0p2 conv=fsync ''; }; }