El Capitanでflashrom 1.0

[flashrom](https://www.flashrom.org/Flashrom)の1.0をEl Capitanでビルドしてみました。

1.0でMacではdirecthwというコードを使うようになったのでこれをcloneします。

https://review.coreboot.org/directhw.git

directhwはframeworkとしてビルドするようなのですが、framework のビルドにはxcodeが必要なのですが、Command Line Toolsしか入れてないのでccでdylibでビルドしてみます。

```
$ cd directhw/macosx/DirectHW/
$ cc -c -fPIC DirectHW.c
$ cc -shared -framework IOKit -install_name @executable_path/libDirectHW.dylib -o libDirectHW.dylib DirectHW.o
```

出来あがったlibDirectHW.dylibとDirectHW.hをflashromのソースディレクトリにコピーします。

libusb.hのpathを指定してlibFTDIもビルドします。cmakeは入れてないのでハンドパワーでビルドします。

```
$ cd src
$ sed 's/@MAJOR_VERSION@/1/;s/@MINOR_VERSION@/4/;s/@.*@//' ftdi_version_i.h.in > ftdi_version_i.h
$ cc -I../../ -c *.c
$ ar r libftdi.a *o
```

これもlibftdi.aとftdi.hをflashromのソースディレクトリにコピーします。

libusbは普通にconfigureしてmakeすればlibusb/.libs/にdylibができあがります。libusb.hとlibusb-1.0.dylibをコピーしてlibusb.dylibからシンボリックリンク張っておきます。

libusb-1.0.dylibもpathを同じディレクトリに書き換えておきます。

```
$ install_name_tool -id @executable_path/libusb-1.0.dylib libusb-1.0.dylib
```

あとはflashromのMakefileとhwaccess.hをちょっとだけいじります。

```diff
$ git diff
diff --git a/Makefile b/Makefile
index b13cf7e..4b198bb 100644
--- a/Makefile
+++ b/Makefile
@@ -1007,7 +1007,8 @@ PCILIBS += -l$(shell uname -m)
 else
 ifeq ($(TARGET_OS), Darwin)
 # DirectHW framework can be found in the DirectHW library.
-PCILIBS += -framework IOKit -framework DirectHW
+#PCILIBS += -framework IOKit -framework DirectHW
+PCILIBS += -framework IOKit -l DirectHW
 endif
 endif
 endif
diff --git a/hwaccess.h b/hwaccess.h
index af7054b..25eb7c6 100644
--- a/hwaccess.h
+++ b/hwaccess.h
@@ -179,7 +179,8 @@ cpu_to_be(64)
 
 #if defined(__MACH__) && defined(__APPLE__)
     /* Header is part of the DirectHW library. */
-    #include <DirectHW/DirectHW.h>
+//    #include <DirectHW/DirectHW.h>
+    #include "DirectHW.h"
 #endif
 
   /* This is the usual glibc interface. */
```

これでビルドできます。

```
$ make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no CFLAGS=-I. LDFLAGS=-L.
```

Appleのドライバを外してから試さないと動きません。

```
$ sudo kextunload /System/Library/Extensions/AppleUSBFTDI.kext
```

ちゃんと動きました。

```
$ ./flashrom -p ft2232_spi:type=232H 
flashrom p1.0-125-g3432349-dirty on Darwin 15.6.0 (x86_64)
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 ft2232_spi.
Found Macronix flash chip "MX25L1605A/MX25L1606E/MX25L1608E" (2048 kB, SPI) on ft2232_spi.
Found Macronix flash chip "MX25L1605D/MX25L1608D/MX25L1673E" (2048 kB, SPI) on ft2232_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.
```

あまり細かく調べてませんが1.0のftdiはとても早くなっています。2Mの読み込みが0.9.7(MacBook Air Original/10.6)が18秒に対して、1.0(Mac mini 2010/10.11)が3秒になっていました。MacやOSが違うので、一概には比べられないのですが。

以前使っていたバージョンには無かったch341aサポートをライターを手に入れ試してみました。

![写真（2018-10-22 18.43）.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/c9d5eddf-d829-d2f7-2c6e-7ee97851f09c.jpeg)


ZIFソケットの右側の8ピンがI2C EEPROM用で左側の8ピンがSPI Flash用です。flashromはSPI Flashのみ対応してます。ZIFソケットはTFXTOOLです。^ ^;

```
$ ./flashrom -p ch341a_spi -c MX25L6405 -r test.bin
```

こちらは8Mの読み込みに68秒なので、ちょっと遅いです。

パラレルflashも問題なく使えました。

```
$ ./flashrom  -p serprog:dev=/dev/cu.usbserial-A7004BTR:57600
flashrom p1.0-125-g3432349-dirty on Darwin 15.6.0 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Some requested serial options did not stick, continuing anyway.
serprog: Programmer name is "ATMegaXX8 SFR"
Found Eon flash chip "EN29F002(A)(N)T" (256 kB, Parallel) on serprog.
No operations were specified.
```

flashromはconfigureを使わずmakeだけでやるってポリシーのようです。昔はconfigureが良いとおもってましたが、最近は結構問題が多いので、一つの方法としてはありだと思います。

使い方は[こちら](https://qiita.com/yamori813/items/28c3fe71840c3277e409)

1.2も同じ手順でビルドできました。

SOP16のソケット(Aitendoの[K-ADP12716(28)D04])も手に入れました。ピン間が広いので、幅のあるブレッドボードを使う必要があります。

![写真（2022-09-02 14.44） #2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/cad84fc2-2f0e-9769-f9fc-155fde5d3022.jpeg)