とあるエンジニアの備忘log
2012年3月30日金曜日
scull ドライバ
O'REILLY の LINUXデバイスドライバ 第3版を勉強中。 サンプルコードは以下からダウンロードできました。
scull を make してみるものの、Kernelのversionによってちょこちょこ直さないといけない。 修正箇所を以下にメモ。(手元の Kernel のバージョンは 2.6.32-40) Makefile の CFLAGS += $(DEBFLAGS) CFLAGS += -I$(LDDINC) を EXTRA_CFLAGS += $(DEBFLAGS) EXTRA_CFLAGS += -I$(LDDINC) に修正。 `main.c` の #include
を #include
に変更。 `pipe.c` と `access.c` に #include
を追加。 `access.c` 中の `current->uid` と `current->euid` をそれぞれ `current->cred->uid` と `current->cred->euid` に変更。 これで makeが通った。 $ sudo ./scull_load とするとエラーが出るので、 major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices) を major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices) に修正するとうまくいきました。
2012年3月1日木曜日
アセンブラのローカルラベル
GNU ld のローカルラベルについて。
ローカルラベルで
b
がつくと前方へ検索、
f
がつくと後方へ検索の意味になる。
例えば、ARMで
1: b 1b 1:
というコードは前の
1:
へ分岐する。(つまり無限ループ)
1: b 1f 1:
は後ろの
1:
へ分岐する。
では、
b
も
f
も付けずに、
1: b 1 1:
はどうなるかというと、アドレス「1」へ分岐という意味になるみたい。
(ですが、pc は4の倍数でないといけないので、アドレス「0」へ分岐になる。)
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)