summaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
5 daysvendor.sh: add clarification to nogbe warningLeah Rowe
if the user ran this on an x60 tarball, the no-gbe warning seems confusing since that one has intel gbe, but pre-ifd, so no gbe region in the flash; on pre-ifd systems e.g. ich7 southbridge, the mac address was baked into a separate gbe nvm on mask rom, inaccessible to users Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: check that the vcfg file existsLeah Rowe
setcfg already checks it, but it's good to check anyway Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: error out if nuking failedLeah Rowe
We already have code to handle this, but it's possible that I might break it in the future, due to the complex logic of this script. So, I've implemented this catch-all check at the end of the process. It still relies on the actual setting of the variables, upon which this check is based, to be set correctly. This condition will most certainly never be met, unless I break some other part of the code in the future. That is precisely what this overly pedantic check is for. Example scenarios: I forget to set xchanged=y, on a new modification. I set has_hashes erroneously. The variables are re-used between runs, and not properly reset; at present, a given run of ./mk inject only operates on a single target, but this latter fact could change in the future. need_files is set erroneously; vendorfiles detected as being required, when they aren't. These are just a few examples. As such, this is a preventative bug fix, because it's preventing a bug. The main reason I want this i n here is because I need to ensure that vendor files are properly deleted, for a given release. If I accidentally includes ones that I'm not supposed to, inside ROM images, that could be a big problem. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysadd line break, part 3Leah Rowe
forgot a line break, three times in a rowe you got a problem with that? Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysadd line break, part 2Leah Rowe
because printf Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysadd line breakLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: prevent double-nukeLeah Rowe
where the nuke command is used, we need the files to be there; if they're not, it will try to nuke them, which will result in an error in most cases, but there may be some cases where that isn't true, for instance if only the Intel ME is needed; it'll be writing zeroes over zeroes. we want to only allow technically correct behaviour, because technically correct is the best kind of correct. it is theoretically possible that a double-nuke might affect certain behaviours unpredictably. for example, if vendor.sh later integrates another tool that works whereby the same command inserts or nukes depending on a certain condition, but with the same command, and where that command would return zero in both cases. this is a preventative bug fix, because it fixes an issue that does not yet actually occur in practise. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: much more verbose errors/confirmationLeah Rowe
the user must be well-informed as to the next step, which this script directly influences guide the user accordingly Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: Remove unnecessary returnLeah Rowe
The message at the end that states a file was not modified, is not currently printed when vendor files are not needed, and setmac is not used. This patch fixes that, so the user now sees a confirmation of such change, or lack thereof. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: Download utils even if vcfg unsetLeah Rowe
This is because the user may have specified setmac. I tried without this change, on a fresh lbmk, setting the MAC address on an X200 tarball, and it produced an error that ifdtool was unavailable. Signed-off-by: Leah Rowe <leah@libreboot.org>
6 daysvendor.sh: Allow setmac if vendorfiles not neededLeah Rowe
Observe the following prior patch: commit 818f3d630c268742cf046523e24c7b000e06ec69 Author: Leah Rowe <leah@libreboot.org> Date: Fri Jan 3 17:06:14 2025 +0000 vendor.sh: Don't error if vcfg is unset Now: This patch made vendor inject more robust, and speeds up the processing of images where no vendor files are needed, but it broke setmac on such tar archives. This new patch works around it. For example, I was able to run ./mk inject on an X200 tarball to change the MAC address; no vendorfiles are inserted, because it's not needed. The further check for whether a board uses Intel GbE still protects against accidental modification. Signed-off-by: Leah Rowe <leah@libreboot.org>
7 dayslib.sh: Set python after dependenciesLeah Rowe
otherwise, the user can't install python, which is in the dependencies. an irony! Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysupdate my copyright years on modified scriptsLeah Rowe
there are some lbmk scripts that i modified, starting this year. update the headers. Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysvendor.sh: Don't error if vcfg is unsetLeah Rowe
It should return 1 instead, in readcfg(), because this is not an error condition; vcfg not being set means that the board doesn't use vendor files, which is perfectly normal and should not yield an error. This fixes a build error under certain conditions, found during release-build testing. This bug was exposed when I fixed double quoting issues as per shellcheck tests. Signed-off-by: Leah Rowe <leah@libreboot.org>
7 dayslib.sh: Fix unescaped quotes in chkvars()Leah Rowe
This should be the proper fix now Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysRevert "fix more unescaped quotes in eval"Leah Rowe
This reverts commit ec6bcc1fba5fbdf8b19b3d1cf9711f3d4c9c3741.
7 daysfix more unescaped quotes in evalLeah Rowe
it should fix more build errors that might have appeared in the aforementioned revision, mentioned in the previous commit message Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysfix ./mk dependencies build issueLeah Rowe
the bug was actually caused by chkvars add an escape for the quotes and bam. fixed. without this, i got the following e.g. For command: ./mk dependencies debian Output: ./mk: 1: [: apt-get: unexpected operator ERROR ./mk: pkg_add unset Someone reported a similar issue with the Arch one, which is also now fixed. This regression was caused by the previous commit: commit 0cf58c22734b19293f4cbef83add59b031ca1773 Author: Leah Rowe <leah@libreboot.org> Date: Thu Jan 2 23:52:45 2025 +0000 fix lbmk shellcheck errors I forgot to escape the double quotes in an eval. Signed-off-by: Leah Rowe <leah@libreboot.org>
7 daysrom.sh: Remove errant GRUB modules checkLeah Rowe
This check is a good idea, but not viable here, because the modules naturally aren't set in all circumstances, so it just causes a build error. Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslib.sh mktarball: cleaner if statementLeah Rowe
i also removed that printf, because the path it prints is actually wrong sometimes; in the recent re-write of vendor.sh, it prints the correct path instead Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysfix lbmk shellcheck errorsLeah Rowe
There was also a condition in run_make_command that is now an OR, where it was an AND, on script/trees, to fix the use of mixed (and erroneous) OR/AND operators. I'm planning a much more invasive audit than this. These are light fixes, intended for Libreboot 20241206 rev8. Signed-off-by: Leah Rowe <leah@libreboot.org>
8 dayslib.sh and rom.sh: update my headerLeah Rowe
i made modifications to them in 2025, so update them to 2025 Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysvendor.sh inject: reset err upon returnLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
8 daysvendor.sh: MUCH, MUCH, MUCH safer ./mk injectLeah Rowe
Don't extract to bin/release/ Modify the tarball instead. Previously, the tarball would not be modified, but a lot of users thought the tarball was being modified and ignored bin/release/, where the injected images were actually being saved to. Don't copy the tarball either. Just modify it in-place. Don't allow single-rom injection either; only allow the tarball-based method. The command syntax has changed, but: ./mk inject tarball.tar.xz This is the same. What has changed is nuke, and MAC address modification. Observe: ./mk inject tarball.tar.xz nuke ./mk inject tarball.tar.xz setmac ./mk inject tarball.tar.xz setmac ??:??:??:??:??:?? ./mk inject tarball.tar.xz setmac 00:1f:16:??:22:aa These are just a few examples. The MAC address syntax is the same as used for nvmutil, which means you can set it randomly. Also: ./mk inject tarball.tar.xz setmac You can use the *setmac* command *repeatedly*, even if you've already injected a given archive. It'll just update the archive, but skip injecting other files that were already injected. If you use setmac without a MAC address, it will randomise the MAC address. This is therefore very similar to the command structure used in nvmutil. The code for injection is generally more robust, with stronger error checks. This design change was done, so that the user doesn't accidentally brick their machine. The non-injected images have a prefix in the file name saying "DO_NOT_FLASH", and those non-injected images are padded by 1 byte. That way, the user knows not to flash it and if they try, flashprog will throw an error. The prefix and padding is removed on injection. Old images without the padding/prefix can still be injected, via tarballs; this new code is backwards-compatible with tarballs from older Libreboot releases. A common thing I see sometimes is a user will say they have a black screen or something, and I say: did you insert vendor files? And they say yes. And they did. But they extracted and flashed from the tarball, which wasn't injected, because they didn't release about bin/release/ No amount of RTFM is justified. The previous design flaw is a bug. We must always observe user safety first, no matter what, so that has now been done. Signed-off-by: Leah Rowe <leah@libreboot.org>
9 daysvendor.sh: fix commentLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
10 dayshp820g2: fix vendorfile inject and set release=yLeah Rowe
I believed that the compressed nature of refcode was the only non-reproducible thing, but turns out you also need to run rmodtool on the refcode to make the binary relocatable in cbfs. This is based on my reading of the coreboot Makefile. With this change, I can now provide release binaries for the HP EliteBook 820 G2. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 dayslib.sh dependencies: support --reinstall argumentLeah Rowe
./mk dependencies debian --reinstall Add --reinstall and it'll do: apt-get install --reinstall This can be useful when updating from a stable release to a testing release. The variable, "reinstall" can be configured for other distros, but it's currently only configured for Debian-based distros. Also, it can be anything. For example, you could add -y; however, a 4th argument will not be accepted. For example, you cannot do: ./mk dependencies debian --reinstall -y If you do this, it'll only see --reinstall; similarly, if you did this command: ./mk dependencies debian -y --reinstall then -y would be passed, but not --reinstall. This is an intentional design decision, in case you accidentally pasted or subshelled something that outputted something undesirable, to prevent possible abuse. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 daysmove xbmkpath to XBMK_CACHE/Leah Rowe
When doing ./mk release, the build system would create symlinks inside xbmkpath/ relative to the current work tree, which will differ from what's in PATH. Since XBMK_CACHE is already set globally, from the main work tree and the release-build work tree, that means we can know reliably that PATH is always correct if we put xbmkpath/ inside XBMK_CACHE. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 daysuse command -v instead of whichLeah Rowe
which is a non-standard command, whereas command is part of posix Signed-off-by: Leah Rowe <leah@libreboot.org>
11 daysMerge path.sh into script/treesLeah Rowe
The code is simple enough now that I'm happy for it to just be part of the main script. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 dayspath.sh: Further cleanupLeah Rowe
Remove all symlinks each time, to ensure that no stragglers are left behind, since they are being re-generated each time anyway. The code for determining version numbers has now been unified under gnu_setver() Signed-off-by: Leah Rowe <leah@libreboot.org>
11 dayspath.sh: More thorough gcc/gnat version checkLeah Rowe
We were checking the shorthand version number, but the precise version numbers need to match. Also: when we searched $PATH/gnat-$gccver, we assumed that the full version would then match, without checking it, so now it is checked precisely. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 dayspath.sh: minor cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
11 dayspath.sh: remove unnecessary shebangLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
11 daysFix globbing issue in lbmkLeah Rowe
When doing e.g. $@ we should use double quotes to prevent globbing. Thanks go to XRevan86 for pointing this out. Signed-off-by: Leah Rowe <leah@libreboot.org>
11 daysMitigate Debian Trixie/Sid GCC/GNAT version mismatchLeah Rowe
When I tested Debian Trixie, and Debian Sid, I saw that GCC in PATH pointed to gcc-14, but gnat in path pointed to GNAT-13, even if you manually install gnat-14. GNAT 14 was marked experimental, but GCC 14 was marked for use, in the apt repositories. So this patch doesn't address the mismatch when doing e.g. apt-get install gcc gnat I will address the actual package dependency in a follow-up patch, on the Debian dependencies config. Signed-off-by: Leah Rowe <leah@libreboot.org>
13 daysrom.sh: Name pico directory serprog_picoLeah Rowe
Previously serprog_rp2040, but we now also support the RP2530 boards. Therefore, serprog_pico is a nice generic name. The directory on release archives will now be serprog_pico instead of serprog_rp2040; it will contain serprog images for both RP2040 and RP2530 devices. Signed-off-by: Leah Rowe <leah@libreboot.org>
13 daysadd 2024 to Riku's copyright header on rom.shLeah Rowe
he forgot to do this in the recently merged pico2 support. i'm doing it for him as a matter of courtesy. Signed-off-by: Leah Rowe <leah@libreboot.org>
13 dayspico-serprog: enable building for multiple pico chipsRiku Viitanen
rp2040 and rp2530 platforms can't share a cmake build directory. we could just delete the build directory after every compilation, but that would be really wasteful (every tool would need to be recomiled every time. instead create new build directories as new plaforms are found and symlink them to the point where the build directory used to be. to find out which platform we're compiling for, we crudely parse the board headers file. there surely would be better ways to do this, but this hack works with all the boards in pico-sdk 2.1.0. Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
2024-12-26git.sh: don't initialise livepull globallyLeah Rowe
set this variable in the tmpclone function. otherwise, certain submodules might always download every time, when handling multiple projects. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-26vendor.sh: Print useful message on ./mk injectLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-26vendor.sh: Handle FSP insertion post-releaseLeah Rowe
The Libreboot 20241206 release provided FSP pre-assembled and inserted into the ROM images; the only file inserted by vendor.sh was the Intel ME. Direct distribution of an unmodified FSP image is permitted by Intel, provided that the license notice is given among other requirements. Due to how coreboot works, it must split up the FSP into subcomponents, and adjust certain pointers within the -M component (for raminit). Such build-time modifications are perfectly fine in a coreboot context, where it is expected that you are building from source. The end result is simply what you use. In a distribution such as Libreboot, where we provide pre-built images, this becomes problematic. It's a technicality of the license, and it seems that Intel themselves probably intended for Libreboot to use the FSP this way anyway, since it is they who seem to be the author of SplitFspBin.py, which is the utility that coreboot uses for splitting up the FSP image. Due to the technicality of the licensing, the FSP shall now be scrubbed from releases, and re-inserted. Coreboot was inserting the -S component with LZ4 compression, which is bad news for ./mk inject beacuse the act of compression is currently not reproducible. Therefore, coreboot has been modified not to compress this section, and the inject command doesn't compress it either. This means that the S file is using about 180KB in flash, instead of about 140KB. This is totally OK. The _fsp targets are retained, but set to release=n, because these targets *still* don't scrub fsp.bin; if released, they would include fsp files, so they've been set to release=n. These can be used on older Libreboot release archives, for compatibility. The new ROM images released for the affected machines are: t480_vfsp_16mb t480s_vfsp_16mb dell3050micro_vfsp_16mb Note the use of _vfsp instead of _fsp. These images are released, unlike _fsp, and they lack fspm/fsps in the image. FSP S/M must be inserted using ./mk inject. This has been tested and confirmed to boot just fine. The 20241206 images will be re-compiled and re-uploaded with this and other recent changes, to make Libreboot 20241206 rev8. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-24lbmk: remove use of deprecated ./vendor commandLeah Rowe
use ./mk instead, because in a future change to lbmk, only ./mk will be used and the other commands will be removed. with this change, the ./vendor, ./build and ./update commands are no longer used. these commands still work, for backwards compatibility, but they are deprecated. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-24vendor.sh: Safer exit when vendorfiles not neededLeah Rowe
When vendor files were not needed on a given board, the script would directly exit. This is bad, because the inject functions are called directly from the main script, which means the parent instance of lbmk. This means that the lock file and temporary files were not being removed on exit. On a subsequent run, this would cause the error stating that a lock file is present, which would cause further error, making the user believe something is broken in lbmk. Modify the behaviour accordingly; exits are now returns, and these are handled in the calling functions, in such a way that a proper exit occurs, whereby temporary files and the lock file are deleted. For context, please read the main "build" script where it calls vendor_inject and vendor_download. At the end of that script, it calls tmp_cleanup, which removes the TMPDIR that was created, and the lock file. In lbmk, the TMPDIR is not /tmp, but rather a subdirectory under /tmp, so that further calls to mktemp create everything under one single temporary directory, which lbmk automatically removes on exit. Therefore, this patch also avoids leaving temporary files laying around on the disk. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-24lib.sh: Safer exit from ./mk dependenciesLeah Rowe
The exit was dependent upon install_packages returning zero status, which it always would in practise, due to its design, but this exit must always be observed, so the code has been modified to honour this design. A direct exit violates lbmk's design in most instances, where a temporary directory and lock file has already been created; at this stage, no such act was performed, so a direct exit is perfectly acceptable. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-22remove geteltorito and mtools from lbmkLeah Rowe
we needed these for extracting intel vga roms from lenovoo updates, for t480, very briefly. about an hour after i pushed that patch, mate kukri fixed libgfxinit and then i removed the vgarom integration because it wasn't needed anymore. however, i forgot to remove geteltorito/mtools from dependencies. some distros like fedora were problematic about it. the best thing about bugs is when you don't have to fix them. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-18rom.sh: support grub-first setupsLeah Rowe
in this setup, seabios is never the default payload, grub is, but only if grub is enabled. set this in target.cfg: payload_grubsea="y" if payload_grub isn't enabled, this is auto-set to n ditto if initmode=normal NOTE: if flashing libgfx setups, you should make sure that you're not booting with a graphics card, only intel graphics. this setting will intentionally not be documented, because it's not recommended, but is being implemented for testing purposes (and i implemented it for some guy who i think is cool). i'll probably also use this myself, since i already do grub-only setups on all my own machines. seagrub is the default on x86 because of past instabilities with grub. to mitigate in case of future issues, since seabios is always stable, we reduce the chance of bricks. Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-18vendor.sh: delete old tb.bin first, just in case20241206rev7Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-18vendor.sh: make TBFW pad size configurableLeah Rowe
we encountered 1MB flash so far, but we may encounter other sizes on other machines when added to libreboot later on Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-12-18T480/T480S: Support fetching ThunderBolt firmwareLeah Rowe
Though not used in coreboot builds, and not injected into the builds in any way, these files are now created seperately when handling T480/T480s vendor files: vendorfiles/t480/tb.bin vendorfiles/t480s/tb.bin These are created by extracting Lenovo's ThunderBolt firmware from update files. The updated firmware fixes a bug; older firmware enabled debug commands that wrote logs to the TB controller's own flash IC, and it'd get full up with logs, bricking the controller. If you've already been screwed by this, you must flash externally, using a padded firmware from Lenovo's updates. Lenovo's own updater requires creating a boot CD or booting Windows. This patch in lbmk auto-downloads just the firmware, and you can flash it externally. You could simply do this as a matter of course, when installing Libreboot. You are recommended to update the Lenovo UEFI/EC firmwares first, before installing Libreboot; please look at the Libreboot documentation to know exactly which versions. Then dump the ThunderBolt firmware first, to be sure, and then you can flash these files. Flashing these updates will prevent the bug described here: https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480-type-20l5-20l6/20l5/solutions/ht508988 You can download Lenovo's installers for various ThinkPad models there, including T480s/T480s. It is these downloads that this lbmk patch uses, to extract those files directly. Signed-off-by: Leah Rowe <leah@libreboot.org>