先月の中頃までDebian/amd64でbinutilsのクロスコンパイルができなったのですが、zumbi がパッチを教えてくれたので、コンパイルできるようになりました。sh4 のクロスコンパイラはいつもの場所に置いておきます。
$ cat /sys/class/net/eth0/carrier 1では、カーネル空間からチェックするにはどうしたらいいのか。 __dev_get_by_index で指定したネットワークデバイス番号のstruct net_deviceを取得し、netif_carrier_ok を使って、状態をチェックします。
struct net_device *dev;
dev = __dev_get_by_index(&init_net, 1);
if (dev)
printk("%s: %d\n", dev->name, netif_carrier_ok(dev));
$ cat hoge.commands Uploader: Nobuhiro Iwamatsu詳細は UploadQueue/READMEに書いてあります。 ちなみにDELAYED Uploadされたパッケージはhttp://ftp-master.debian.org/deferred/にあります。Commands: cancel hoge-0.0.0-1_i386.changes
今週末に行われる Debian BSP のために Try WiMaxサービスを利用してみることにした。
ビックカメラ等の店頭でも申し込みができるとのこと。ちょうど立川に用事があったのでビックカメラ立川店に行って申し込みをした。
後日郵送なのかな?と思ったらそのまま実機を渡された。ちょっとびっくり。あと、使い方とかも聞かれなかった。そういうもんなのかな。今住んでいるところではWiMaxサポートエリアではない(笑のでまだどんなもんなのか試してない。あと、借りている端末はまだLinuxのドライバがないようだ。
$ cat f.c #includegcc の場合。これは良いパターン。int main(void) { _FPU_SETCW(0); return 0; }
$ gcc -o f f.c -Wl,-t /usr/bin/ld: mode shlelf_linux /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crt1.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crti.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtbegin.o /tmp/ccQQKhOh.o (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc.a)_set_fpscr.o libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /lib/libc.so.6 (/usr/lib/libc_nonshared.a)elf-init.oS /lib/ld-linux.so.2 libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtend.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crtn.og++ の場合。
g++ -o f f.c -Wl,-t /usr/bin/ld: mode shlelf_linux /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crt1.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crti.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtbegin.o /tmp/ccZX5ufD.o -lstdc++ (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libstdc++.so) -lm (/usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../libm.so) libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /lib/libc.so.6 (/usr/lib/libc_nonshared.a)elf-init.oS /lib/ld-linux.so.2 libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtend.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crtn.o /tmp/ccZX5ufD.o: In function `main': f.c:(.text+0x24): undefined reference to `__set_fpscr(unsigned long)' /usr/bin/ld: link errors found, deleting executable `f' collect2: ld returned 1 exit statusg++ の場合はlibgcc.a を見ないで、libgcc_s.so.1を見に行っている。うーむ。
[....]
/* Macros for accessing the hardware control word. */
#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw))
#if defined __GNUC__
extern void __set_fpscr(unsigned long);
#define _FPU_SETCW(cw) __set_fpscr ((cw))
#else
#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw))
#endif
[....]
んで、悩む。C++ のコードからCの関数を呼んでいることに気がつく。
すぐに気がつけよ。<俺
--- a/sysdeps/sh/sh4/fpu/fpu_control.h 2006-08-17 10:18:26.000000000 +0900
+++ b/sysdeps/sh/sh4/fpu/fpu_control.h 2010-01-15 15:31:04.000000000 +0900
@@ -45,6 +45,14 @@
#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw))
#if defined __GNUC__
+/* Allow the use in C++ code. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void __set_fpscr(unsigned long);
+#ifdef __cplusplus
+}
+#endif /* C++ */
#define _FPU_SETCW(cw) __set_fpscr ((cw))
#else
#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw))
こんな感じで。glibcで提供されるヘッダファイル内でextern "C"を使うのはどうかと思ったけど、regex.h でもやっているからいいよね。
_ aya [これから泣くよ!お医者さんか聴診器見ただけで泣くよ〜щ( ̄∀ ̄)ш ヶヶヶ. 後、予防接種受けるならヒブワクチン..]
_ iwamatsu [ビブワクチン受けたよ。3回。あと1回あるみたい。]