ZYNQのLinuxカーネルを5.15にアップデートしてKSZ9131が動作した
Cosmo-Zの6台の実装が上がってきました!
今回のCosmo-Zは半導体入手難に対応するため電源ICと、イーサネットPHYを変えたのです。
早速、電源を入れてみると電源ICについては問題なく規定の電圧を出していましたが、なんと!ネットワークが動きません。
くぅ・・納期が迫っている状況でこれか・・
やはり、KSZ9031→KSZ9131のアップデートは、そのままではいかなかったのかと
いや、正確にいうと認識はしているのですが、ネットワークが疎通できないのです。リセット後の何秒かなのか、何パケットまでかなのかわかりませんが、DHCPは通ってIPアドレスは振られているのですがその後の通信が全くできなくなるのです。
LinuxのカーネルでのKSZ9131対応状況を調べるため、
https://elixir.bootlin.com/linux/latest/source/drivers/net/phy/micrel.c
のサイトでバージョンごとのソースコードの違いを追ってみると、私が好んで使っているカーネルv4.9ではKSZ9131に対応しておらず、KSZ9131の名前が出てくるのはカーネルv4.20からのようでした。
ためしにv4.20のmicrel.cの中身だけv4.9にコピーしてきてビルドしても、関数がないとかでエラーが出てうまくいきません。まぁ、横着はできないようです。
一方、XILINXがリリースしているLinuxカーネルは、v4.9の後はv4.14、v4.19、v5.4がリリースされていて、
4系の最後であえるv4.19ではKSZ9131に対応していないので、結局のところZYNQでKSZ9131を使うには、カーネル5以上に上げなければならないというわけです。
いっそのこと最新版がいいだろうということで、XILINXのgithubから最新のlinux-xlnxの5.15をダウンロード(2.4GByte!?)してビルドしたところ、エラーなく通りました。
カーネル5.15のMenuconfigではM25P80互換のSPI ROMがなくなっていて(STMアーキテクチャのLinuxでなければ見えない)、ZYNQでは使えないのかなと思っていたのですが、そんなことはなくデフォルトで使えるようになっていました。カーネル4.9では手動でONにしなければならないオプションが自動的に組み込まれたということなのでしょうか。
ビルドしたカーネルをZYNQで起動したところ、
RTCについても、
i2c_dev: i2c /dev entries driver
rtc-ds1307 0-006f: registered as rtc0
rtc-ds1307 0-006f: setting system clock to 2022-03-03T16:27:11 UTC (1646324831)
cdns-i2c e0004000.i2c: 400 kHz mmio e0004000 irq 30
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10sと
と、認識され、問題なく動作していました。
肝心のKSZ9131のイーサネットPHYですが、
[Firmware Warn]: /amba/ethernet@e000b000/mdio/phy@7: Whitelisted compatible string. Please remove
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 35 (54:10:ec: )
e1000e: Intel(R) PRO/1000 Network Driver
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
"Microchip KSZ9131 Gigabit PHY"と表示されるかと思ったのですが、 [Firmware Warn]なので何かが認識されていないのかもしれません。
KSZ9131としては認識されていませんが、PINGは通るし、ApacheのWebサーバも、独自プロトコルの通信も問題なく動きました。ネットワークは問題なく動作しているといえるでしょう。
結論として、Linuxカーネルv4.9→v5.15のアップグレードは全く問題ありませんでした。
UltraScale+ではない普通のZYNQでも、uioのデバイスドライバも含めて、カーネル5.15は問題なく動きました。
ただ一つ、xdevcfgがなくなったこと以外は。
| 固定リンク
コメント