Hatena::ブログ(Diary)

菊やんの雑記帳

2009-01-14 謎のファイル

[] この謎のファイルはなんでしょう? 21:41  この謎のファイルはなんでしょう? - 菊やんの雑記帳 を含むブックマーク

$ ls -l
?--------- ? ?       ?             ?            ? tmp
$ sudo stat tmp
stat: cannot stat `tmp': Permission denied

2008-04-18 libusb速度測定 on UBUNTU

[] libusbの速度を測った 02:31  libusbの速度を測った - 菊やんの雑記帳 を含むブックマーク

どれくらいの速度がでるかは、ドライバにかなり依存することをezusb.sysを使ってたころに身にしみているので、最初に速度測定をしてみる。

libusbはAPIとしていまいちなんだけど、簡単に使えるので速度測定をしてみる。

カメレオンUSB FX2のspd_chkを使うのがよさそうだったので、libusbでさくっと実装して試してみた。

INしか試してないが結果は30MB/secだったので、CyUSB.sysよりは数割遅いがまあいいことにしておく。

ソースコードとかはもう少し整理してから公開する予定。

2008-04-17 Linux & EZ-USB

[] EZ-USBLinuxで使うよ。 01:29  EZ-USBをLinuxで使うよ。 - 菊やんの雑記帳 を含むブックマーク

まあ、色々と事情があって、EZ-USBLinuxから制御したいわけだ。持ってるデバイスは以下の通り

一番目のはUSB1.1なのと、ほぼ常にVAIOに繋いでロジアナとして活用してるので、今回は対象外。

三番目のは色々と実装中なので後にする。完成したらLinuxから使おうとしてる。

二番目は使ってないので、しばらくこれで実験する。

Linuxマシンは格安サーバML115UBUNTU feistyをいれたやつ。

何も考えずにFX2を前面のUSBポートに差すと、

$ lsusb
Bus 002 Device 003: ID 04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 003: ID 0000:0000  
Bus 001 Device 001: ID 0000:0000  

と認識してるっぽいので、とりあえずよしとする。

2006-11-10 ELF golf

[]さすがにここまでか? 08:22 さすがにここまでか? - 菊やんの雑記帳 を含むブックマーク

kik@as305:~/work/codegolf/hello$ ls -l tiny-hello.bin 
-rwxr-xr-x  1 kik users 59 2006-11-10 08:35 tiny-hello.bin
kik@as305:~/work/codegolf/hello$ ./tiny-hello.bin || echo error
Hello, world!
kik@as305:~/work/codegolf/hello$ 

「!」をとると1B縮むから、http://www.muppetlabs.com/~breadbox/software/tiny/ にあるのより短くなった。

S: _start
P: phdr addr
o: file addr
V: virt addr
s: file size
m: virt size

P=+4
00          04          08          0C          10          14          18          1C          20          24          28          2C          30
7f 45 4c 46 ** ** ** ** ** ** ** ** ** ** ** ** 02 00 03 00 ** ** ** ** SS SS SS SS PP 00 00 00 ** ** ** ** ** ** ** ** ** ** 20 00 01 00 ** ** ** ** ** **
            01 00 00 00 oo oo oo oo VV VV VV VV ** ** ** ** ss ss ss ss mm mm mm mm *7 ** ** ** ** ** ** **

こうやって、1Bずつずらしながら入る場所を探してった。4B境界におかないといけないなんて規則はないんだからねっ!

[]よく考えてみると 17:47 よく考えてみると - 菊やんの雑記帳 を含むブックマーク

私の使ってるLinux箱はかなり過激な構成なんだよなあ…

うちでやると

kik@as305:~/work/codegolf/hello$ uname -a
Linux as305.localdomain 2.6.15.6 #1 PREEMPT Mon Mar 13 00:33:25 JST 2006 i686 pentium3 i386 GNU/Linux
kik@as305:~/work/codegolf/hello$ ./tiny-hello.bin 
Hello, world!

というわけで他所の環境で試してみた。

kik@debian:~$ uname -a
Linux debian 2.4.27-2-386 #1 Wed Aug 17 09:33:35 UTC 2005 i686 GNU/Linux
kik@debian:~$ ./tiny-hello.bin 
バスエラー

ちょw

a***e:~$ uname -a
Linux a***e 2.6.12.4 #1 SMP Mon Aug 15 03:19:29 JST 2005 i686 unknown
a***e:~$ ./tiny-hello.bin 
Segmentation fault
a***e:~$ 

ちょw

~$ uname -a
Linux ***** 2.6.11.12-xenU #2 Wed Jan 25 19:21:49 JST 2006 i686 GNU/Linux
~$ ./tiny-hello.bin
Segmentation fault
~$

ちょw

もしかして、うちでしか動かない?

カーネルのバージョン?それともディストロ?うちは

kik@as305:~/work/codegolf/hello$ cat /etc/lfs-release 
6.0

といういたって普通の環境なんだが…

[]どうも 18:52 どうも - 菊やんの雑記帳 を含むブックマーク

mmapに失敗してるっぽい。

execがどのようにmmapするかというと、

  • p_offset をページ境界まで切り捨てる。
  • p_offset+p_filesz をページ境界まで切り上げる。
  • 上を含むページをp_vaddrをページ境界まで切り捨てて、そこにマップ

うちの環境だけp_fileszがでかくても実行に成功する。mmapの実装はfs依存だけど、ほとんどxfsなんだよなあ。不思議不思議。

mmapは仮想メモリさえ確保できれば成功して、ページフォールトが起こるごとにファイル終端を超えてないかをチェックするっぽい。まあマップしてからトランケートとかもありうるから、それが正しいのだろう。ってことはファイル終端を越えたところにアクセスがあるかどうかが鍵だ。

http://www.linuxhq.com/kernel/v2.6/14/fs/binfmt_elf.c

これだ!bssがページ途中から開始してたら、そこからページ終端までをクリアしてる!

というわけで、ELF golferは2.6.14以降を使いましょう。

[]わーくあらうんど 19:44 わーくあらうんど - 菊やんの雑記帳 を含むブックマーク

kik@debian:~$ ls -l small-hello.bin 
-rwxr-xr-x  1 kik kik 59 2006-08-26 19:44 small-hello.bin
kik@debian:~$ ./small-hello.bin 
Hello, world!

p_offset+p_fileszをページ境界に合わせたら直った。

[]どこにHello, world!をいれたのかだって? 20:00 どこにHello, world!をいれたのかだって? - 菊やんの雑記帳 を含むブックマーク

どこにも入ってませんよ。ほら

kik@as305:~/work/codegolf/hello$ strings small-hello.bin 
1HDl
no, world!

結果的にそうなっただけなんだけどね。

2006-11-09 ELF golf

[] x86への愛は足りてますか? 20:54  x86への愛は足りてますか? - 菊やんの雑記帳 を含むブックマーク

kik@as305:~/work/codegolf/hello$ make
nasm -o small-hello.bin small-hello.asm && chmod +x small-hello.bin
kik@as305:~/work/codegolf/hello$ ls -l small-hello.bin
-rwxr-xr-x  1 kik users 63 2006-11-09 21:12 small-hello.bin
kik@as305:~/work/codegolf/hello$ file small-hello.bin
small-hello.bin: ELF
kik@as305:~/work/codegolf/hello$ ./small-hello.bin 
Hello, world!
kik@as305:~/work/codegolf/hello$ echo $?
0
kik@as305:~/work/codegolf/hello$