feat: add to vendor and update docs
This commit is contained in:
@@ -2,13 +2,204 @@
|
||||
|
||||
## Update firmware to specific version
|
||||
|
||||
1- Download frimware version: [n24ur39w](https://download.lenovo.com/pccbbs/mobiles/n24ur39w.iso) or download from vendor
|
||||
This section explains how to convert a vendor BIOS update `.iso` into a bootable USB image using `geteltorito`, and then write that generated `.img` to a USB drive using `dd`.
|
||||
|
||||
2- Install `[geteltorito](https://github.com/rainer042/geteltorito)`
|
||||
> **WARNING**
|
||||
>
|
||||
> The `dd` command will completely overwrite the selected USB device.
|
||||
> Always write to the whole USB disk, for example `/dev/sdb`, **not** to a partition such as `/dev/sdb1`.
|
||||
> Double-check the target device before running `dd`.
|
||||
|
||||
3- Generate .img from .iso `geteltorito -o t480_bios_n24ur39w.img /home/lb/Downloads/n24ur40w.iso`.
|
||||
### 1- Download the vendor BIOS update ISO
|
||||
|
||||
4- Flash iso to USB `sudo dd if=t480_bios_n24ur39w.img of=/dev/sdX bs=4M conv=fsync status=progress`
|
||||
Download the required firmware version from Lenovo or from the vendor support page.
|
||||
|
||||
Example for ThinkPad T480:
|
||||
|
||||
```sh
|
||||
mkdir -p ~/Downloads/firmware/t480
|
||||
cd ~/Downloads/firmware/t480
|
||||
|
||||
wget https://download.lenovo.com/pccbbs/mobiles/n24ur39w.iso
|
||||
```
|
||||
|
||||
If you downloaded a different version, adjust the ISO filename in the following commands.
|
||||
|
||||
### 2- Install `geteltorito`
|
||||
|
||||
`geteltorito` extracts the El Torito boot image from a bootable vendor ISO.
|
||||
|
||||
#### Debian / Ubuntu / Linux Mint
|
||||
|
||||
On Debian-based systems, `geteltorito` is provided by the `genisoimage` package:
|
||||
|
||||
```sh
|
||||
sudo apt update
|
||||
sudo apt install genisoimage
|
||||
```
|
||||
|
||||
Check that it is available:
|
||||
|
||||
```sh
|
||||
command -v geteltorito
|
||||
geteltorito --help || true
|
||||
```
|
||||
|
||||
#### Arch / Manjaro
|
||||
|
||||
On Arch-based systems, install it from the AUR:
|
||||
|
||||
```sh
|
||||
yay -S geteltorito
|
||||
```
|
||||
|
||||
or:
|
||||
|
||||
```sh
|
||||
paru -S geteltorito
|
||||
```
|
||||
|
||||
Without an AUR helper:
|
||||
|
||||
```sh
|
||||
cd /tmp
|
||||
git clone https://aur.archlinux.org/geteltorito.git
|
||||
cd geteltorito
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
Depending on the package, the command may be installed as `geteltorito` or `geteltorito.pl`. Check which one exists:
|
||||
|
||||
```sh
|
||||
command -v geteltorito || command -v geteltorito.pl
|
||||
```
|
||||
|
||||
### 3- Extract the bootable `.img` from the vendor `.iso`
|
||||
|
||||
Go to the folder where the ISO was downloaded:
|
||||
|
||||
```sh
|
||||
cd ~/Downloads/firmware/t480
|
||||
```
|
||||
|
||||
If your system provides the command as `geteltorito`:
|
||||
|
||||
```sh
|
||||
geteltorito -o t480_bios_n24ur39w.img n24ur39w.iso
|
||||
```
|
||||
|
||||
If your system provides the command as `geteltorito.pl`:
|
||||
|
||||
```sh
|
||||
geteltorito.pl -o t480_bios_n24ur39w.img n24ur39w.iso
|
||||
```
|
||||
|
||||
Verify that the `.img` file was created:
|
||||
|
||||
```sh
|
||||
ls -lh n24ur39w.iso t480_bios_n24ur39w.img
|
||||
file t480_bios_n24ur39w.img
|
||||
```
|
||||
|
||||
### 4- Insert the USB and identify the correct device
|
||||
|
||||
Insert the USB drive and run:
|
||||
|
||||
```sh
|
||||
lsblk -o NAME,SIZE,MODEL,TRAN,FSTYPE,MOUNTPOINTS
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```text
|
||||
NAME SIZE MODEL TRAN FSTYPE MOUNTPOINTS
|
||||
sda 476.9G Samsung SSD sata /
|
||||
sdb 14.6G USB Flash Disk usb vfat /run/media/user/USB
|
||||
```
|
||||
|
||||
In this example, the USB is:
|
||||
|
||||
```text
|
||||
/dev/sdb
|
||||
```
|
||||
|
||||
Do **not** use the internal disk. Do **not** use a partition like `/dev/sdb1`.
|
||||
|
||||
Set a variable with the USB disk you identified:
|
||||
|
||||
```sh
|
||||
USB=/dev/sdX
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```sh
|
||||
USB=/dev/sdb
|
||||
```
|
||||
|
||||
### 5- Unmount all mounted USB partitions
|
||||
|
||||
Before writing the image, unmount any mounted partitions from the USB:
|
||||
|
||||
```sh
|
||||
lsblk "$USB"
|
||||
sudo umount "${USB}"* 2>/dev/null || true
|
||||
```
|
||||
|
||||
### 6- Prepare / wipe the USB before flashing the image
|
||||
|
||||
For an image generated by `geteltorito`, you do **not** need to format the USB as FAT32, exFAT or ext4.
|
||||
|
||||
The correct preparation is to remove old filesystem signatures and partition metadata so the firmware image can be written cleanly with `dd`.
|
||||
|
||||
Recommended:
|
||||
|
||||
```sh
|
||||
sudo wipefs -a "$USB"
|
||||
```
|
||||
|
||||
Optional stronger wipe of the first part of the USB:
|
||||
|
||||
```sh
|
||||
sudo dd if=/dev/zero of="$USB" bs=1M count=16 status=progress conv=fsync
|
||||
sudo blockdev --rereadpt "$USB" || true
|
||||
```
|
||||
|
||||
If `blockdev --rereadpt` fails because the device is busy, unplug and reinsert the USB, then set `USB=/dev/sdX` again after checking with `lsblk`.
|
||||
|
||||
### 7- Flash the generated `.img` to the USB with `dd`
|
||||
|
||||
Write the `.img` to the **whole USB disk**:
|
||||
|
||||
```sh
|
||||
sudo dd if=t480_bios_n24ur39w.img of="$USB" bs=4M status=progress conv=fsync
|
||||
sync
|
||||
```
|
||||
|
||||
Alternative using `oflag=sync`:
|
||||
|
||||
```sh
|
||||
sudo dd if=t480_bios_n24ur39w.img of="$USB" bs=4M status=progress oflag=sync
|
||||
sync
|
||||
```
|
||||
|
||||
### 8- Verify and eject the USB
|
||||
|
||||
Check how the USB looks after writing:
|
||||
|
||||
```sh
|
||||
lsblk -o NAME,SIZE,MODEL,TRAN,FSTYPE,MOUNTPOINTS "$USB"
|
||||
```
|
||||
|
||||
Eject it safely:
|
||||
|
||||
```sh
|
||||
sudo eject "$USB"
|
||||
```
|
||||
|
||||
The USB should now be bootable. Insert it into the ThinkPad, boot from USB, and follow the vendor BIOS update instructions.
|
||||
|
||||
On many ThinkPads, press `F12` during boot to open the boot menu.
|
||||
|
||||
## Prepare flahser
|
||||
|
||||
|
||||
Reference in New Issue
Block a user