flashromの1.0をEl Capitanでビルドしてみました。
1.0でMacではdirecthwというコードを使うようになったのでこれをcloneします。
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をちょっとだけいじります。
$ 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サポートをライターを手に入れ試してみました。
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が良いとおもってましたが、最近は結構問題が多いので、一つの方法としてはありだと思います。
使い方はこちら
1.2も同じ手順でビルドできました。
SOP16のソケット(Aitendoの[K-ADP12716(28)D04])も手に入れました。ピン間が広いので、幅のあるブレッドボードを使う必要があります。