« ON b105 と crossbow と murayama-san's driver | メイン

ON b105 の nge driver をいじってみる

MacBook Late 2008 で ON b105 を利用するべく nfo driver をいじったのはいいのですが、やっぱ、純正 nge driver で動くといいよねーと、nge driver の source code いじりに挑戦。

純正 nge driver でも、通信はできるが速度がとにかくでないので、使いものにならず。
Nevada b99 をベースに MCP6x と MCP7x chipset 用の修正を加えた nge driver を ON b105 な環境で使おうとすると panic してしまうため、こいつの source code を参考に ON b105 の nge に手パッチ作業を実行!


さすが、Nevada だ。b99 ベースの source と b105 の source とで diff をとっても修正箇所多すぎてやってられないぜ(;´Д`)
やり方を変えて、MCP7x に絡みそうな部分をちょっとづつ追加して make の繰り返しで、最低限の修正でできたっぽい。

nge_chip.c の nge_init_dev_spec_param あたりが、その chip の機能を有効にしたり無効にしたりする処理っぽいが、nge_chip.h に定義されている id 以外は、default: の設定が使われてしまうらしく、これが遅い原因っぽい。
MacBook だと、MCP79 なのでそのあたりの定義をもってきて追加。
make して binary を作って配置完了!
お、load もできた。でも、plumb させた瞬間に panic する・・・むぅ

初期化周りがおかしいのかなと?と、もう一度、code を比べてみる。 なんで、nge_init_dev_spec_param を nge_chip_cfg_init の中で呼び出してるのかわかってないのですが、ベースの source がそうしているので、1 行追加。


おお、今度は、plumb しても panic しない!
dhcp で IP 割り当てられ通信もおk。速度も b99 ベースのものと同等っぽい(たぶん)
やったー゜・*:.。..。.:*・゜ヽ( ´∀`)人(´∀` )ノ・゜゜・*:.。..。.:*

とか思ってたら、Mac address がリバースしてる orz

ether xx:xx:xx:df:23:0
スルーしていたが、MacBook Late 2008 もビンゴかぁ(´・ω・`)
workaround のコメントがついているので、対応箇所はすぐにみつけられたのだが、なにぶん処理の内容が理解できないw
nge_chip.h に定義された hex の情報を元にその処理に突撃しているのだけど、その値をどこからもってくればいいのやら・・・

と、最近 MacBook Late 2006 黒と Early 2008 黒に Nevada と OpenSolaris をつっこんで検証マシンにしている S さんに聞いてみる。

「これって、リバースした Mac address の vendor id じゃね?」

と神の一言が!

なるほど、ASUS とか ELITE とか GIGABYTE とかの名前がつけられ定義されているのだけど、言われたとおりに元に戻した値と vender をググってみると、ビンゴっぽい。
それなら話は早いと、すでにリバースしているので、ifconfig の出力から拾った vendor id を追加し、条件に付け加えてみると、見事に直りました!

というわけで、できあがった nge driver で dladm create-vnic -l nge0 vnic0 とかしてみたり。

$ ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
vnic0: flags=201004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4,CoS> mtu 1500 index 28
    inet 129.158.56.61 netmask ffffff00 broadcast 129.158.56.255
    ether 2:8:20:53:33:be
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
    inet6 ::1/128

nge0 は plumb せずに、作成した vnic0 を plumb して、DHCP で IP address ゲット。
通信できてますね。
このままいけそうな感じ。
まぁ、動けばいいのではないでしょうか( by Murayama-san) との言葉も頂いていたので、これでいっか。

そうして、できあがった patch は、5760 byte 。

さらしときます。


nge_snv105_MacBook51.patch

b99 ベースで定義されている MCP6x, MCP7x の code はつっこんでありますので、MacBook Late 2008 以外の機種で、b105 なら動作するかも。
Mac addres リバースの workaround は、MacBook Late 2008 用の定義を追加しているだけです。
あと、modinfo すると (nVidia 1Gb Ethernet MacBook5,1) なんてでてきてしまいふ(;´Д`)

binary は、こちら。

nge_MacBook51.tar.gz

patch も binary も ON b105 以降? 用なので注意してください。
さとうは、よくわかってないでやっているということにも注意してください(´・ω・`)
#もう、ここらへんまでが限界だなぁ・・

トラックバック

このエントリーのトラックバックURL:
http://solaris.sunfish.suginami.tokyo.jp/blog/mt/mt-tb.cgi/697

About

2008年12月19日 17:47に投稿されたエントリーのページです。

ひとつ前の投稿は「ON b105 と crossbow と murayama-san's driver」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.34