(untitled)

最終更新日時:2009-03-23 22:56

初版公開日時:2009-03-23 22:56

タグ: diary

昨日は、FreeBSDのyacxmドライバをamd64環境で動作させるためのハック(?)をしてました。とはいえ、portsはあるところからソースファイルをもってくるので、portsとsrcの両方をハックする感じです。

portsはまだ自作したことなかったので、少しずつわかってきました。とはいえ、いじるところはソースのダウンロード先くらいなものでよさそうです。

問題のソースのハックですが、なかなかビルドが通らない。warningも出てるし。とりあえず以下が問題でした。

●warning:cast from pointer to integer of different size  warning:cast to pointer from integer of different size

→これはキャストするときにサイズが違うというwarningです。tsleep()を呼び出すときに使用しているマクロDISCARD_QUALIFIERがあり、これのキャスト方法が変だとコンパイラをwarningを出したようです。 そのため、DISCARD_QUALIFIERを定義しているcxm.hを修正。

前) #define DISCARD_QUALIFIER(x) (void *)(unsigned int)(x) 後) #define DISCARD_QUALIFIER(x) (void *)(unsigned long)(x)

●error:array type has incomplete element type

→これはi386版でも出るやつです。cxm.hで、配列を定義していますが、ソース側にだけあればよいので、この行は削除(またはコメント)します。

●warning:passing argument 4 of 'bus_setup_intr' from incompatible pointer type

warning:passing argument 5 of 'bus_setup_intr' from incompatible pointer type error:too few arguments to function 'bus_setup_intr'

→これもi386版でも出るやつです。FreeBSD 7.0からbus_setup_intr()のプロトタイプが変わっているので、第4引数filterにNULLを設定し、元からあった第4引数以降は1つずつ後ろへずらします。

●error:SSE register return with SSE disabled

→未解決・・・。 SSEがオフだと抜かしやがります。少し調べてみると、FreeBSD 7.1 Releaseの/usr/bin/gccはバージョンが4.2.1なんですがこれにSSE関連のバグがある模様・・・。コンパイラも新しいバージョンのものに変えるも、今度は別のエラーが出てビルドが通らない・・・。残念。

結局、最後のSSEエラーのせいでまだビルドが通っていません。コンパイラのバージョンの模様なので、stableにあげると通るのか?今のところもう少し調べてみますが、早くAMD64環境でサーバを動かしたいものです。


auther: dictoss

地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。 仕事ではCentOS、家ではDebianとFreeBSDを使い何かしようと画策中。

github.com

© 2005-2025 dictoss.

counter: 686472