2019年1月21日月曜日

FlashROMの書き換え

今までは、リスクをとった書き換えをやっていたが
http://continue-to-challenge.blogspot.com/2018/05/fon2405eopenwrt.html
一度できたマスターなROMからまるごとコピーする方法にした。
NaonoPIを有効活用してROMライターになってもらった。


左はFONでROM交換できるように交換用のソケットをつけた。
http://www.aitendo.com/product/16564
右はNanoPIでSPIラインをクリップをつけた。
http://www.aitendo.com/product/7311

準備

ハード

NanoPIのレイアウトは
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO#Diagram.2C_Layout_and_Dimension
【NanoPI】
pin name
17 3.3V  
19 SI
20 GND
21 SO
23 CLK
24 CS
【クリップ】
pin name
1 CS#  
2 SO
3 WP#(VCCへ)
4 GND
5 SI
6 SCLK
7 HOLD#(VCCへ)
8 VCC

ソフト

flashromをインストール
apt-get install flashrom
このあたりが参考になる
https://www.flashrom.org/RaspberryPi

読み書き

まずはデバイスを検出してみる

root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L1605A/MX25L1606E/MX25L1608E" (2048 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L1605D/MX25L1608D/MX25L1673E" (2048 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L1605", "MX25L1605A/MX25L1606E/MX25L1608E", "MX25L1605D/MX25L1608D/MX25L1673E"
Please specify which chip definition to use with the -c <chipname> option.
2MのフラッシュROMだねー

読み込んでみる

root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0 -c "MX25L1605" -r /tmp/2m_base.img
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on linux_spi.
Reading flash... done.
2m_base.imgに保存。これを8MBのフラッシュに書き込もうと思う。

書き込んでみる

ファイルサイズをデバイスのサイズに合わせる必要があるみたいなので
この場合は、8MBにする感じ。
root@NanoPi-NEO:~# dd if=/tmp/2m_base.img of=/tmp/8m_base.img ibs=8M conv=sync
0+1 records in
16384+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.238071 s, 35.2 MB/s
これを、8MBのフラッシュに書いてみる
root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E" (8192 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E"
Please specify which chip definition to use with the -c <chipname> option.
書くときは、wでファイル名を指定する。
root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0 -c "MX25L6406E/MX25L6408E" -w /tmp/8m_base.img
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
これでOK。
フラッシュROMの書き換えが捗るぞー。
参考
https://qiita.com/yamori813/items/28c3fe71840c3277e409

0 件のコメント:

コメントを投稿