ムカつくw Edgerouter X、Edgerouter 4 / 6の情報がない。 クロスコンパイラを使う

投稿者: | 4月 5, 2021

EdgerouterでIPv6を使おうとするとおかしいくらいにEdgerouter Xの情報しかない。もう狂ったように。自分はとある勘違いからEdgerouter 4と6に乗り換えてしまった。まぁ、勘違いは置いていて、Switch0に全く魅力が感じなかったのと、VLANを大量に貼っている場合、Edgerouterに負荷がかかる。ルーターの起動に30分とかありえない。さらにMTU 9000の設定ができない。そんな不満をオンラインで呟いていたら、香港のHome LAB師匠が他の機材ならいけると教えてくれたので買い替えた。それでだいぶパフォーマンスアップ。今度日本のシュウマイを送ったる。

閑話休題
まぁ、Edgerouter XとEdgerouter 4/6でSwitch0がない、MTUがあげられない、オフロードができる機能が異なるくらいしか、ぱっと見違いはない。クロスコンパイラー関連で調べてみたら全く別のものだったということで、まずはそこから。
show hardware cpuでアーキテクチャの確認ができる。

Edgerouter X CPU: MediaTek MT7621AT
Architecture: mips
Byte Order: Little Endian

Edgerouter 4 CPU: Cavium CN5020
Architecture: mips64
Byte Order: Big Endian

あららビット数も違うしエンディアンも違う。。。ほとんどのパッケージは、MIPS (32bit)が動いている模様。
Edgerouter 4で、uname -mを叩くと
mips64
となるので、kernel自体は64bitらしい。

Edgerouterは、所詮Debianなので、Debianパッケージをインストールができる。
ハードウェアの情報をみてみると
https://www.debian.org/releases/stretch/mips64el/ch02s01.html.ja
mipsあるいはmips64elがいけるらしい

やってみたところ、確かにmipsはいけるが、mips64elはダメでした。アーキテクチャがmips64なのにmips64elは入りませんとエラーになる。
$ sudo dpkg -i ndppd_0.2.5-3_mips64el.deb
dpkg: error processing archive ndppd_0.2.5-3_mips64el.deb (–install):
package architecture (mips64el) does not match system (mips)
Errors were encountered while processing:
ndppd_0.2.5-3_mips64el.deb

強制的に入れてみると実は入るんだが。。。気持ち悪い。(このndppdパッケージ自体はバグがあるので、一度強制インストールをするとなかなかパッケージが外せない。)となるとクロスコンパイラーの出番となる。

以下でクロスコンパイラーの設定ができる。
適当なUbuntuマシンで以下を実行。g++いらない、gccだけでよくてもg++を指定することをお勧めする。あとで++だけいれるのは面倒。

#Edgerouter Xの場合
apt -y install g++-mipsel-linux-gnu

ls /usr/bin/mipsel-linux-gnu-

#Edgerouter 4/6の場合
apt -y install g++-mips64-linux-gnuabi64

ls /usr/bin/mips64-linux-gnuabi64-

もちろん、これ以外に最低限makeなどが必要だが。

また、コンパイラのオプションはここいら。ただし、少なくともR3000がプレステでぇとかR8000がぁとか語れないのであれば触らない方が無難。(いや、その程度だと完全に事故るが。)

https://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html

あとは世間に出回っている、
/usr/bin/mipsel-linux-gnu-g++

/usr/bin/mips64-linux-gnuabi64-g++

と書き換えればいいだけ。

出来上がったバイナリはそれぞれfileで確認すると
#Edgerouter Xの場合
xxxxxx: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV) ….
#Edgerouter 4の場合
xxxxxx: ELF 64-bit MSB executable, MIPS, MIPS64 rel2 version 1 (SYSV) ….
となればOK。まぁEdgerouter 4上で、32bitのELFバイナリも多分動くと思うが。。。

これで、ようやくndppdの話ができる。

うまくやれば、ONUを外して、EdgerouterのSFPを光回線のモジュラーに直結できそうなんだが、如何せん、それで嬉しい構成が取れる環境って実はそんなにない。自分のところはv6プラスだったので全く意味がないことがわかった。(この記事自体も実はv6プラス環境では全く無意味)

 

おまけ

ラズパイのクロスコンパイラーも記載しておく。

for hf
apt -y install g++-arm-linux-gnueabihf
ls /usr/bin/arm-linux-gnueabihf-

for arm64
apt -y install g++-aarch64-linux-gnu
ls /usr/bin/aarch64-linux-gnu-

コメントを残す