前言
本贴分享旨在减少编程器的购买,建议购买适用于自己主板的flash芯片,以免刷砖
准备
需要自己编译flashrom
参考于 ArchLinux::flashrom
感谢 @yetist
$ git clone https://github.com/flashrom/flashrom.git -b v1.2
$ cd flashrom
$ curl -L "https://raw.githubusercontent.com/loongarchlinux/extra/refs/heads/main/flashrom/0001-Loongson-3-SPI-tmp.patch" > 1.patch
$ curl -L "https://raw.githubusercontent.com/loongarchlinux/extra/refs/heads/main/flashrom/0002-Speed-up.patch" > 2.patch
$ curl -L "https://raw.githubusercontent.com/loongarchlinux/extra/refs/heads/main/flashrom/0003-Add-support-for-loongarch64.patch" > 3.patch
$ git am 1.patch
$ git am 2.patch
$ git am 3.patch
编译 flashrom 需要一些依赖,如在 Loongnix20 上需要 libusb-1.0-0-dev libpci-dev
编译
在flashrom的目录中make时不报错即可 $ make -j4
注意事项
刷固件是非常危险的事, 得益于龙芯提供的固件很稳定, 加上自己买了一些flash芯片备份, 在龙芯机器上未有实际的变砖案例。
笔者认知, flash分两种, 分别是 25Q64 (3V) 和 25LQ64 (1.8V), 可以取下flash芯片看下芯片丝印。笔者使用的板子是 3A5000-7A2000-EVB, flash芯片上写明的是 25Q64 , 实际测试出来的电压是 1.8V, 因此使用了一些 3V 的flash发现写入失败。
通常我是不会刷现有的flash芯片的,而是购入flash芯片后,刷入新的flash芯片, 避免flash无效导致变砖, 因此未有实际变砖案例。
读取和写入
因为 3a5000 与 3a6000 的 SPICTRL 偏移与 3a4000 一致, 因此参数使用 cpu=3a4000 即可.
读取固件备份
$ sudo ./flashrom -p loongson3_spi:cpu=3a4000 -r backup.fd
这条命令将读取固件并保存为 backup.fd, 先备份, 即便是变砖后仍然可以通过编程器刷回来
写入固件:
首先取下旧flash芯片,开机状态下取下flash芯片一般是没问题的,再从 Firmware 中找到自己所需要的固件文件, 例如我需要的是 1.fd
$ sudo ./flashrom -p loongson3_spi:cpu=3a4000 -w 1.fd
写入后重启即可, 在本机上成功重启