shareof / private-docs

0 stars 1 forks source link

IceBreakv9.0 Progress #32

Open shareof opened 4 years ago

shareof commented 4 years ago

IceBreakv9.0 開発ログ [事前調査] 2020/07/21

環境 image

目標

go get コマンドでパッケージをローカルにクローンする

TML[ZsH] go get github.com/cookieo9/goffi/fcall
# github.com/cookieo9/goffi/ffi
src/github.com/cookieo9/goffi/ffi/ffi.go:5:11: fatal error: 'ffi.h' file not found
 #include <ffi.h>
          ^~~~~~~
1 error generated.

'ffi.h' file not foundというヘッダファイルが見つからないエラーが発生した。 まず、はじめにffi.hというヘッダーファイルは何を意味するものであるかを探るため、このキーワードで検索をかけてみた。 するとlibffiというパッケージに関連することがわかったので内容を調べると以下のようなものであった。

http://lfsbookja.osdn.jp/BLFS/svn-ja/general/libffi.html

libffi ライブラリは、さまざまな呼出規約 (calling conventions) に対しての、移植性に優れた高レベルのプログラミングインターフェースを提供します。 このライブラリを用いることにより、プログラム実行時に呼出インターフェース記述 (call interface description) により関数を指定し呼び出すことができるようになります。

つまり、libffiパッケージのインストールを行うことでff.hを内部に包括しているため、事が足りる事がわかった。 ここで先ほどのgo getコマンド時に発せられたエラーに戻り以下のような思考をしてみた。

ファイルが見つからないということはbrewのレポジトリを更新してから再度試してみればよいのではとおもったので brew upgradeでリポジトリのハッシュ値を最新にし、brew reinstall libffiで再度インストールを試みた。 そしてその後に再度go getでパッケージをローカルにクローンしようと試みたが、結果は変わらなかった。

試しにlibffiパッケージのインストールは既に済んでいるというコンソールログがあったので本当にbrew listに存在するのかも調べてみた。

TML[ZsH] brew install libffi
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
==> Updated Casks
alt-tab

Warning: libffi 3.3 is already installed and up-to-date
To reinstall 3.3, run `brew reinstall libffi`

brew listでインストール済みパッケージの洗い出しを行い、libffiで絞り込みをかけてみたところ正常にインストールされていた。

TML[ZsH] brew list | grep libffi
libffi

次にgo get でパッケージのインストールを行う際にデバッグオプションなるものがないか調べてみた。 -vオプションで詳細ログを追跡できるという記述があったので実行してみる。

TML[ZsH] go get -v github.com/cookieo9/goffi/fcall
github.com/cookieo9/goffi/ffi
# github.com/cookieo9/goffi/ffi
src/github.com/cookieo9/goffi/ffi/ffi.go:5:11: fatal error: 'ffi.h' file not found
 #include <ffi.h>
          ^~~~~~~
1 error generated.

結果としては-vオプションを付けていない時となんら挙動は変わらなかった。

次のアクションとしてIssueから類似しているトピックがないか探すことにした。 https://github.com/egallesio/STklos/issues/6 上記のIssueに類似ているとトピックがあったので候補となるアクションをいろいろと試してみたが、解決にはいたらなかった。 文末の最後にHope it works on other MacOs versions.という言葉が添えられたいたのでおそらくこの筆者もまだ解決にいたっていないと感じた。

Next Action

https://qiita.com/YasuakiNakazawa/items/3109df682af2a7032f8d https://github.com/bamchoh/pasori

shareof commented 3 years ago

IceBreakv9.0 開発ログ [事前調査] 2020/07/22

目標

まだ手元にR/Wがないので、先にgo getでpasoriパッケージの取得だけを行う

Zsh-> ~/gocode
TML[ZsH] go get github.com/bamchoh/pasori
# pkg-config --cflags  -- libusb-1.0
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
pkg-config: exit status 1

すると早速エラーが発生してしまった。原因はどうやらlibusbと呼ばれるパッケージがMac本体にインストールされていないことによってPKG_CONFIG_PATH環境変数からlibusbの所在を見つけられないというものだと予測した。

そのためbrew install libusbでlibusbパッケージのインストールを行ってPKG_CONFIG_PATH環境変数にbrewでインストールしたlibusbのインストール先(brew --prefix)を指定し、exportしてから再度go getを実行してみた。

結果として正常にパッケージを取り込むことができた。

$ export PKG_CONFIG_PATH=$(brew --prefix libusb)/lib/pkgconfig
go get
TML[ZsH] go get github.com/bamchoh/pasori && echo "Succeed\!"
Succeed!

最後にPKG_CONFIG_PATH環境変数は念のためexportする必要があるか調査を行った。 理由としてはzshrcに記述するのは極力避けたいと思ったからである

# alias relogin='exec $SHELL -l'
$ relogin
TML[ZsH] echo $PKG_CONFIG_PATH
Zsh-> ~
TML[ZsH] cd $GOPATH && go get github.com/bamchoh/pasori && echo "Succeed\!"
Succeed!

結果としてはPKG_CONFIG_PATHをexportしなくてもlibusbパッケージのロードを行えることがわかった。 念のためpkgのバイナリファイルも展開されている確認してみる。

TML[ZsH] ll pkg/darwin_amd64/github.com/bamchoh
total 104
drwxr-xr-x   3 hacknatural  staff     96 Jul 22 06:48 .
drwxr-xr-x  24 hacknatural  staff    768 Jul 22 06:48 ..
-rw-r--r--   1 hacknatural  staff  50254 Jul 22 07:10 pasori.a

問題なさそうであるので、次回からが実際にgoのコードで検証すすめる。 posoriのREADMEを参考にしIDmの取得を試みた。

package main

import (
    "fmt"
    "github.com/bamchoh/pasori"
    "log"
)

var (
    VID uint16 = 0x054C
    PID uint16 = 0x06C3
)

func main() {
    if idm, err := pasori.GetID(VID, PID); err != nil {
        log.Fatal(err.Error())
    } else {
        fmt.Println(idm)
    }
}

しかし、以下のようなエラーが発生した。

go run ./ic_reader/main.go
2020/07/22 21:02:12 failed to claim config 0 of device vid=054c,pid=06c3,bus=20,addr=1: device vid=054c,pid=06c3,bus=20,addr=1: configuration id 0 not found in the descriptor of the device. Available config ids: [1]
exit status 1

初見のエラーであったため、failed to claim config 0 of deviceというエラー内容でググってみることにした。 https://stackoverflow.com/questions/47695160/failed-to-claim-interface-0-device-or-resource-busy 上記のIssueをみると、USB接続に起因する問題であるということが見えてきた。

そのためまず、自前のMacでUSB接続が適切に認識されているか検証することにした。 CLIでUSBの接続を確認できるパッケージがあったのでbrew searchでサポートされていることを確認してからインストールしてみた。

$ brew intstall lsusb