initial commit

main
Ricard Illa 2022-08-29 15:57:30 +02:00
commit aab3ff8860
No known key found for this signature in database
GPG Key ID: F69A672B72E54902
7 changed files with 191 additions and 0 deletions

59
Makefile Normal file
View File

@ -0,0 +1,59 @@
CONFIG=free-defconfig-d5c31acee4
SDK_VERSION=2022-04-04_9a8d0a03db
BOOTSPLASH=bootsplash.jpg
# BOOTORDER=bootorder
REPO_URL=https://github.com/coreboot/coreboot.git
COMMIT=d5c31acee4
COREBOOT_CONFIG=coreboot/.config
BUILDER=./coreboot-sdk.sh \
--config $(CONFIG) \
--sdk-version $(SDK_VERSION) \
--bootsplash $(BOOTSPLASH)
#--bootorder $(BOOTORDER)
.PHONY: clean nuke defconfig checkout flash
build/coreboot_top_prepared_12mb.rom: build/coreboot_top.rom
dd if=/dev/zero of="$@" bs=4M count=2 status=none
dd if="$<" oflag=append conv=notrunc of="$@" bs=4M status=none
build/coreboot_top.rom.sha256: build/coreboot_top.rom
sha256sum "$<" > "$@"
build/coreboot_top.rom: build/coreboot.rom
dd if="$<" of="$@" bs=1M skip=8
build/coreboot.rom: $(COREBOOT_CONFIG) $(BOOTSPLASH) $(bootorder)
mkdir -p build
$(BUILDER) make
$(COREBOOT_CONFIG): $(CONFIG) checkout
mkdir -p build
$(BUILDER) make defconfig
defconfig: $(COREBOOT_CONFIG)
coreboot: # clone
git clone $(REPO_URL) $@
git -C coreboot submodule update --init --recursive --remote
checkout: coreboot
git -C coreboot checkout $(COMMIT)
git -C coreboot submodule update --recursive --remote
clean:
rm -rf coreboot/.config
rm -rf build
nuke: clean
rm -rf coreboot
flash: build/coreboot_top_prepared_12mb.rom layout.txt
flashrom \
--force \
--noverify-all\
-p internal \
--layout layout.txt \
--image bios \
-w build/coreboot_top_prepared_12mb.rom

64
README.md Normal file
View File

