(flashrom)(spi-sun7i)(libreboot) 艱苦刷新x60t

· 63字 · 1分钟

御坂有一臺ThinkPad X60 Tablet筆記本電腦,這個型號的筆電受到自由韌體、BIOS的替代品LibreBoot的支援。暑假的時候御坂被迫爲這臺機器安裝Windows,但SeaBIOS又無法引導Windows。於是御坂刷回原廠的鳳凰BIOS,卻一不小心刷黑了。沒有編程器,沒有熱風槍,御坂也沒法救磚。

解決方案 🔗

編程器算啥?御坂有Cubietruck,「原生」支援SPI匯流排協定。

熱風槍就算給御坂,御坂也不會用,不過系統內編程(In-system Programming,爲什麼也是I、S、P三個字母)是個不錯的主意。淘寶上搜尋如上內容肯定買不到,因爲他們都管此類「裝置」叫——測試夾……

實施 🔗

說得容易,其實用那個夾子就很費勁,御坂花了一下午也沒成功。

spi-sun7i 🔗

在script.fex中,將[spi2_para]一節中更改(cubietruck引出的是SPI2):

spi_used = 1
`</pre>

並增加

<pre>`[spi_devices]
spi_dev_num = 1
[spi_board0]
modalias = "spidev"
max_speed_hz = 12000000
bus_num = 2
chip_select = 0
mode = 0
full_duplex = 1
manual_cs = 0

而且某些版本的Linux-sunxi核心不帶sun7i的spi驅動,害得御坂還得從ArchLinuxARM重啓到Fedora(Remix)

  • 至此,應該已經能找到/dev/spidev2.0裝置檔案

Flashrom 🔗

就算有/dev/spidev2.0,Flashrom也不一定能認到芯片。 御坂x60t的芯片是MX25L1605D,但-c指定也說找不到Flash芯片,還警告御坂說「如果芯片不是自動識別出來的,則Flashrom絕不會向其中寫入任何資料」。

原因有二,

  1. 有些就是Flashrom無理取鬧,把那些用於報錯退出的代碼註釋掉就好了。
  2. 線沒連好,夾子沒夾好。表現爲spidev_test -D /dev/spidev2.0無法顯示,註釋掉「問題」代碼後顯示全F或全0。(spidev_test命令的原始碼可在網路上找到,應該是Linux核心文檔附帶的代碼。)

對於x60t的MX25L1605D這顆,御坂還要特別提醒,

  1. flashchips.c裏搜尋MX25L1605D,將.write = spi_chip_write_256,改爲.write = spi_chip_write_1,,不然可能刷寫失敗;
  2. 主機板要接上電源(當然,千萬別開機),然後再刷寫。

LibreBoot 🔗

最後吐槽一下,LibreBoot的最新正式版中的x60t/libreboot_usdvorak*.rom不知是不是有問題,怎麼刷都黑屏。結果換了測試版,好了… 又換usqwerty,沒問題… 還是說御坂的刷寫方式有誤導致黑屏?御坂疑惑道。

comments powered by Disqus