diff options
| -rw-r--r-- | resources/grub/config/grub.cfg | 14 | ||||
| -rw-r--r-- | resources/grub/config/grub_memdisk.cfg | 7 | ||||
| -rwxr-xr-x | script/build/boot/roms_helper | 134 | ||||
| -rwxr-xr-x | script/build/grub/payload | 79 | 
4 files changed, 100 insertions, 134 deletions
| diff --git a/resources/grub/config/grub.cfg b/resources/grub/config/grub.cfg index b03a1741..586eb145 100644 --- a/resources/grub/config/grub.cfg +++ b/resources/grub/config/grub.cfg @@ -29,8 +29,18 @@ set default="0"  set timeout=30  set pager=1  set grub_scan_disk="both" +if [ -f (cbfsdisk)/scan.cfg ]; then +	source (cbfsdisk)/scan.cfg +fi + +if [ -f (cbfsdisk)/keymap.gkb ]; then +	keymap (cbfsdisk)/keymap.gkb +elif [ -f (cbfsdisk)/keymap.cfg ]; then +	source (cbfsdisk)/keymap.cfg +else +	keymap usqwerty +fi -keymap usqwerty  function try_user_config {  	set root="${1}"  	for dir in boot grub grub2 boot/grub boot/grub2; do @@ -165,12 +175,14 @@ menuentry 'Search ISOLINUX menu (USB)  [u]' --hotkey='u' {  menuentry 'Search ISOLINUX menu (ATA/IDE)  [d]' --hotkey='d' {  	search_isolinux ata  } +if [ -f (cbfsdisk)/grubtest.cfg ]; then  menuentry 'Load test configuration (grubtest.cfg) inside of CBFS  [t]' --hotkey='t' {  	set root='(cbfsdisk)'  	if [ -f /grubtest.cfg ]; then  		configfile /grubtest.cfg  	fi  } +fi  menuentry 'Search for GRUB2 configuration on external media  [s]' --hotkey='s' {  	search_grub usb  } diff --git a/resources/grub/config/grub_memdisk.cfg b/resources/grub/config/grub_memdisk.cfg index c9f22ff1..0763801b 100644 --- a/resources/grub/config/grub_memdisk.cfg +++ b/resources/grub/config/grub_memdisk.cfg @@ -1,4 +1,7 @@  set prefix=(memdisk)/boot/grub -set root='cbfsdisk' -source (cbfsdisk)/grub.cfg +if [ -f (cbfsdisk)/grub.cfg ]; then +	source (cbfsdisk)/grub.cfg +else +	source (memdisk)/boot/grub/grub_default.cfg +fi diff --git a/script/build/boot/roms_helper b/script/build/boot/roms_helper index 5dea7fc0..64de5843 100755 --- a/script/build/boot/roms_helper +++ b/script/build/boot/roms_helper @@ -68,6 +68,8 @@ displaymode=""  cbcfg=""  targetdir="" +grubelf="elf/grub/grub.elf" +  main()  {  	while [ $# -gt 0 ]; do @@ -215,34 +217,21 @@ build_dependency_grub()  	[ "${payload_grub}" != "y" ] && \  	    [ "${payload_seabios_withgrub}" != "y" ] && return 0 -	if [ -f "elf/grub/grub_usqwerty.cfg" ]; then -		sha1sumcmd="sha1sum resources/grub/config/grub.cfg" -		grubrefchecksum="$(${sha1sumcmd} | awk '{print $1}')" - -		sha1sumcmd="sha1sum elf/grub/grub_usqwerty.cfg" -		grubbuildchecksum="$(${sha1sumcmd} | awk '{print $1}')" - -		[ "${grubrefchecksum}" != "${grubbuildchecksum}" ] && \ -			printf "GRUB change detected. Re-building.\n" 1>&2 -	else -		printf "GRUB not built yet. Building now.\n" 1>&2 -	fi -	for keymapfile in "${kmapdir}"/*; do +	rebuild_grub="n" +	[ ! -f "${grubelf}" ] && rebuild_grub="y" +	for keymapfile in "${kmapdir}"/*.gkb; do +		[ "${rebuild_grub}" = "y" ] || break  		[ -f "${keymapfile}" ] || continue  		keymap="${keymapfile##*/}"  		keymap="${keymap%.gkb}" - -		grubelf="elf/grub/grub_${keymap}.elf" -		grubcfg="elf/grub/grub_${keymap}.cfg" -		grubtestcfg="elf/grub/grub_${keymap}_test.cfg" - -		if [ ! -f "${grubelf}" ] || [ ! -f "${grubcfg}" ] || \ -		    [ ! -f "${grubtestcfg}" ]; then -			./build grub payload || \ -			    err "cannot build grub payload" -		fi +		[ ! -f "elf/grub/keymap_${keymap}.cfg" ] && \ +		    rebuild_grub="y" && break  	done +	if [ "${rebuild_grub}" = "y" ]; then +		./build grub payload || \ +		    err "build_dependency_grub: cannot build grub payload" +	fi  }  build_dependency_uboot() @@ -324,7 +313,8 @@ build_seabios_roms()  {  	if [ "${payload_seabios_withgrub}" = "y" ]; then  		tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX) -		cp "${corebootrom}" "${tmprom}" +		cp "${corebootrom}" "${tmprom}" || \ +		    err "build_seabios_roms: cannot copy to tmprom"  		build_grub_roms "${tmprom}" "${initmode}" \  		    "${displaymode}" "seabios_withgrub" || \  		    err "build_roms: cannot build grub roms, seabios w/grub" @@ -356,18 +346,50 @@ build_grub_roms() {  	displaymode="${3}"  	firstpayloadname="${4}" # allow values: grub, seabios, seabios_withgrub +	grubelf_cbfs="fallback/payload" +  	x=${tmprompath}  	y=${initmode}  	if [ "${payload_grub_withseabios}" = "y" ] && \  	    [ "${firstpayloadname}" = "grub" ]; then  		mv "$(mkSeabiosRom "${x}" "seabios.elf" "${y}")" "${tmprompath}" -	elif [ "${payload_seabios_withgrub}" ] && \ +	elif [ "${payload_seabios_withgrub}" = "y" ] && \  	    [ "${firstpayloadname}" != "grub" ]; then  		mv "$(mkSeabiosRom "${x}" "fallback/payload" "$y")" \  		    "${tmprompath}" || \  		    err "build_grub_roms: cannot move SeaBIOS ROM to tmprom" +		grubelf_cbfs="img/grub2"  	fi +	# we only need insert grub.elf once, for each coreboot config: +	"${cbfstool}" "${tmprompath}" add-payload -f "${grubelf}" \ +	    -n ${grubelf_cbfs} -c lzma || \ +	    err "build_grub_roms: cannot add grub payload to tmprom" + +	# we only need insert background.png once, for each coreboot config: +	if [ "${displaymode}" = "vesafb" ] || \ +	    [ "${displaymode}" = "corebootfb" ]; then +		backgroundfile="background1280x800.png" +		if [ "${board}" = "x60" ] \ +		    || [ "${board}" = "t60_intelgpu" ]; then +			# TODO: don't hardcode this. do it in target.cfg +			backgroundfile="background1024x768.png" +		fi +		backgroundfile="resources/grub/background/${backgroundfile}" +		"${cbfstool}" "${tmprompath}" add -f ${backgroundfile} \ +		    -n background.png -t raw || \ +		    err "build_grub_roms: cannot add background.png to tmprom" + +	fi + +	tmpscancfg=$(mktemp -t coreboot_rom.XXXXXXXXXX) ||  +	    err "mkGrubRom: cannot create temporary scan.cfg" +	printf "set grub_scan_disk=\"%s\"\n" "${grub_scan_disk}" > \ +	    "${tmpscancfg}" || \ +	    err "mkGrubRom: cannot insert into temporary scan.cfg" +	"${cbfstool}" "${tmprompath}" add -f "${tmpscancfg}" -n scan.cfg \ +	    -t raw || err "mkGrubROM: cannot insert scan.cfg into CBFS" +  	keymaps=""  	if [ -z ${keyboard_layouts} ]; then  		for kmapfile in "${kmapdir}"/*; do @@ -386,16 +408,7 @@ build_grub_roms() {  		keymap="${keymapfile##*/}"  		keymap="${keymap%.gkb}" -		grub_path_in_cbfs="fallback/payload" -		[ "${firstpayloadname}" = "grub" ] || \ -			grub_path_in_cbfs="img/grub2" - -		# evil bofh rfc 2646 compliance hack -		x=${keymap} -		y=${tmprompath} -		z=${grub_path_in_cbfs} - -		tmpgrubrom="$(mkGrubRom "${x}" "${y}" "${z}")" +		tmpgrubrom="$(mkGrubRom "${keymap}" "${tmprompath}")"  		if [ "${initmode}" = "normal" ]; then  			newrompath="${romdir}/${firstpayloadname}_${board}_" @@ -415,61 +428,16 @@ build_grub_roms() {  mkGrubRom() {  	target_keymap="${1}"  	target_cbrom="${2}" -	target_grubelf_cbfs_path="${3}" # e.g. fallback/payload -	grubelf="elf/grub/grub_${target_keymap}.elf" -	grubcfg="elf/grub/grub_${target_keymap}.cfg" -	grubtestcfg="elf/grub/grub_${target_keymap}_test.cfg" +	keymapcfg="elf/grub/keymap_${target_keymap}.cfg"  	tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX) || \  	    err "mkGrubRom: cannot create tmprom"  	cp "${target_cbrom}" "${tmprom}" || \  	    err "mkGrubRom: cannot copy to tmprom" -	"${cbfstool}" "${tmprom}" add-payload -f "${grubelf}" \ -	    -n ${target_grubelf_cbfs_path} -c lzma || \ -	    err "mkGrubRom: cannot add grub payload to tmprom" - -	tmpgrubcfg=$(mktemp -t grub.cfg.XXXXXXXXXX) -	tmpgrubtestcfg=$(mktemp -t grubtest.cfg.XXXXXXXXXX) -	if [ "${grub_scan_disk}" = "ahci" ]; then -		sed \ -		's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ahci\"/' \ -		    "${grubcfg}" > "${tmpgrubcfg}" || err "mkGrubRom: sed1" -		sed \ -		's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ahci\"/' \ -		    "${grubtestcfg}" > "${tmpgrubtestcfg}" || \ -		    err "mkGrubRom: sed2" -	elif [ "${grub_scan_disk}" = "ata" ]; then -		sed \ -		's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ata\"/' \ -		    "${grubcfg}" > "${tmpgrubcfg}" || err "mkGrubRom: sed3" -		sed \ -		's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ata\"/' \ -		    "${grubtestcfg}" > "${tmpgrubtestcfg}" || \ -		    err "mkGrubRom: sed4" -	else -		cp "${grubcfg}" "${tmpgrubcfg}" || err "mkGrubRom: grub.cfg cp" -		cp "${grubtestcfg}" "${tmpgrubtestcfg}" || \ -		    err "mkGrubRom: grubtest.cfg cp" -	fi - -	"${cbfstool}" "${tmprom}" add -f "${tmpgrubcfg}" -n grub.cfg -t raw || \ -	    err "mkGrubRom: cannot add grub.cfg to tmprom" - -	"${cbfstool}" "${tmprom}" add -f "${tmpgrubtestcfg}" -n grubtest.cfg \ -	    -t raw || err "mkGrubRom: cannot add grubtest.cfg to tmprom" -	rm -f "${tmpgrubcfg}" "${tmpgrubtestcfg}" || \ -	    err "mkGrubRom: cannot remove tmp grub.cfg / grubtest.cfg" - -	backgroundfile="background1280x800.png" -	if [ "${board}" = "x60" ] || [ "${board}" = "t60_intelgpu" ]; then -		# TODO: don't hardcode this. do it in target.cfg per board -		backgroundfile="background1024x768.png" -	fi -	backgroundfile="resources/grub/background/${backgroundfile}" -	"${cbfstool}" "${tmprom}" add -f ${backgroundfile} -n background.png \ -	    -t raw || err "mkGrubRom: cannot add background.png to tmprom" +	"${cbfstool}" "${tmprom}" add -f "${keymapcfg}" -n keymap.cfg -t raw \ +	    || err "mkGrubRom: cannot add keymap.cfg to tmprom"  	printf "%s\n" "${tmprom}"  } diff --git a/script/build/grub/payload b/script/build/grub/payload index 63849bac..f8a49b64 100755 --- a/script/build/grub/payload +++ b/script/build/grub/payload @@ -24,7 +24,6 @@ set -u -e  . "include/err.sh"  grubcfgsdir="resources/grub" -keymap=""  . "${grubcfgsdir}/modules.list" @@ -34,13 +33,40 @@ main()  	handle_dependencies -	# Separate GRUB payload per keymap to save space in ROM. -	for keylayoutfile in ${grubcfgsdir}/keymap/*.gkb; do +	for keylayoutfile in "${grubcfgsdir}/keymap/"*.gkb; do  		[ -f "${keylayoutfile}" ] || continue -		build_grub_payloads "${keylayoutfile}" +		keymap="${keylayoutfile##${grubcfgsdir}/keymap/}" +		keymap="${keymap%.gkb}" +		printf "keymap %s\n" "${keymap}" > \ +		    "elf/grub/keymap_${keymap}.cfg" || \ +		    err "make_keymapcfgs: cannot create elf/grub/keymap_${keymap}.cfg"  	done -	printf "Done! Check elf/grub/ to see the files.\n\n" +	grub/grub-mkstandalone \ +	    --grub-mkimage="grub/grub-mkimage" \ +	    -O i386-coreboot \ +	    -o "elf/grub/grub.elf" \ +	    -d grub/grub-core/ \ +	    --fonts= --themes= --locales=  \ +	    --modules="${grub_modules}" \ +	    --install-modules="${grub_install_modules}" \ +	    "/boot/grub/layouts/colemak.gkb=${grubcfgsdir}/keymap/colemak.gkb" \ +	    "/boot/grub/layouts/deqwertz.gkb=${grubcfgsdir}/keymap/deqwertz.gkb" \ +	    "/boot/grub/layouts/esqwerty.gkb=${grubcfgsdir}/keymap/esqwerty.gkb" \ +	    "/boot/grub/layouts/frazerty.gkb=${grubcfgsdir}/keymap/frazerty.gkb" \ +	    "/boot/grub/layouts/frdvbepo.gkb=${grubcfgsdir}/keymap/frdvbepo.gkb" \ +	    "/boot/grub/layouts/itqwerty.gkb=${grubcfgsdir}/keymap/itqwerty.gkb" \ +	    "/boot/grub/layouts/svenska.gkb=${grubcfgsdir}/keymap/svenska.gkb" \ +	    "/boot/grub/layouts/trqwerty.gkb=${grubcfgsdir}/keymap/trqwerty.gkb" \ +	    "/boot/grub/layouts/ukdvorak.gkb=${grubcfgsdir}/keymap/ukdvorak.gkb" \ +	    "/boot/grub/layouts/ukqwerty.gkb=${grubcfgsdir}/keymap/ukqwerty.gkb" \ +	    "/boot/grub/layouts/usdvorak.gkb=${grubcfgsdir}/keymap/usdvorak.gkb" \ +	    "/boot/grub/layouts/usqwerty.gkb=${grubcfgsdir}/keymap/usqwerty.gkb" \ +	    "/boot/grub/grub.cfg=${grubcfgsdir}/config/grub_memdisk.cfg" \ +	    "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" \ +	    err "build_grub_elf: cannot build grub payload (grub-mkstandalone)" + +	printf "\nDone! Check elf/grub/\n\n"  }  handle_dependencies() @@ -58,47 +84,4 @@ handle_dependencies()  	    err "handle_dependencies: cannot rm inside: elf/grub/"  } -build_grub_payloads() -{ -	keylayoutfile=${1} -	[ -f "${keylayoutfile}" ] || continue - -	keymap="${keylayoutfile##${grubcfgsdir}/keymap/}" -	keymap="${keymap%.gkb}" - -	build_grub_elf "${keylayoutfile}" -	create_grub_config - -	printf "Created 'elf/grub/grub_%s.elf' and configs.'\n" "${keymap}" -} - -build_grub_elf() -{ -	keylayoutfile=${1} - -	gcfg="/boot/grub/grub.cfg=${grubcfgsdir}" -	gcfg="${gcfg}/config/grub_memdisk.cfg" -	grubk="/boot/grub/layouts/${keymap}.gkb=${keylayoutfile}" -	grub/grub-mkstandalone \ -	    --grub-mkimage="grub/grub-mkimage" \ -	    -O i386-coreboot \ -	    -o "elf/grub/grub_${keymap}.elf" \ -	    -d grub/grub-core/ \ -	    --fonts= --themes= --locales=  \ -	    --modules="${grub_modules}" \ -	    --install-modules="${grub_install_modules}" \ -	    "${gcfg}" "${grubk}" || \ -	    err "build_grub_elf: cannot build grub payload (grub-mkstandalone)" -} - -create_grub_config() -{ -	sed "s/usqwerty/${keymap}/" < "${grubcfgsdir}/config/grub.cfg" \ -	    > "elf/grub/grub_${keymap}.cfg" || \ -	    err "create_grub_config: sed failed: grub.cfg" -	sed "s/grubtest.cfg/grub.cfg/" < "elf/grub/grub_${keymap}.cfg" \ -	    > "elf/grub/grub_${keymap}_test.cfg" || \ -	    err "create_grub_config: sed failed: grubtest.cfg" -} -  main $@ | 
