Add Google kano (Mr Chromebox) support - First full Chromebook port!#2133
Add Google kano (Mr Chromebox) support - First full Chromebook port!#2133cwiggs wants to merge 37 commits into
Conversation
tlaurion
left a comment
There was a problem hiding this comment.
first review as I was there and saw work on this PR :)
|
I suggest you tart a thread under Matrix Heads channel. You must rebase the old PR on linuxboot/heads master, an dthen adapt coreboot config to your board. Following https://osresearch.net/Porting/ @cwiggs otherwise your experience might be really frustrating. |
Started a thread here: https://matrix.to/#/!eMLMv62wAMCW1V-ufL_bJ_JDngDhrpSOSEQBLzX8aTg/$eepAush4kVo93Zxqtw59P6NX9g6AG7FZFplc2Fu6tyo?via=matrix.org&via=tchncs.de&via=unredacted.org |
|
@cwiggs I saw you left the room? |
Looks like the Matrix homeserver decided to delete my account for some reason, I'll look into getting it reactivated. |
|
@cwiggs check https://github.com/tlaurion/heads/tree/cwiggs-google_kano which now builds locally with blobs paths corrected and blobs submodules synced per mrchromebox gitsubmodules sync override in modules/coreboot |
Okay, great, should I rebase this branch off that one then? |
Absolutely. It builds from CI. I pushed progress forward since the last base (coreboot 4.22) was old and not trivial to adapt. Let me know how the testing goes. Feel free to cherry pick all commits or if you agree i can push the changes here but that would make us both co-authors of the port. CircleCI builds at https://app.circleci.com/pipelines/github/tlaurion/heads/4040/workflows/d7699b2f-feca-423f-b0f5-187ebf94e886 |
|
Thanks! I got it downloaded. The suzyq cable should arrive this weekend or Monday and I'll give it a try. I also rebased off your branch here. |
@cwiggs : This branch doesn't include all the needed changes, nor CircleCI config. I can push here too, if needed. Let me know. |
I just rebased off your branch, let me know if it looks good from that point of view. Looks like I also will need to rebase off main. As far as flashing goes: I got the Suzy-Q "cable" (It's really just a small board with a male and female usb-c, you then use your own usb-c cable). And I have some good news and some bad news (I think?). I was able to get the suzy-q cable to read the rom, but verifying the backup seems to fail. I've been using this mrchromebox guide to get the suzy-q device working with flashrom and then this heads wiki as well. Below are some notes I put together while I was attempting the flash: Use Suzy-Q cable for flashing
Questions:
Anyway I think next steps are to disconnect the battery and try these flashrom commands again. I don't want to proceed until the verify step works without error. |
|
Well I disconnected the battery and am getting the same response from flashrom. Should I just continue with flashing heads? Here are my notes:
* Use a smudger to take the back cover off.
* Disconnect battery cable.
|
Signed-off-by: Matthew Drobnak <matthew@drobnak.com> Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Signed-off-by: Matthew Drobnak <matthew@drobnak.com> Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Signed-off-by: Chris Wiggins <chris@cwiggs.com> Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…t/linux helpers to modify and save in oldconfig Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…-musl-compat.patch: fix build error against musl Signed-off-by: Thierry Laurion <insurgo@riseup.net>
…place to put in defconfig to remove irrelevant omnigul things Signed-off-by: Thierry Laurion <insurgo@riseup.net>
2e4d179 to
9a8de0b
Compare
Update from MrChromebox-2603.2 (f8244f2) to MrChromebox-2606.0 (ddfe385). Config regenerated via: make BOARD=kano coreboot.save_in_oldconfig_format_in_place && make BOARD=kano coreboot.save_in_defconfig_format_backup Address Copilot review: fix 'feautre' typo, deduplicate Adapted for MrChromebox fork bullet list, rebase smihandler.c hunk for opal_s3_smm.h include added in 26.06. Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Copilot review: fix linux-4.9.80 paths in 6.6.30 kernel patches (0001, 0002, 0010) and correct misleading 'All boards have CONFIG_USE_BLOBS=y' comment. Signed-off-by: Thierry Laurion <insurgo@riseup.net>
Interesting. My issue was not about installing grub, that did work. My issue pointing to #2155 being required was that when setting up a TPM DUK for a selected boot entry to become default, initramfs unpacking failed finding a valid crypttab in initramfs pointed by boot entry in grub (it was a symlink pointing to rootfs path which is not available from initramfs itself. If you could describe your custom partitioning scheme, I would definitely be interested in it, mine was roughly described into #2155 linked issue #2154. NixOS installer (GUI) complies with basic custom partitioning even though it warns that /boot mount point is reserved. But yeah, From my understanding, NixOS expects /boot to be subdir of / from an installation standpoint. |
| diff --recursive -u ./clean/linux-4.9.80/drivers/acpi/acpica/hwacpi.c linux-4.9.80/drivers/acpi/acpica/hwacpi.c | ||
| --- ./clean/linux-4.9.80/drivers/acpi/acpica/hwacpi.c 2018-02-03 11:05:43.000000000 -0500 | ||
| +++ linux-4.9.80/drivers/acpi/acpica/hwacpi.c 2018-02-07 15:51:35.126557868 -0500 | ||
| @@ -168,12 +168,16 @@ |
| +#if 0 | ||
| +// qemu generates these for some reason | ||
| pr_emerg("Uhhuh. NMI received for unknown reason %02x on CPU %d.\n", | ||
| reason, smp_processor_id()); | ||
|
|
| + if (!port_map) { // && vers < 0x10300) { | ||
| + printk("%s: saved_port=%02x\n", __func__, hpriv->saved_port_map); | ||
| + writel(0x1, mmio + HOST_PORTS_IMPL); | ||
| + port_map = readl(mmio + HOST_PORTS_IMPL); | ||
| + | ||
| + //port_map = (1 << ahci_nr_ports(cap)) - 1; | ||
| dev_warn(dev, "forcing PORTS_IMPL to 0x%lx\n", port_map); |
Here is my drive and partitions for my NixOS system: I installed this system before Heads on on this device. After I installed Heads I wasn't able to boot (makes sense). I then updated my Nix config to create the Grub files but not actually install Grub (boot.loader.grub.device="nodev"). Perhaps this section in my hardware-configuration.nix helped with Heads being able to work with DUK without your PR? Btw what is the status of the Kano port. Should I try and flash the most recent CircleCI build: https://output.circle-artifacts.com/output/job/b467f40a-e1a8-4a12-bef1-d14b1fe2f7c1/artifacts/0/build/x86/kano/heads-kano-202607102221-v0.2.1-3126-g2aaa5ee.zip ? |
|
I'm not sure if Heads 100% caused it but it seems like my usb-c ports on the Kano device no longer work in Heads, or GDM, they only work after logging into Gnome. |
This doesn't make sense to me.
But yeah, Heads can read fat32 and doesn't really care. Unpacking initramfs from /boot to setup a TPM DUK under master (without #2155) would sill have a crypttab as a symlink to real /root/nixstore......./..../crypttab, so I don't understand why ypu don't need it. But that is another issue unrelated to the port. Will document in issue #2154
That's good and can relate, UUID are passed down to kexec call. Anyway this is #2154
You tell me :) I'm doing cleanup for pesterity but that shoul'd impact functionality, unless bumping to recent coreboot 26.06 mrchromebook fork created issues with USB per your next comment? |
Is that regression of mrchromebook coreboot fork 26.03 vs 26.06? Can you go to recovery shell and give debug output? |
I found the proper requirement for nixos installer, which is basically ticking grub-bios on /boot unencrypted partition and setting /boot as mountpoint at #2154, and confirmed, with debug trace and where crypttab fails without #2155 and works with it. |
I'll flash the newest .zip and start testing things next.
I was trying to use my hardware security device (Yubikey)
I'll get this over to you shortly. I'll be unavailable for the next few weeks (and 2 weeks in August), I'll be slower to respond but I'm committed to getting this over the finish line when possible. |
|
Just checked again and it looks like my hardware security device (yubikey) isn't working on usb-c or via a usb-c to usb-a convertor on the kano device anymore. I dropped into a recovery shell and I'm on FW_VER Heads-v0.2.1-3123-g852dc8e Right as I was about to post this I went to boot into NixOS and because I updated recently I had to set a new default. While going through that flow I was able to use my hardware security device to do a gpg operation so I assume something wasn't loaded to allow the yubikey to work when I just dropped into the recovery console? Attached are the cbmem -1 and dmesg outputs. |
|
Is https://app.circleci.com/pipelines/github/linuxboot/heads/1367/workflows/b13145ac-3a8a-482a-b99c-6124ab69ac71/jobs/50653 the most recent kano build that I should test? Looks like we might want to rebase off main/master to get the nixos changes you pushed in the other PRs? |
I reset the tpm and I ran into the issue of the security key not being detected in either usb-c port, but it does work in the usb-a port via an adapter. Seems like this bug is intermittent. Perhaps I can just flash the most recent image to the rom and then retry? |
Looking at the logs, usb controllers drivers are loaded and everything usb is ready, your dmesg logs show detection of controllers, and then listing of ventoy prepared thumb drive with available isos listed from Heads when asking for usb boot not a default boot? Going to recovery shell early ('r' key hammered while heads is early booting after splash screen) would bypass a lot of, going into recovery shell early from inited/init without hitting the boot script (gui-init.sh). Frim what I can see here, nothing Heads related. The pci controllers, usb controllers are listed under dmesg. Are there some missing? Is this usbc problem recent or was problematic before? You should be able to see Linux kernel listing connection and removal of devices if you plug and remove them. On usb security dongles: there is logic in code to kill gpg-agent and scdaemon, responsible to keep exclusive access on the usb dongle but none of the debug taxe shown in dmesg shows discovery/removal of the Yubikey. If you remove and add it, does the Linux kernel see it? Tldr: heads loads Linux kernel modules once and then skip loading if already present. Hypothesis is either usbc Linux kernel drivers missing (not aware something changed there but maybe with Linux kernel version used in the port) or Yubikey having a problem? To test: go in recovery shell, and remove plug Yubikey and see if you see trace in dmesg. Question stays: was this working under 26.03 and regressed under 26.06 coreboot bump? |
Each pushed commit builds all boards under Circleci and rom filename includes that commit id at the end of filename "*-gCOMMIT.rom/zip) So 2aaa5ee -> https://output.circle-artifacts.com/output/job/b467f40a-e1a8-4a12-bef1-d14b1fe2f7c1/artifacts/0/build/x86/kano/heads-kano-202607102221-v0.2.1-3126-g2aaa5ee.zip So yes: that's the latest commit from this branch, without (unneeded from you) tpm duk fixes for crypptab override creation you didn't needed. Will rebase/merge master in current branch Monday if you don't beat me to it, but nothing changed/fixed on usb side of things. |
|
You can check differences between commits with something like 852dc8e...cwiggs:heads:google_kano Where 852dc8e was effectively mrchromebox based on upstream 26.03 (March 2026) not 26.06 (June) release. Maybe something off in usb init from coreboot side if you spotted a regression? But yet again, if unplugging replugging, seems to point to dongle having issues, unless working perfectly fine on another machine? |
|
@cwiggs merged master into this branch at 5cbf889 from which commit you should be able to get kano artifacts for internal upgrade from GUI. Still pending: usbc regression or not, usb dongle causing issue or not and OP checklist + pr against heads-wiki for board addition. Let me know if you want to co-work on what is missing in the next days in a specific timeframe or tell me a timeframe that works for you specifying timezone, |


This pull request adds support for the Acer Chromebook Spin 714 ("kano") board based on the MrChromebox coreboot fork (26.06), including CI integration, configuration files, and documentation updates. It also introduces a patch for musl compatibility in the MrChromebox fork, adds a new Linux kernel version (6.6.30), and documents TPM2 CR50 command support. The most important changes are grouped below:
Kano (Acer Chromebook Spin 714) board support:
boards/kano/kano.configfor Heads and Linux build configuration for the kano board.config/coreboot-kano.config_defconfigas a defconfig backup for kano, documenting non-default coreboot options.coreboot-mrchromeboxas a seed, defines the kano build job, and documents its workflow. [1] [2] [3]USE_PC_CMOS_ALTCENTURYmust be unset for this board. [1] [2] [3]MrChromebox coreboot fork integration:
modules/coreboot, with commit hash pinning and submodule handling notes. [1] [2]ifdtool. [1] [2]Build system and kernel updates:
cbmemutility.Documentation improvements:
Minor adjustments:
These changes collectively enable official Heads support for the Acer Chromebook Spin 714 (kano), ensure compatibility with the MrChromebox fork, and improve build reproducibility and documentation for new contributors.
(copilot generalized pr summary, asked by @tlaurion)
TODO before merge
X.Y.Z.using external programmer modelX.Y.Z.onX.Y.Z.Voltage modeX.Y.Z.install and rebootX.Y.Z.hardwarekey e.g. nk3X.Y.Z.patches/coreboot-X.Y.Z.and coreboot config contain proper preparation of the platform)Additional actionable items: