大破ログ

日々大破、それと側転少々。PC関連その他、気になったことなどをつらつらと。

BUFFALO BHR-4GRV2 (ath79)

既にar71xx targetでサポートされている機種ですが、DTSベースのath79 targetへ移植を行いました。
某氏よりAR/QCAのBUFFALO機をごそっと頂いたうちの一つです。しばらく上手くいかない点があり悩んでいましたが、ようやく解決したのでPRを投げ、マージされました。まとめます。

仕様

有線機です。基板はおよそ同一の構成の無線機と共通らしく、各種部品は未実装ながらSoCからのアンテナ回路が伸びています。
QCA9557を搭載しています。2x2の11n/b/gな無線機能を内蔵していますが、BHR-4GRV2は有線機の為使用していません。

  • SoC: Qualcomm Atheros QCA9557 (720MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB
  • Flash: SPI Flash 16MB
  • WAN/LAN: 1000Mbps x1 / 1000Mbps x4
  • UART: 115200bps(LED側からVcc, TX, RX, GND)

OpenWrt化

2018/11/26 追記: この機種特有の問題に絡み、mtdパーティションの構成を変更しました。この際factoryファームの生成コードを削除したため、ar71xxと同じfactoryを使用する手順は今後使用できません。 ath79: modify mtd partitions for Buffalo BHR-4GRV2

2019/02/14 追記: 上記変更後のOpenWrt (ath79)ファームのインストール方法を書きました。 BHR-4GRV2へのOpenWrt (ath79)インストール – 鉄PCブログ

備考

  • 現時点ではath79は公式buildbotではビルドされないため、ユーザー側でビルドする必要がある -> source-onlyフラグが削除されて公式buildbotでのビルドが開始され、公式のダウンロードページ (downloads.openwrt.org) での提供が開始されました。
    当方でビルドしたイメージは taiha.net/jenkins に有(自己責任で使用すること)
  • BHR-4GRV2はメーカーファームでmtdパーティションの構成にクセがあり、rootfsが先、kernelが後、という形になっている
    • このため、kernelのサイズによってrootfsの始点が自由に変化し、Flash内を柔軟に利用できるOpenWrtの "firmware" パーティションが利用できない。
    • そのうえ、Kernelの始点を変更することもできないため(変更するとU-Bootが読み込めず起動できなくなる)、Kernelが固定サイズ(1,472KiB)に縛られてしまう。
      これが理由でビルド失敗する事例がar71xxで発生し、現在は "tiny" subtargetへ移動。ath79でもこれに倣い、tiny subtargetに置いた。
    • ar71xxではsysupgrade時のコードの簡略化の為 "kernel" と "rootfs" の範囲に "firmware" を被せて定義しており、ath79でも当初同様にdtsで二重定義した。しかしPRにおいて、メンテナ氏よりdtsにおける "sub partition" の記法を教示され、また追加で "この場合二重定義でfirmwareに見せかけてsysupgradeするのではなく、kernelとrootfsを個別にupgradeすべき" という指摘を頂いた。
      しかしながら、kernelとrootfsを個別にupgradeするには追加でscriptが必要になるため、正直書きたくなく、その方法は避けたかった。
      そこでipq806xのVR2600v等が使用している記法を思い出し提案したところ、メンテナ氏はその記法を把握しておらず、テストが必要ということになりテストした。その結果問題無くsysupgradeを行えたため、この方法でいくことになった。
      platform.shの記述は以下の通り。 [sourcecode language="bash"] # # Copyright (C) 2011 OpenWrt.org # PART_NAME=firmware REQUIRE_IMAGE_METADATA=1 platform_check_image() { return 0 } platform_do_upgrade() { local board=$(board_name) case "$board" in buffalo,bhr-4grv2) PART_NAME="rootfs:kernel" default_do_upgrade "$ARGV" ;; *) default_do_upgrade "$ARGV" ;; esac } [/sourcecode]

色々

今回ath79への移植を初めて行ったものの、知識の無さと初期はまともにデバイスドライバ側のコードを読まなかったためにそれぞれの値をどう設定すれば良いかわけがわからなかった。(naobsd氏からもヒントになるメッセージをTwitterで頂いていたものの、コードの読解不足が原因でピンとこず、その後も泥沼に嵌り続けた。)
AR8327のコードを読み進めるうちにdts内に記述する qca,ar8327-initvals への書き換え方がなんとなくわかるようになり、その結果つまずいていた問題も解決し、頂いたメッセージの意味もその時ようやく理解した。(実際のところ、搭載しているスイッチを自分が間違えてとらえていたのも原因の一つ)
結局のところ、ソースコードをちゃんと読むのが最短ルートであることを再認識させられた。
作業中にSoCについて混乱した結果、"QCA9558" として投げてしまった。差としては無線のMIMOくらいではあるものの、どうするか悩み中。-> mtdパーティション修正時に、一緒にこの件も修正。

コメントした方へ: たぶん解決していると思いますがBHR-4GRV2は有線機です。また、個人的な方針でOpenWrtにおける無線の使用関係は扱わないため、当該コメントも表示するようにはせず返信も行いません。ご了承ください。