Build bucts and patched flashrom for I945 ThinkPads with Guix.

GNU Boot can be installed on some I945 ThinkPads without disassembling
them. To do that it requires both a patched flashrom and bucts.

This build them and also integrate Guix in GNU Boot as a dependency to
build them.

This will enable us to later on ship these utilities and then update
the installation instructions to use them somehow.

It also makes sure that we have proper authorship of the patch used
for flashrom and also unify the two flashrom patches not to require
two different flashrom binaries.

Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
Acked-by: Adrien 'neox' Bourmault <neox@gnu.org>
This commit is contained in:
Denis 'GNUtoo' Carikli 2023-08-24 00:26:18 +02:00
parent f8faf2803d
commit 7df6d6169b
Signed by: GNUtoo
GPG Key ID: 5F5DFCC14177E263
22 changed files with 483 additions and 201 deletions

1
.gitignore vendored
View File

@ -18,7 +18,6 @@
/depthcharge/
/descriptors/
/docs/version
/flashrom/
/grub/
/ich9utils/
/me_cleaner/

View File

@ -67,7 +67,7 @@ release:
clean:
./build clean cbutils
./build clean flashrom
./build clean i945-thinkpads-install-utilities
./build clean ich9utils
./build clean payloads
./build clean seabios
@ -108,6 +108,8 @@ check:
set -o pipefail ; ./tests/targets 2>&1 | tee -a $(LOG)
@echo "[ OK ] Makefile: $@ target. See $(LOG) for the log."
include resources/packages/i945-thinkpads-install-utilities/Makefile.am
help:
@printf "Available commands:\n"
@printf "\tsudo make install-dependencies-ubuntu # %s\n" \

4
build
View File

