diff options
| -rwxr-xr-x | script/roms | 165 | 
1 files changed, 56 insertions, 109 deletions
| diff --git a/script/roms b/script/roms index 92f79db4..6ea6a1e1 100755 --- a/script/roms +++ b/script/roms @@ -10,6 +10,8 @@ set -u -e  . "include/lib.sh" +tmprom="$tmpdir/rom" +  seavgabiosrom="elf/seabios/default/libgfxinit/vgabios.bin"  cfgsdir="config/coreboot"  rp2040src="src/pico-serprog" @@ -23,7 +25,7 @@ stm32dir="$stm32src/boards"  # Disable all payloads by default.  # target.cfg files have to specifically enable [a] payload(s)  pv="payload_uboot payload_seabios payload_memtest t payload_grub" -v="romdir cbrom initmode displaymode cbcfg targetdir tree release ubootelf" +v="romdir initmode displaymode cbcfg targetdir tree release ubootelf"  v="$v board grub_scan_disk uboot_config grubtree grubelf tmpmv"  eval `setvars "n" $pv`  eval `setvars "" $v boards targets serdir ser` @@ -53,7 +55,7 @@ main()  	for x in $boards; do  		[ -n "$ser" ] && mkserprogfw "$ser" "$x"  		[ -z "$ser" ] && [ -d "config/coreboot/$x/config" ] && \ -		    configure_target "$x" && build_payloads && build_board && \ +		    configure_target "$x" && build_board && \  		    [ -d "bin/$board" ] && targets="$targets, $x"; continue  	done @@ -61,23 +63,18 @@ main()  	    mkrom_tarball "bin/serprog_$ser" && return 0  	[ -z "$ser" ] && [ -z "$targets" ] && $err "No images were compiled" -	printf "DO NOT flash images from elf/ - use bin/ instead. ALSO:\n" -	printf "%s\n" "$kbnotice" +	printf "DO NOT flash from elf/ - use bin/ - ALSO:\n%s\n" "$kbnotice"  }  mkserprogfw()  {  	x_ mkdir -p "bin/serprog_$1" -	if [ "$1" = "rp2040" ]; then -		x_ cmake -DPICO_BOARD="$2" -DPICO_SDK_PATH="$picosdk" \ -		    -B "$rp2040src/build" "$rp2040src" -		x_ cmake --build "$rp2040src/build" -	else -		x_ make -C "$stm32src" libopencm3-just-make BOARD=$2 -		x_ make -C "$stm32src" BOARD=$2 -	fi +	[ "$1" = "rp2040" ] && x_ cmake -DPICO_BOARD="$2" \ +	    -DPICO_SDK_PATH="$picosdk" -B "$rp2040src/build" "$rp2040src" && \ +	    x_ cmake --build "$rp2040src/build" +	[ "$1" = "stm32" ] && x_ make -C "$stm32src" libopencm3-just-make \ +	    BOARD=$2 && x_ make -C "$stm32src" BOARD=$2  	eval "x_ mv \"\$${1}x\" \"bin/serprog_$1/serprog_$2.\${${1}x##*.}\"" -	printf "Look in bin/serprog_%s/ for images\n" "$1"  }  serlist() @@ -89,9 +86,8 @@ configure_target()  {  	eval `setvars "n" $pv`  	eval `setvars "" $v` -	board="$1" -	targetdir="$cfgsdir/$board" +	board="$1"; targetdir="$cfgsdir/$board"; romdir="bin/$board"  	# Override the above defaults using target.cfg  	eval `setcfg "$targetdir/target.cfg"` @@ -100,6 +96,10 @@ configure_target()  	[ "$xbmk_release" = "y" ] && [ "$release" = "n" ] && return 1  	[ "$board" = "$tree" ] && return 1 +	cbdir="src/coreboot/$tree" +	cbfstool="elf/cbfstool/$tree/cbfstool" +	[ -f "$cbfstool" ] || x_ ./update trees -b coreboot utils $tree +  	[ -n "$uboot_config" ] || uboot_config="default"  	[ "$payload_uboot" = "y" ] || payload_seabios="y"  	[ "$payload_grub" = "y" ] && payload_seabios="y" @@ -112,29 +112,7 @@ configure_target()  	grubelf="elf/grub/$grubtree/payload/grub.elf"  	[ "$payload_memtest" = "y" ] || payload_memtest="n" -	[ "$(uname -m)" = "x86_64" ] || payload_memtest="n" -	[ "$payload_uboot" = "y" ] && payload_memtest="n"; return 0 -} - -build_payloads() -{ -	romdir="bin/$board" -	cbdir="src/coreboot/$board" -	[ "$board" = "$tree" ] || cbdir="src/coreboot/$tree" -	cbfstool="elf/cbfstool/$tree/cbfstool" -	cbrom="$cbdir/build/coreboot.rom" - -	[ -f "$cbfstool" ] || x_ ./update trees -b coreboot utils $tree -	[ "$payload_memtest" = "y" ] && x_ ./update trees -b memtest86plus -	[ "$payload_seabios" = "y" ] && x_ ./update trees -b seabios -	[ "$payload_grub" = "y" ] && x_ ./update trees -b grub $grubtree - -	[ "$payload_uboot" = "y" ] || return 0 -	x_ ./update trees -b u-boot $board -	ubdir="elf/u-boot/$board/$uboot_config" -	ubootelf="$ubdir/u-boot.elf" && [ ! -f "$ubootelf" ] && \ -	    ubootelf="$ubdir/u-boot" -	[ -f "$ubootelf" ] || $err "$board: Can't find u-boot"; return 0 +	[ "$(uname -m)" = "x86_64" ] || payload_memtest="n"; return 0  }  build_board() @@ -142,17 +120,15 @@ build_board()  	x_ rm -Rf "$romdir"  	for it in "normal" "vgarom" "libgfxinit"; do -		initmode="$it" -		hmode="vesafb" +		initmode="$it"; hmode="vesafb"  		[ "$initmode" = "vgarom" ] || hmode="corebootfb"  		modes="$hmode txtmode" -		for y in $modes; do -			displaymode="$y" -			[ "$initmode" = "normal" ] && \ +		for dt in $modes; do +			displaymode="$dt"; [ "$initmode" = "normal" ] && \  			    [ "$displaymode" != "txtmode" ] && continue  			cbcfg="$targetdir/config/${initmode}_$displaymode"  			[ "$initmode" = "normal" ] && cbcfg="${cbcfg%_*}" -			e "$cbcfg" f not || build_roms; x_ rm -f "$cbrom" +			e "$cbcfg" f not || build_roms; x_ rm -f "$tmprom"  		done  	done  } @@ -161,92 +137,63 @@ build_roms()  {  	x_ ./update trees -b coreboot $board -	_cbrom="$cbelfdir/$board/${initmode}_$displaymode" -	[ "$initmode" = "normal" ] && _cbrom="${_cbrom%"_$displaymode"}" -	_cbrom="$_cbrom/coreboot.rom" -	cbrom="$(mktemp -t coreboot_rom.XXXXXXXXXX)" -	x_ cp "$_cbrom" "$cbrom" +	cbuild="$cbelfdir/$board/${initmode}_$displaymode" +	[ "$initmode" = "normal" ] && cbuild="${cbuild%"_$displaymode"}" +	x_ cp "$cbuild/coreboot.rom" "$tmprom" -	[ "$payload_memtest" != "y" ] || cbfs "$cbrom" \ -	    "elf/memtest86plus/memtest.bin" img/memtest  	[ "$payload_seabios" = "y" ] && build_seabios_roms -	[ "$payload_uboot" = "y" ] && x_ cp "$_cbrom" "$cbrom" && \ -	    build_uboot_roms; return 0 -} - -build_seabios_roms() -{ -	if [ "$payload_grub" = "y" ]; then # SeaBIOS with GRUB -		t="$(mktemp -t coreboot_rom.XXXXXXXXXX)" -		x_ cp "$cbrom" "$t" -		build_seagrub_roms "$t" "seabios_withgrub" -	else # SeaBIOS only -		t="$(mkSeabiosRom "$cbrom")" || \ -		    $err "build_seabios_roms: cannot build tmprom" -		newrom="$romdir/seabios_${board}_${initmode}_$displaymode" -		[ "$initmode" = "normal" ] && newrom="$romdir/seabios" \ -			&& newrom="${newrom}_${board}_$initmode" -		cprom cp "$t" "$newrom.rom" -	fi -	x_ rm -f "$t" -} - -build_seagrub_roms() -{ -	tmpmv="$(mkSeabiosRom "$1")" || $err "$board: !mk grub tmprom" -	x_ mv "$tmpmv" "$1" - -	# we only need insert grub.elf once, for each coreboot config: -	cbfs "$1" "$grubelf" "img/grub2" - -	printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ -	    > "$tmpdir/tmpcfg" || $err "set grub_scan_disk, $grub_scan_disk" -	cbfs "$1" "$tmpdir/tmpcfg" scan.cfg raw +	[ "$payload_uboot" = "y" ] || return 0 -	newrom="$romdir/seabios_withgrub_${board}_${initmode}_$displaymode.rom" -	[ "$initmode" = "normal" ] && newrom="$romdir/seabios_withgrub_" \ -	    && newrom="$newrom${board}_$initmode.rom" -	cprom cp "$1" "$newrom" +	x_ ./update trees -b u-boot $board +	ubdir="elf/u-boot/$board/$uboot_config" +	ubootelf="$ubdir/u-boot.elf" && [ ! -f "$ubootelf" ] && \ +	    ubootelf="$ubdir/u-boot" +	[ -f "$ubootelf" ] || $err "$board: Can't find u-boot" -	cbfs "$1" "$grubdata/bootorder" bootorder raw # SeaGRUB -	cprom cp "$1" "${newrom%.rom}_grubfirst.rom" +	cbfs "$tmprom" "$ubootelf" "fallback/payload" +	cprom "$romdir/uboot_payload_${board}_${initmode}_$displaymode.rom"  } -# make a rom in /tmp/ and then print the path of that ROM -mkSeabiosRom() { -	tmprom="$(mktemp -t coreboot_rom.XXXXXXXXXX)" # 1=cbrom, 2=cbfs path +build_seabios_roms() +{  	_seabioself="elf/seabios/default/$initmode/bios.bin.elf" +	x_ ./update trees -b seabios + +	pstr="seabios" && [ "$payload_grub" = "y" ] && pstr="seabios_withgrub" +	newrom="$romdir/${pstr}_${board}_$initmode.rom" +	[ "$initmode" = "normal" ] || newrom="${newrom%.rom}_$displaymode.rom" -	x_ cp "$1" "$tmprom"  	cbfs "$tmprom" "$_seabioself" "fallback/payload"  	x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup  	z="2"; [ "$initmode" = "vgarom" ] && z="0"  	x_ "$cbfstool" "$tmprom" add-int -i $z -n etc/pci-optionrom-exec  	x_ "$cbfstool" "$tmprom" add-int -i 0 -n etc/optionroms-checksum -	[ "$initmode" != "libgfxinit" ] || cbfs "$tmprom" "$seavgabiosrom" \ +	[ "$initmode" = "libgfxinit" ] && cbfs "$tmprom" "$seavgabiosrom" \  	    vgaroms/seavgabios.bin raw -	printf "%s\n" "$tmprom" -} +	if [ "$payload_grub" = "y" ]; then +		x_ ./update trees -b grub $grubtree +		cbfs "$tmprom" "$grubelf" "img/grub2" +		printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ +		    > "$tmpdir/tmpcfg" || $err "$board: !insert scandisk" +		cbfs "$tmprom" "$tmpdir/tmpcfg" scan.cfg raw +	fi -build_uboot_roms() -{ -	tmprom="$(mktemp -t coreboot_rom.XXXXXXXXXX)" -	newrom="$romdir/uboot_payload_${board}_${initmode}_$displaymode.rom" -	x_ cp "$cbrom" "$tmprom" -	cbfs "$tmprom" "$ubootelf" "fallback/payload" -	cprom mv "$tmprom" "$newrom" +	[ "$payload_memtest" = "y" ] && x_ ./update trees -b memtest86plus && \ +	    cbfs "$tmprom" "elf/memtest86plus/memtest.bin" img/memtest + +	cprom "$newrom" && [ "$payload_grub" = "y" ] && \ +	    cbfs "$tmprom" "$grubdata/bootorder" bootorder raw && \ +	    cprom "${newrom%.rom}_grubfirst.rom"; return 0  }  cprom()  { -	printf "Creating target image: %s\n" "$3" - -	x_ mkdir -p "${3%/*}" -	x_ $1 "$2" "$3" -	[ "$xbmk_release" = "y" ] && mksha512sum "$3" "vendorhashes" && \ -	    x_ ./vendor inject -r "$3" -b "$board" -n nuke; return 0 +	printf "Creating target image: %s\n" "$1" +	x_ mkdir -p "${1%/*}"; x_ cp "$tmprom" "$1" +	[ "$xbmk_release" = "y" ] && mksha512sum "$1" "vendorhashes" && \ +	    x_ ./vendor inject -r "$1" -b "$board" -n nuke; return 0  }  main $@ | 
