Recently in Unix かんけい Category

D31HW

| No Comments | No TrackBacks

e-mobile の 21Mbps 対応 USB データカード、D31HW.

長いこと FreeBSD で動かないと思ってあきらめかけていたのですが、
9-CURRENT にしたら普通に動きました!

ひゃほー

FreeBSD device driver

| No Comments | No TrackBacks

I had wrote a Linux driver for our FPGA + PCI Express board, and recently ported it to FreeBSD. While there are many documentation for Linux device driver (i.e, LDD3), I could find (almost) no comprehensive document about writing FreeBSD driver.

[ open/close/read/write/seek ]

read() and write() are mostly done by uio_move(). See uio (9) for detail.
Basically we don't have to implement seek(). uio structure has a pointer to seek.

[ mmap ]

FreeBSD's mmap implementation is really BEAUTIFUL. Just modify "vm_addr_t *paddr" to return corresponding physical address.

[ DMA layer ]

bus_dma (9) framework provides sophisticated DMA framework. I've read /usr/src/sys/dev/hifn/hifn7751.c as my reference.

Happy hacking!

mmap() HOWTO

| No Comments | No TrackBacks

デバイスドライバ書いてると、mmap() が使えるようにしたいなー、とか思うわけで。

みたいな記事を読んで、理解できた気がするね。「Linux デバイスドライバ」という本がすごいわけですが、あれだけだとちょっと不十分な感じだったのだ。

そういえば普通にファイルを mmap() して読み書き、というのもやったことないや、と思ったので、ちょっと書いてみた。

#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

int main(){
  int fd;
  char* p;
  int i;

  fd = open("textfile", O_RDWR);
  if(fd<0) printf("can't open!\n");
  printf("fd=%d\n", fd);
  p= (char*)mmap(NULL, 100, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);
  printf("p=%lx\n", (long unsigned int)p);
  if(p==MAP_FAILED) printf("can't mmap!\n");

  for(i=0; i<100; i++)
    putchar(p[i]);

  for(i=0; i<10; i++)
    p[i]=0x30+i;

  close(fd);
  return 0;
}

これで、配列の値を変更した通りにちゃんとファイルが書き換わる。Unix はかっこいい仕掛けがいっぱいあるなー。

sync; sync; sync

| No Comments | No TrackBacks

Hi, everyone.

Are you typing "sync; sync; sync" as everyday, or every moment?
Yes, it is important to save you from unexpected system crash...


Aaaaaaaaaaaaaaaaaaaaaaaah!!!!!!!!!!!!

... And now, I've recovered the data manually :)

FreeBSD Device Driver HOWTO

| No Comments | No TrackBacks

My Linux driver is working happily, so I'd like to port it to FreeBSD.
These documents may be important and useful:
- FreeBSD Architecture Handbook
- PCI Resources
- Parallel port interrupt driver skelton.

SIGIO Howto

| No Comments | No TrackBacks

User code to enable async notification by SIGIO:

signal(SIGIO, &handler); // instead, do sigaction() in real code!
fcntl(fd, F_SETOWN, getpid());
int oflags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, oflags|FASYNC);

Driver method:
filp->fasync(): called when FASYNC flag has modified.

Kernel functions:
fasync_helper(): Register listener process.
kill_fasync(): Transmit signals to listener processes.

GhostBSD 1.0 beta mirror.

| No Comments | No TrackBacks

Now I have a copy of GhostBSD 1.0 beta CD image here.. The server is located at Tokyo Japan, and maybe faster than the official sites for most Japanese users.

Visit website of GhostBSD project for detail.

Today's syscall

| No Comments | No TrackBacks

isatty(3) determines whether your file descriptor is a tty or not.
Great.

FreeBSD + ZFS + QEMU + Windows

| No Comments | No TrackBacks

研究室では学生が Windows を使うので (こまったものだ)、大学がライセンス導入している Symantec Antivirus の Corporate Edition みたいなやつを使っている。これは、普通に僕らが電器屋さんで買ってくる奴と違って、サーバで集中管理できるようになっており、定義ファイルをサーバから更新したり、サーバから各クライアントをスキャンしたりすることができて、大変便利。

しかし、このサーバは Windows でしか動かなくて、研究室のサーバ部屋を兼ねている僕の部屋には、Windows の動くマシンというのは、ノートパソコンしかないわけです。じゃあ、Antivirus サーバのために一台計算機増やすか、といわれると、それは夏がつらくなるわけで、絶対無理。

幸いにして Antivirus サーバはそれほど重くないので、研究室の samba サーバになっているマシンに QEMU を入れて、WindowsXP を動かしていた。必要なときに vncviewer や rdesktop で画面を覗けばいいし、けっこう便利だったのだ。kqemu (QEMU accelerator) も動くから、けっこう速い。

ところが、最近 QEMU + kqemu をアップデートしたのがきっかけなのか、Antivirus の動作が変わったのか、Liveupdate をしたら急に重たくなり、ディスクのアクセスランプが付きっぱなしでほとんど動かなくなってしまった。FreeBSD 本体は元気に動いているのだが、rdesktop や vncviewer の反応は全然ダメで、qemu の process status をみると、ずっと ZFS への io が続いており、CPU 使用率は 0.5% とか、それくらい。

つまり、ディスクアクセスがボトルネックなのだ。それに加えて、ZFS な領域にディスクイメージを置いていたので、ZFS が足を引っ張っている状態。この ZFS な領域は、頻繁に更新されるものは置いてなかったので、UFS にすることを決意して、34GB のデータを他のマシンのディスクに rsync して、zpool を破棄して newfs した。

そしたら、一番しんどいときでも CPU 使用率が 5% くらい出るようになり、時間はかかるものの、ちゃんと Liveupdate も完了するようになった。

I/O がボトルネックになるのは、こういう virtual machine の常ではあるけれど、最近 FreeBSD に port された、VirtualBox とかはどうなのかしら。まだ安定してなさそうなので、手を出さずにいるのだけれど...

しかし、喫緊の課題は、ZFS やめてディスクがミラーじゃなくなっちゃったので、これを gmirror か何かでミラーすることである。これは、一度止めないとだめだな...

ゆびきたすEmacs

| No Comments | No TrackBacks

研究室の wiki を使うのに、Pukiwiki-mode + SSL patch を使っていたわけですが、最近自分用の wiki ページを動かしていて、これ使って書いています。

何がいいかというと、テキストベースのメモが一やるのが一ヶ所に集中できて、ネットワークさえあればどのコンピュータからでも使えるわけです。

最近 web ベースのいろんなサービスがあるけど、結局文章を書いたりする作業は Emacs でやるのが一番はかどる気がしていて、これでまたハッピーになれそう。

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.02

September 2010

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

About this Archive

This page is an archive of recent entries in the Unix かんけい category.

Mac is the previous category.

写真 is the next category.

Find recent content on the main index or look in the archives to find all content.