From eec6db1db486467da53e8726a1ad866bb0c8b288 Mon Sep 17 00:00:00 2001 From: urko Date: Sun, 25 May 2025 15:48:12 +0100 Subject: [PATCH] initial commit --- README.md | 472 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 472 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2e0a994 --- /dev/null +++ b/README.md @@ -0,0 +1,472 @@ +# Libreboot T480 flash full guide + +## Dependencies +We need to install a bunch of dependencies we'll list them below and we'll share how to do it + +### GIT +Install git following your OS + +- [Debian](https://git-scm.com/downloads/linux) +- ... + + +### lbmk +```sh +git clone https://codeberg.org/libreboot/lbmk +cd lbmk +``` + +#### Install build dependencies: + +- debian: +```sh +./mk dependencies debian +``` + +- arch: + +```sh +./mk dependencies arch +``` +- ... + +#### nvmutil + +``` +cd /projects/clones/lbmk/util/nvmutil +make install +``` + +#### ifdtool + +``` +cd /projects/clones/lbmk/src/coreboot/default/util/ifdtool +make install +``` + +#### nvmutil + +``` +cd /projects/clones/lbmk/src/coreboot/default/util/ifdtool +make install +``` + +## Install flashrpog + +Install following [their docs](https://flashprog.org/wiki/Flashprog) + +## Build pico image + +Go to `lbmk` folder and build the `.uf2` files: + +```sh +cd /projects/clones/lbmk +./mk -b pico-serprog +``` + +Insert your raspberry pico H pressing the back button to mount to your system, then copy the `.uf2` file: + +``` +sudo cp /projects/clones/lbmk/bin/serprog_pico/serprog_pico.uf2 /media/user/RPI-RP2/ +``` + + + +## Backup firmware + +### 1- Do 3 backups just in case + +1- First backup we'll name it like `t480_stockbios_1.bin`: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_stockbios_1.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on serprog. +Reading flash... done. +``` + +2- Second backup we'll name it like `t480_stockbios_2.bin`: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_stockbios_2.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on serprog. +Reading flash... done. +``` + +3- Third backup we'll name it like `t480_stockbios_3.bin`: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_stockbios_3.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on serprog. +Reading flash... done. +``` + +### 2- Checksum + +We must verify the backup files are correct: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# sha256sum t480_stockbios*.bin +3ce1b1b03aebe90295dece36385b9bca6b31de505a239b6859be6b702bea054f t480_stockbios_1.bin +3ce1b1b03aebe90295dece36385b9bca6b31de505a239b6859be6b702bea054f t480_stockbios_2.bin +3ce1b1b03aebe90295dece36385b9bca6b31de505a239b6859be6b702bea054f t480_stockbios_3.bin +``` + +## Backup thunderbolt + +### 1- Connect the clamp properly otherwise you will get this error: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_tb_1.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +No EEPROM/flash device found. +Note: flashprog can never write if the flash chip isn't found automatically. +``` + +### 2- Backup: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_tb_1.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on serprog. +Reading flash... done. +root@lb-pomc:/projects/libreboot/bin/vic# flashprog -p serprog:dev=/dev/ttyACM0 -r t480_tb_2.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on serprog. +Reading flash... done. +``` + +### 3- Check sum + +```sh +root@lb-pomc:/projects/libreboot/bin/vic# sha256sum t480_tb*.bin +674fcbabd0161da5b81324e4eed18d07e22872e8fd74110d28663c348b99124c t480_tb_1.bin +674fcbabd0161da5b81324e4eed18d07e22872e8fd74110d28663c348b99124c t480_tb_2.bin +``` + +### 4- Erase all existing content: + +```sh +root@lb-pomc:/projects/libreboot# flashprog -p serprog:dev=/dev/ttyACM0 -E +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on serprog. +Erasing flash chip... Erase done. +``` + +### 5- Create `null.bin` from `/dev/zero` with `dd` command: + +```sh +root@lb-pomc:/projects/libreboot# dd if=/dev/zero of=null.bin bs=1M count=1 +1+0 records in +1+0 records out +1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00351479 s, 298 MB/s +root@lb-pomc:/projects/libreboot# ls -la +total 1036 +drwxr-xr-x 3 root user 4096 May 25 14:20 . +drwxr-xr-x 5 root user 4096 May 25 12:41 .. +drwxr-xr-x 3 root user 4096 May 25 12:41 bin +-rw-r--r-- 1 root root 1048576 May 25 14:20 null.bin +``` + +### 6- Write `null.bin` to thunderbolt flash: + +```sh +root@lb-pomc:/projects/libreboot# flashprog -p serprog:dev=/dev/ttyACM0 -w null.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on serprog. +Reading old flash chip contents... done. +Erasing and writing flash chip... Erase/write done. +Verifying flash... VERIFIED. +``` + +## Flash thunderbolt + +We'll flash `tb.bin` to the thunderbolt memory (close to the bios cell): + +```sh +root@lb-pomc:/projects/libreboot/bin/vic/rom# flashprog -p serprog:dev=/dev/ttyACM0 -w /projects/clones/lbmk/vendorfiles/t480/tb.bin +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q80.V" (1024 kB, SPI) on serprog. +Reading old flash chip contents... done. +Erasing and writing flash chip... Erase/write done. +Verifying flash... VERIFIED. +``` + + +## Flah Firmware +Seelct .rom to flash libreboot firmware to the firmware flash of the 4580 + +### 1- Install nvmutil + +If you forgot to do it please do it now: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic/rom# cd /projects/clones/lbmk/util/nvmutil +root@lb-pomc:/projects/clones/lbmk/util/nvmutil# make install +install nvm /usr/local/bin/nvroot@lb-pomc:/projects/libreboot/bin/vic/rom# /projects/clones/lbmk/elf/ifdtool/default/ifdtool -i gbe:flashregion_3_gbe.bin seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom +Warning: No platform specified. Output may be incomplete +File seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom is 16777216 bytes +File flashregion_3_gbe.bin is 8192 bytes +Adding flashregion_3_gbe.bin as the GbE section of seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom.new +Writing new image to seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom.new +m +``` + +## 2- Change mac address + +- Extract all `.bin` from the `.rom` so we can override the macaddress + + ```sh + root@lb-pomc:/projects/libreboot/bin/vic# cp /projects/clones/lbmk/bin/t480_vfsp_16mb/seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom /projects/libreboot/bin/vic/rom/ + root@lb-pomc:/projects/libreboot/bin/vic# cd /projects/libreboot/bin/vic/rom/ + root@lb-pomc:/projects/libreboot/bin/vic/rom# /projects/clones/lbmk/elf/ifdtool/default/ifdtool --platform sklkbl -x seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom + File seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom is 16777216 bytes + Flash Region 0 (Flash Descriptor): 00000000 - 00000fff + Flash Region 1 (BIOS): 00114000 - 00ffffff + Flash Region 2 (Intel ME): 00003000 - 00113fff + Flash Region 3 (GbE): 00001000 - 00002fff + Flash Region 4 (Platform Data): 07fff000 - 00000fff (unused) + Flash Region 5 (Device Exp1): 07fff000 - 00000fff (unused) + Flash Region 6 (Secondary BIOS): 07fff000 - 00000fff (unused) + Flash Region 7 (Reserved): 07fff000 - 00000fff (unused) + Flash Region 8 (EC): 07fff000 - 00000fff (unused) + Flash Region 9 (Device Exp2): 07fff000 - 00000fff (unused) + Flash Region 10 (IE): 07fff000 - 07ffffff + Error while writing: Bad address + Flash Region 11 (10GbE_0): 07fff000 - 07ffffff + Error while writing: Bad address + Flash Region 12 (10GbE_1): 07fff000 - 07ffffff + Error while writing: Bad address + Flash Region 13 (Reserved): 07fff000 - 07ffffff + Error while writing: Bad address + Flash Region 14 (Reserved): 07fff000 - 07ffffff + Error while writing: Bad address + Flash Region 15 (PTT): 07fff000 - 07ffffff + Error while writing: Bad address + ``` + +- Set random macaddress + ```sh + root@lb-pomc:/projects/libreboot/bin/vic/rom# /projects/clones/lbmk/util/nvmutil/nvm flashregion_3_gbe.bin setmac 38:E7:E9:BF:4A:BC + 256 bytes read from file 'flashregion_3_gbe.bin' + MAC address to be written: 38:E7:E9:BF:4A:BC + Wrote MAC address to part 0: 38:e7:e9:bf:4a:bc + Wrote MAC address to part 1: 38:e7:e9:bf:4a:bc + The following nvm words were written: + MAC (part 0): 38:e7:e9:bf:4a:bc + 00000000 38 e7 e9 bf 4a bc 01 08 ff ff 14 00 cf 00 00 80 + 00000010 00 10 ff ff c3 10 5d 22 aa 17 d7 15 00 00 00 00 + 00000020 00 00 00 00 00 80 05 a7 2c 30 00 10 00 00 00 0c + 00000030 62 2a 02 0a 43 08 13 01 d7 15 ad ba d7 15 d8 15 + 00000040 ad ba d7 15 ad ba d7 15 00 00 80 80 00 4e 86 08 + 00000050 00 00 00 00 07 00 00 20 20 00 00 00 00 0e 00 00 + 00000060 00 01 00 40 28 12 07 40 ff ff ff ff ff ff ff ff + 00000070 ff ff ff ff ff ff ff ff ff ff 00 02 ff ff 54 75 + MAC (part 1): 38:e7:e9:bf:4a:bc + 00000000 38 e7 e9 bf 4a bc 01 08 ff ff 14 00 cf 00 00 80 + 00000010 00 10 ff ff c3 10 5d 22 aa 17 d7 15 00 00 00 00 + 00000020 00 00 00 00 00 80 05 a7 2c 30 00 10 00 00 00 0c + 00000030 62 2a 02 0a 43 08 13 01 d7 15 ad ba d7 15 d8 15 + 00000040 ad ba d7 15 ad ba d7 15 00 00 80 80 00 4e 86 08 + 00000050 00 00 00 00 07 00 00 20 20 00 00 00 00 0e 00 00 + 00000060 00 01 00 40 28 12 07 40 ff ff ff ff ff ff ff ff + 00000070 ff ff ff ff ff ff ff ff ff ff 00 02 ff ff 54 75 + 256 bytes written to file 'flashregion_3_gbe.bin' + ``` +- Overwrite the new macaddress gbe to the initial `.rom`: + + ```sh + root@lb-pomc:/projects/libreboot/bin/vic/rom# /projects/clones/lbmk/elf/ifdtool/default/ifdtool -i gbe:flashregion_3_gbe.bin seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom + Warning: No platform specified. Output may be incomplete + File seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom is 16777216 bytes + File flashregion_3_gbe.bin is 8192 bytes + Adding flashregion_3_gbe.bin as the GbE section of seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom.new + Writing new image to seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom.new + ``` +## Flash firmware + +Change the clamp to the firmware flash (should be in the middle of the board), and: + +```sh +root@lb-pomc:/projects/libreboot/bin/vic/rom# flashprog -p serprog:dev=/dev/ttyACM0 -w seabios_t480_vfsp_16mb_libgfxinit_corebootfb.rom.new +flashprog p1.4 on Linux 6.1.0-33-amd64 (x86_64) +flashprog is free software, get the source code at https://flashprog.org + +Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns). +serprog: Programmer name is "pico-serprog" +Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on serprog. +Reading old flash chip contents... done. +Erasing and writing flash chip... Erase/write done. +Verifying flash... VERIFIED. +root@lb-pomc:/projects/libreboot/bin/vic/rom# +``` + + +## Install OS + + +### Linux mint +[download](https://linuxmint.com/download_lmde.php) + +#### 🧰 **What You Need** + +* A USB stick (4 GB+ recommended). +* A Debian `.iso` file downloaded (e.g., `lmde-6-cinnamon-64bit.iso`). +* A working Debian system. +* Basic comfort with the terminal. + +--- + +#### 🚦 **WARNING** + +All data on the USB stick will be permanently erased during this process. Make sure you have selected the **correct device name** (e.g., `/dev/sdb`) to avoid overwriting your system drive. + +--- + +#### 🧭 **Full Terminal-Only Instructions** + +--- + +###### 🔍 **Step 1: Insert the USB and Identify the Device** + +Run the following command to list all storage devices: + +```bash +lsblk +``` + +Look for your USB stick. Example: + +``` +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +sda 8:0 0 512G 0 disk +├─sda1 8:1 0 512G 0 part / +sdb 8:16 1 16G 0 disk +└─sdb1 8:17 1 16G 0 part /media/yourname/USB +``` + +➡️ In this case, the USB device is `/dev/sdb`. + +**Do NOT use `/dev/sda` (your internal drive).** + +--- + +###### 📤 **Step 2: Unmount the USB** + +Unmount all partitions of the USB stick: + +```bash +sudo umount /dev/sdX* +``` + +Replace `X` with the letter corresponding to your USB (e.g., `b`). + +--- + +###### 🔄 **Step 3: Optional – Wipe and Format USB (if needed)** + +If your USB had problems or weird partitions, you can clear it: + +```bash +sudo dd if=/dev/zero of=/dev/sdX bs=1M count=10 +``` + +Then create a fresh partition table: + +```bash +sudo parted /dev/sdX --script mklabel msdos +``` + +This step is **optional** if you're flashing an `.iso` that will overwrite the whole device anyway (like Debian install images do). + +--- + +###### 💾 **Step 4: Flash the `.iso` File Using `dd`** + +Run this command to write the ISO image to the USB: + +```bash +sudo dd if=/path/to/debian.iso of=/dev/sdX bs=4M status=progress oflag=sync +``` + +**Replace:** + +* `/path/to/debian.iso` with the actual path to your ISO file. +* `/dev/sdX` with your USB device (e.g., `/dev/sdb`). + +**Example:** + +```bash +sudo dd if=~/Downloads/lmde-6-cinnamon-64bit.iso of=/dev/sdb bs=4M status=progress oflag=sync +``` + +Wait patiently — `dd` takes time and shows progress if the `status=progress` flag is used. + +--- + +###### 🔒 **Step 5: Sync and Eject the USB** + +To flush write buffers and ensure all data is written: + +```bash +sync +``` + +Then eject the USB: + +```bash +sudo eject /dev/sdX +``` + +Now you can safely remove the USB stick. + +--- + +#### ✅ Your USB is now ready to boot + +You can now insert it into the target computer (like your Libreboot T480), power it on, and boot from USB. + +--- + +#### 🧩 **Extra Tips** + +* If you're on **Libreboot with SeaBIOS**, press **`ESC`** during boot to choose the boot device. +* If you encounter boot issues, double-check that you used the **device** (`/dev/sdX`) and not a **partition** (`/dev/sdX1`) in the `dd` command.