@ -29,7 +29,7 @@ projectname="$(cat projectname)"
. resources/scripts/misc/sysexits.sh
# Some scripts like the ones in resources/packages/flashrom need
# Some scripts like the ones in resources/packages/i945-thinkpads-install-utilities need
# Makefiles to be generated
. resources/scripts/misc/generate-configure-makefiles.sh
@ -83,7 +83,7 @@ help() {
$(list_tasks)
Example: ./build module all
Example: ./build module flashrom [static]
Example: ./build module i945-thinkpads-install-utilities
Example: ./build roms withgrub
Example: ./build clean all

View File

@ -15,5 +15,34 @@
AC_INIT([gnuboot],[0.1],[gnuboot@gnu.org])
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([
Makefile
resources/packages/i945-thinkpads-install-utilities/Makefile
])
AC_SUBST([GUIX_BUILD_CORES], [])
# --with-guix-build-cores
AC_ARG_WITH([guix-build-cores],
[AS_HELP_STRING([--with-guix-build-cores=N],
[Force guix build the use of up to N CPU cores for the build.
Lowering the number of cores used can help when there is not
enough RAM per core.])],
[GUIX_BUILD_CORES=$withval],
[GUIX_BUILD_CORES=0])
AC_CHECK_PROG([FOUND_GUIX], [guix], [guix])
AS_IF([test x"$FOUND_GUIX" = x""],
[AC_MSG_ERROR(
[guix was not found in PATH ($PATH)])])
AC_CHECK_PROG([FOUND_GUIX], [guix], [guix])
AS_IF([test x"$FOUND_GUIX" = x""],
[AC_MSG_ERROR(
[guix was not found in PATH ($PATH)])])
AC_OUTPUT
AS_ECHO(["Configuration options:"])
AS_ECHO([" GUIX_BUILD_CORES: $GUIX_BUILD_CORES"])

View File

@ -31,7 +31,7 @@ set -u -e
. resources/scripts/misc/sysexits.sh
# Some scripts like the ones in resources/packages/flashrom need
# Some scripts like the ones in resources/packages/i945-thinkpads-install-utilities need
# Makefiles to be generated
. resources/scripts/misc/generate-configure-makefiles.sh
@ -66,7 +66,7 @@ help() {
possible values for 'package':
$(list_packages)
Example: ./download flashrom
Example: ./download i945-thinkpads-install-utilities
Example: ./download coreboot
Some package options allow for additional parameters:

View File

@ -0,0 +1,169 @@
;;; GNU Boot --- Boot software distribution
;;; Copyright © 2024 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is part of GNU Boot.
;;;
;;; This file is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; This file is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnuboot packages i945-thinkpads-install-utilities)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages libftdi)
#:use-module (gnu packages libusb)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages pkg-config)
#:use-module (guix build-system gnu)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module ((guix licenses)
#:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils))
(define-public coreboot-version "4.22")
(define-public coreboot-source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/coreboot/coreboot")
(commit coreboot-version)))
(file-name (git-file-name "coreboot" coreboot-version))
(sha256
(base32
"125qw98f8zfhq0d5rpawxsjghqxwmg6yha1r1dqmwbxd7i12bj8f"))))
(define-public bucts
(package
(name "bucts")
(version coreboot-version)
(source coreboot-source)
(inputs (list pciutils))
(build-system gnu-build-system)
(arguments
(list
#:tests? #f ;no tests
#:make-flags #~(list (string-append "CC="
#$(cc-for-target))
(string-append "DESTDIR="
#$output) "INSTALL=install"
"PREFIX=/")
#:phases #~(modify-phases %standard-phases
(delete 'configure) ;no configure script
(add-after 'unpack 'enter-source
(lambda _
(chdir "util/bucts")))
(add-after 'enter-source 'fixup-version
(lambda _
(substitute* "Makefile"
(("^VERSION:=*")
#$(string-append "VERSION:=" version)))))
;; no install target
(replace 'install
(lambda _
(let ((bin (string-append #$output "/bin"))
(doc (string-append #$output "/share/doc/bucts/"))
(licenses (string-append #$output
"/share/licenses/bucts/")))
(install-file "bucts" bin)
(install-file "readme.md" doc)
(install-file "../../COPYING" licenses)))))))
(home-page "https://coreboot.org")
(synopsis "Tool to manipulate swap boot firmware bootblocks on the Intel
I945 chipsets")
(description
"This package provides @command{bucts}. That command can flip a
bit in the BUC.TS register of the Intel I945 chipsets and show the
register status. When the bit is set, it swaps the bootblock
location. Because the bootblock region is often set read-only by the
default BIOS, this enables to bypass that restriction and is used as
part of a procedure to replace the nonfree BIOS with free software on
various computers (Lenovo X60, X60s, X60T, T60, probably more).")
(license license:gpl2)))
(define-public flashrom-bucts
(package
(name "flashrom-bucts")
(version "1.2")
(source (origin
(method url-fetch)
(uri (string-append
"https://download.flashrom.org/releases/flashrom-v"
version ".tar.bz2"))
(sha256
(base32
"0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71"))
(patches (search-patches "flashrom-1.2.patch"))))
(build-system gnu-build-system)
(inputs (list dmidecode pciutils))
(native-inputs (list pkg-config))
(arguments
(list
#:make-flags
#~(list "CC=gcc"
(string-append "PREFIX=" #$output)
(string-append "VERSION=" #$version " with patch for bucts")
"CONFIG_NOTHING=yes"
"CONFIG_INTERNAL=yes"
"CONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INTERNAL")
#:tests? #f ; no 'check' target
#:phases
#~(modify-phases
%standard-phases
(delete 'configure) ; no configure script
(add-before
'build 'patch-exec-paths
(lambda*
(#:key inputs #:allow-other-keys)
(substitute*
"dmi.c"
(("\"dmidecode\"")
(format #f "~S"
(search-input-file inputs "/sbin/dmidecode"))))))
(add-before
'build 'patch-type-error
(lambda _
;; See https://github.com/flashrom/flashrom/pull/133
(substitute*
"libflashrom.c"
(("supported_boards\\[i\\].working = binfo\\[i\\].working")
"supported_boards[i].working = (enum flashrom_test_state)binfo[i].working")
(("supported_chipsets\\[i\\].status = chipset\\[i\\].status")
"supported_chipsets[i].status = (enum flashrom_test_state)chipset[i].status"))))
(add-after
'patch-type-error 'rename-flashrom
(lambda _
(substitute*
"Makefile"
(("PROGRAM = flashrom")
"PROGRAM = flashrom-bucts")
(("\\$\\(PROGRAM\\)\\.8\\.tmpl")
"flashrom.8.tmpl")))))))
(home-page "https://flashrom.org/")
(synopsis "Identify, read, write, erase, and verify ROM/flash chips on I945
Thinkpads with the stock BIOS and the bucts utility.")
(description
"It is possible to install GNU Boot on I945 Thinkpads without opening
the computer even if the nonfree bios sets the bootblock region (the
last 64K of the flash chip) read-only. To bypass that read-only
restriction we use an utility (bucts) that tells the hardware to swap
the primary bootblock with the secondary one for the next boot.
After that we need a patched version of flashrom (provided by this
package) to rewrite all the flash chip but the last 64K. Then after
rebooting we have to disable that swap and reflash again.")
(license license:gpl2)))
(list bucts
flashrom-bucts)

View File

@ -0,0 +1,64 @@
Author: Stefanct
Description: Add support for Macronix MX25L1605 and SST SST25VF016B with the Lenovo Thinkpad T60/X60/X60s/X60T BIOS.
Upstream is not against supporting this use case but even if the two
flash chip description would be added instead of modifying existing
ones, this patch break regular flashing and so it would likely
require to detect the use case at runtime and switch to a different
set of flash chip descriptions.
Forwarded: not-needed
Origin: https://www.coreboot.org/index.php?title=Board:lenovo/x60/Installation&diff=prev&oldid=11158
---
diff --git a/flashchips.c b/flashchips.c
index 58dd4f30..d9af0096 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -8052,12 +8052,12 @@ const struct flashchip flashchips[] = {
.name = "MX25L1605D/MX25L1608D/MX25L1673E",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
- .model_id = MACRONIX_MX25L1605,
+ .model_id = 0x14,
.total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_res1,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
@@ -8076,8 +8076,8 @@ const struct flashchip flashchips[] = {
},
},
.printlock = spi_prettyprint_status_register_bp3_srwd, /* bit6: Continuously Program (CP) mode, for 73E is quad enable */
- .unlock = spi_disable_blockprotect_bp3_srwd,
- .write = spi_chip_write_256,
+ .unlock = spi_disable_blockprotect,
+ .write = spi_chip_write_1,
.read = spi_chip_read, /* Fast read (0x0B), dual I/O supported */
.voltage = {2700, 3600},
},
@@ -12719,12 +12719,12 @@ const struct flashchip flashchips[] = {
.name = "SST25VF016B",
.bustype = BUS_SPI,
.manufacture_id = SST_ID,
- .model_id = SST_SST25VF016B,
+ .model_id = 0x41,
.total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_EITHER,
.tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
+ .probe = probe_spi_res2,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
@@ -12747,7 +12747,7 @@ const struct flashchip flashchips[] = {
},
.printlock = spi_prettyprint_status_register_sst25vf016,
.unlock = spi_disable_blockprotect,
- .write = spi_aai_write,
+ .write = spi_chip_write_1,
.read = spi_chip_read,
.voltage = {2700, 3600},
},

View File

@ -1,35 +0,0 @@
#!/usr/bin/env bash
# helper script: clean the dependencies that were built in flashrom
#
# Copyright (C) 2014, 2015 Leah Rowe <info@minifree.org>
# Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This script assumes that the current working directory is the root
# of git or release archive
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
printf "Cleaning the previous build of flashrom\n"
[ ! -d "flashrom/" ] && exit 0
# clean flashrom
make -C flashrom clean
printf "\n\n"

View File

@ -1,68 +0,0 @@
#!/usr/bin/env bash
# helper script: downloads flashrom and patches it
#
# Copyright (C) 2014, 2015, 2020, 2021 Leah Rowe <info@minifree.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
usage()
{
progname="./download flashrom"
printf "Usage:\n"
printf "\t%s # %s\n" \
"${progname}" \
"Download flashrom"
printf "\t%s --help # %s\n" \
"${progname}" \
"Prints this help"
}
if [ $# -ne 0 ] ; then
usage
exit 0
fi
# Get flashrom at the last previously tested revision
# Remove the old version that may still exist:
# ------------------------------------------------------------------------------
printf "Downloading flashrom\n"
rm -Rf "flashrom/"
# Get flashrom
# ------------------------------------------------------------------------------
# download it using git
git clone https://review.coreboot.org/flashrom.git
if [ ! -d "flashrom" ]; then
printf "flashrom not downloaded; check network connection?\n\n"
exit 1
fi
(
cd "flashrom/"
# reset to known revision
git reset --hard 11680db4e1251eb842bee11e53b6d1f0ae67767b
)
printf "\n\n"

View File

@ -1,40 +0,0 @@
#!/usr/bin/env bash
# helper script: builds flashrom source code
#
# Copyright (C) 2014, 2015 <info@minifree.org>
# Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This script assumes that the working directory is the root
# of git or release archive
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
# Build "flashrom" (utility for flashing/dumping ROMs)
# --------------------------------------------------------------------
if [ ! -d "flashrom/" ]; then
./download flashrom
fi
printf "Building flashrom\n"
(
cd "flashrom/"
make clean
make WARNERROR=no -j$(nproc)
)

View File

@ -0,0 +1,95 @@
# Copyright (C) 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# This Makefile makes it easier to cache the builds than with shell
# scripts: The make program compares the timestamps of the source code
# and the binaries and if the source is more recent, rebuilds the
# binaries.
TOPDIR = .
DESTDIR ?= $(TOPDIR)/release
PACK_NAME = i945-thinkpads-install-utilities
GUIX_PACKAGE_NAMES ?= bucts flashrom-bucts
RELEASE_DIR = $(DESTDIR)/i945-thinkpads-install
# We enable caching by not making this configurable and so when the
# Makefile isn't updated, the Guix revision doesn't change, so we
# don't need to rebuild anything.
GUIX_REVISION = v1.4.0
GUIX_PACK_COMMAND = \
source resources/scripts/misc/guix.sh && \
source_guix_profile && \
guix time-machine \
--commit=$(GUIX_REVISION) -- \
pack \
-L $(TOPDIR)/resources/guix/ \
-L $(TOPDIR)/resources/guix/gnuboot/patches/ \
-RR \
--save-provenance \
--system=i686-linux \
--symlink=/usr/local/bin/bucts=bin/bucts \
--symlink=/usr/local/bin/flashrom-bucts=sbin/flashrom-bucts
.PHONY: $(PACK_NAME) $(PACK_NAME)-clean $(PACK_NAME)-distclean $(PACK_NAME)-download $(PACK_NAME)-module
$(PACK_NAME): \
$(RELEASE_DIR)/$(PACK_NAME)-deb-pack.deb \
$(RELEASE_DIR)/$(PACK_NAME)-tarball-pack.tar.gz \
$(RELEASE_DIR)/packages_src.tar \
$(RELEASE_DIR)/gnuboot_src.tar
# To better fit in the current package structure
$(PACK_NAME)-download: $(PACK_NAME)
$(PACK_NAME)-module: $(PACK_NAME)
# TODO: Make sure the tarball is reproducible
$(RELEASE_DIR)/gnuboot_src.tar: Makefile
install -d $(RELEASE_DIR)
git -C $(TOPDIR) archive HEAD > $@
# TODO: Use Guix to produce a source package to make it reproducible
$(RELEASE_DIR)/packages_src.tar: Makefile
install -d $(RELEASE_DIR)
tar cf $@ \
`source resources/scripts/misc/guix.sh && \
source_guix_profile && \
guix time-machine --commit=$(GUIX_REVISION) -- \
build \
-c $(GUIX_BUILD_CORES) \
-L $(TOPDIR)/resources/guix/ \
-L $(TOPDIR)/resources/guix/gnuboot/patches \
--sources=transitive \
$(GUIX_PACKAGE_NAMES) | sort -u`
$(RELEASE_DIR)/$(PACK_NAME)-deb-pack.deb: Makefile
install -d $(RELEASE_DIR)
install \
`$(GUIX_PACK_COMMAND) --format="deb" $(GUIX_PACKAGE_NAMES)` \
$@
$(RELEASE_DIR)/$(PACK_NAME)-tarball-pack.tar.gz: Makefile
install -d $(RELEASE_DIR)
install \
`$(GUIX_PACK_COMMAND) --format="tarball" $(GUIX_PACKAGE_NAMES)` \
$@
$(PACK_NAME)-clean:
rm -rf $(RELEASE_DIR)
$(PACK_NAME)-distclean: $(PACK_NAME)-clean

View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
#
# Copyright (C) 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -x
make i945-thinkpads-install-utilities-clean

View File

@ -14,14 +14,6 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -x
# shellcheck source=resources/scripts/tasks/distclean.sh
. "$(dirname "$0")"/../../scripts/tasks/distclean.sh
distclean_flashrom()
{
rm -rf flashrom
}
# shellcheck disable=SC2068
distclean_main distclean_flashrom $@
make i945-thinkpads-install-utilities-clean

View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
#
# Copyright (C) 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -x
make i945-thinkpads-install-utilities-download

View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
#
# Copyright (C) 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -x
make i945-thinkpads-install-utilities-module

View File

@ -53,7 +53,7 @@ mkdir -p "${srcdir}/"
printf "%s" "${version}" > "${srcdir}"/version
modlist="coreboot flashrom grub memtest86plus seabios ich9utils"
modlist="coreboot grub i945-thinkpads-install-utilities memtest86plus seabios ich9utils"
dirlist="resources"
filelist="download build README.md COPYING Makefile update version versiondate projectname .gitcheck"

View File

@ -17,7 +17,7 @@
if [ ! -f configure ] || \
[ ! -f Makefile ] || \
[ ! -f resources/packages/flashrom/Makefile ] ; then
[ ! -f resources/packages/i945-thinkpads-install-utilities/Makefile ] ; then
./autogen.sh
./configure
fi

View File

@ -293,9 +293,7 @@ with Lenovo BIOS present, it's possible to flash everything except the main
bootblock, but Intel platforms have 2 bootblocks, and you specify which one is
to be used by setting the TS bit. You then boot with only one bootblock flashed
(by the coreboot project's bootblock on that machine), and afterwards you reset
bucts before flashing the ROM again, to flash the main bootblock. Libreboot
hosts a copy of his work, because his website hosting bucts is no longer
responsive.
bucts before flashing the ROM again, to flash the main bootblock.
Steve Shenton
-------------

View File

@ -104,6 +104,56 @@ Change the name and email address to whatever you want, when doing this.
You may also want to follow more of the steps here:
<https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup>
Guix
====
While GNU Boot doesn't build yet on top of Guix, it started using some
Guix packages to build part of GNU Boot. While this provides many
benefits, you will need to install Guix on top of a supported
distribution to build GNU Boot binaries.
There are many ways to install Guix, and they are well documented in
the [Guix manual](https://guix.gnu.org/en/manual/) especially in the
[Installation](https://guix.gnu.org/en/manual/en/html_node/Installation.html)
chapter.
It is also a good idea to "enable substitutes" not to have to build
every packages and dependencies from source. If the installation
instructions you followed don't mention that, you can still find
documentation on it in the [Substitutes
chapter](https://guix.gnu.org/en/manual/en/guix.html#Substitutes) in
the Guix manual.
Once Guix is installed, users are advised to update it with guix pull
as explained in the [Invoking guix
pull](https://guix.gnu.org/en/manual/en/html_node/Invoking-guix-pull.html)
manual section to avoid any potential security issues.
In some cases (especially if you don't enable substitutes, and that
you have many CPU cores and not enough RAM per cores), building with
Guix can fail.
At the time of writing, Guix can use about 2GiB per core for
updates. Building packages can also use some RAM but the types of
packages that GNU Boot will build are unlikely to require that much
RAM per core.
If even with substitutes enabled the build still fails due to the lack
of RAM, or if you don't want to enable substitutes, it is also
possible to limit the amount of RAM used by limiting the number of
cores used by Guix by passing --with-guix-build-cores=1 to the GNU
boot ./configure script. This will pass the '-c 1' and '-M 1' options
to guix build.
Finally Guix keeps the files it downloads or builds (in /gnu/store) in
order to speed up things, but if you use Guix extensively, at some
point it might use too much storage space.
Guix users are able to to decide when to free up space by running the
'guix gc' command manually, but they can also control what to remove
with various criteria. The [Invoking guix gc Guix manual
section](https://guix.gnu.org/en/manual/devel/en/html_node/Invoking-guix-gc.html)
has more details on how to do that.
Building GNU Boot binaries
==========================
@ -265,7 +315,7 @@ Example of downloading an individual module:
./download grub
./download flashrom
./download i945-thinkpads-install-utilities
Third, build all of the modules:
--------------------------------
@ -291,7 +341,7 @@ Example of building specific modules:
./build module seabios
./build module flashrom
./build module i945-thinkpads-install-utilities
Commands are available to *clean* a module, which basically runs make-clean.
You can list these commands:

View File

@ -1,27 +0,0 @@
From 34270811fce1ecf0bcf3b1363b0dc3dbf284ab09 Mon Sep 17 00:00:00 2001
From: Leah Rowe <info@minifree.org>
Date: Wed, 10 Jun 2015 22:53:28 +0000
Subject: flash script: fix a really really really dumb mistake
---
diff --git a/flash b/flash
index c96b915..04fd274 100755
--- a/flash
+++ b/flash
@@ -95,12 +95,12 @@ if [ "$mode" = "i945lenovo_firstflash" ] || [ "$mode" = "i945lenovo_secondflash"
# git or libreboot_src
bucts="./bucts/bucts"
flashrom_lenovobios_sst="./flashrom/flashrom_lenovobios_sst"
- flashrom_lenovobios_macronix="./flashrom/flashrom_lenovobios_sst"
+ flashrom_lenovobios_macronix="./flashrom/flashrom_lenovobios_macronix"
else
# libreboot_util
bucts="./bucts/$arch/bucts"
flashrom_lenovobios_sst="./flashrom/$arch/flashrom_lenovobios_sst"
- flashrom_lenovobios_macronix="./flashrom/$arch/flashrom_lenovobios_sst"
+ flashrom_lenovobios_macronix="./flashrom/$arch/flashrom_lenovobios_macronix"
fi
# anti-bricking precaution
--
cgit v0.9.0.2

View File

@ -599,12 +599,6 @@ default is 500ms. setting it higher like 1000s might make USB drives work in
SeaBIOS on KFSN4-DRE. see notes
on <https://www.seabios.org/Runtime_config#Option_ROMs>
SST+macronix patches for flashrom on X60/T60
------------------------------------------------------
These binaries are referenced in the documentation currently not actually
available and the build system (lbmk) does not produce them.
Warnings about option ROMs
--------------------------

View File

@ -48,7 +48,10 @@ run_shellcheck \
update \
resources/packages/coreboot/distclean \
resources/packages/descriptors/distclean \
resources/packages/flashrom/distclean \
resources/packages/i945-thinkpads-install-utilities/clean \
resources/packages/i945-thinkpads-install-utilities/distclean \
resources/packages/i945-thinkpads-install-utilities/download \
resources/packages/i945-thinkpads-install-utilities/module \
resources/packages/grub/distclean \
resources/packages/ich9utils/distclean \
resources/packages/memtest86plus/distclean \