@ -0,0 +1,64 @@
# coreboot-builder
This is what I use to build my coreboot images. It is heavily based on the
scripts and configurations used by [skulls](https://github.com/merge/skulls).
But simplified to support only my very specific hardware and preferences. This
makes it leaner to use and easier for me to understand it, so it's easier to
customize (for example, if I want to change the boot order).
Currently I have only one config for my Thinkpad X230; `capibara`, and I use a
the "free" config (with the VGA BIOS SeaVGABIOS instead of the Intel one).
## Build process
I use a Makefile to orchestrate cloning the coreboot code, checking out the
right commit, compiling the image, flashing it, etc.
The coreboot SDK is run from a docker image because I couldn't manage to
compile everything otherwise.
## Splash screen
For an X230 the splash screen image needs to be a JPEG using:
* with "progressive" turned off
* "4:2:0 (chroma quartered)" Subsampling
* 1024px wide and 768px tall
But the X230 screen happens to be 16:9 (1366px wide, 768px tall). When the
SaBIOSVABIOS is used, the image is just shown centered in the screen, with
black blocks on each side. When the Intel VGA is used, the image is stretched
to fill the whole 1366 x 768 screen. So make sure to plan accordingly to make
the image look right.
Also, the SeaBIOS VGA seems to show weird colors when booting. I don't know
how to fix that, so I just keep the image pure black and white to make it look
decent.
## Updates
I try to follow skull's releases and update the coreboot commit, sdk version
and config as they do it.
Last release happened on 2022/05/03.
## Flashing
Before flashing, the system needs to boot with the kernel parameter
`iomem=relaxed`.
* Reboot the computer
* When the GRUB screen appears, press `e` to edit the startup command
* Append `iomem=relaxed` to the kernel command
* Press `ctrl-x` or `F2` to boot the system with the modification
* Then flash the new image with:
```sh
flash: build/coreboot_top_prepared_12mb.rom layout.txt
flashrom \
--force \
--noverify-all\
-p internal \
--layout layout.txt \
--image bios \
-w build/coreboot_top_prepared_12mb.rom
```

BIN
bootsplash.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
bootsplash.xcf Normal file

Binary file not shown.

35
coreboot-sdk.sh Executable file
View File

@ -0,0 +1,35 @@
#!/bin/sh
while :; do
case "$1" in
--config)
CONFIG="$2"
shift 2;;
--sdk-version)
SDK_VERSION="$2"
shift 2;;
--bootorder)
BOOTORDER="$2"
shift 2;;
--bootsplash)
BOOTSPLASH="$2"
shift 2;;
*)
break;;
esac
done
uid=$(id -u)
gid=$(id -g)
docker run --rm -it \
--user "$uid:$gid" \
--workdir "/home/coreboot/cb_build" \
-v "$(pwd)/coreboot:/home/coreboot/cb_build" \
-v "$(pwd)/build:/home/coreboot/cb_build/build" \
-v "$(pwd)/${CONFIG}:/home/coreboot/cb_build/configs/defconfig:ro" \
-v "$(pwd)/${BOOTSPLASH}:/home/coreboot/cb_build/bootsplash.jpg:ro" \
coreboot/coreboot-sdk:"$SDK_VERSION" \
"$@"
# -v "$(pwd)/${BOOTORDER}:/home/coreboot/cb_build/bootorder:ro" \

28
free-defconfig-d5c31acee4 Normal file
View File

@ -0,0 +1,28 @@
CONFIG_BOOTSPLASH_IMAGE=y
CONFIG_VENDOR_LENOVO=y
CONFIG_NO_POST=y
CONFIG_CBFS_SIZE=0x400000
CONFIG_LINEAR_FRAMEBUFFER_MAX_HEIGHT=768
CONFIG_LINEAR_FRAMEBUFFER_MAX_WIDTH=1024
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
CONFIG_SEABIOS_PS2_TIMEOUT=5000
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
CONFIG_PCIEXP_HOTPLUG_BUSES=8
CONFIG_PCIEXP_HOTPLUG_MEM=0x800000
CONFIG_PCIEXP_HOTPLUG_PREFETCH_MEM=0x10000000
CONFIG_BOARD_LENOVO_X230=y
CONFIG_UART_PCI_ADDR=0x0
# CONFIG_H8_BEEP_ON_DEATH is not set
CONFIG_H8_SUPPORT_BT_ON_WIFI=y
CONFIG_BOOTBLOCK_NORMAL=y
CONFIG_GENERIC_LINEAR_FRAMEBUFFER=y
CONFIG_BOOTSPLASH=y
CONFIG_PCIEXP_HOTPLUG_IO=0x2000
CONFIG_SUBSYSTEM_VENDOR_ID=0x0000
CONFIG_SUBSYSTEM_DEVICE_ID=0x0000
CONFIG_I2C_TRANSFER_TIMEOUT_US=500000
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_8=y
CONFIG_SEABIOS_DEBUG_LEVEL=-1
CONFIG_COREINFO_SECONDARY_PAYLOAD=y
CONFIG_NVRAMCUI_SECONDARY_PAYLOAD=y
# CONFIG_SEABIOS_BOOTORDER_FILE="bootorder"

5
layout.txt Normal file
View File

@ -0,0 +1,5 @@
0x00000000:0x00000fff ifd
0x00001000:0x00002fff gbe
0x00003000:0x004fffff me
0x00500000:0x007fffff unused
0x00800000:0x00bfffff bios