探検


ディバイスドライバをハックしよう!

■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
垢版 |
02/01/31 01:14ID:t3s191ys
ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
2007/01/19(金) 08:04:16ID:/YcMJPuk
/etc/fstabの6番目のフィールドの値を0にする。man fstabしてみそ。
tune2fsで-c 0とかもしておいたほうがいいかも。
2007/01/19(金) 20:24:37ID:xhnZtOc/
>>560
でもそれをやると、kmallocをGFP_KERNELで使ったときに
メモリがスワップアウトしたらまずいことになりませんか?

>>561
やってみました

なんかファイルチェックをしなくなったことで壊れそうでもありますが
やっぱり我慢してチェックしたほうがいいでしょうか...
2007/01/20(土) 19:48:34ID:3aq4dRUa
>>562
/だけ守ればいいので、なりません。
2007/01/21(日) 01:23:20ID:QaYT7DDq
>>563
ああそうか、swapファイルはswapパーティションですもんね
ありがとうございます
2007/01/27(土) 11:05:03ID:4J9B+fMX
評価機はネットブートさせてNFSroot稼動させればいつ飛んでも
大丈夫な環境にできるんじゃない?
566login:Penguin
垢版 |
2007/02/05(月) 06:03:38ID:9i1Bwf6u
通常、Linuxのドライバをインストールする時はカーネルにパッチを当ててカーネルごと
コンパイルしなければいけないけど、Windowsのようにカーネルソース無しでドライバを
コンパイルしてインストールできるようにする方法ってあるの?
567login:Penguin
垢版 |
2007/02/05(月) 06:26:04ID:9i1Bwf6u
http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%8E%E3%83%AA%E3%82%B7%E3%83%83%E3%82%AF%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%ABには
現在のカーネルではモジュールをカーネルの構築状態に依存する事なく追加できると
書いてあるけど、カーネル側でインターフェースが変更になった場合は旧ドライバは
使用できなくなるんじゃないの?それとも、カーネル側で旧インターフェースが温存されるの?
あと、「カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある」
Linuxはどのバージョンまでなの?
2007/02/05(月) 06:56:37ID:Zi/ATtvA
>>566
いまはそんなことしなくていいよ
insmod rmmodで動的にドライバを挿入したり削除したりできる
2007/02/06(火) 01:26:43ID:j3mwrUGC
いやぁソースはいるだろ。
2007/02/06(火) 08:59:25ID:jQKQh5/W
ソースはいるけどカーネルのリビルドはいらない
2007/02/06(火) 10:27:34ID:Rm04tDsq
いやぁリビルドは途中までいるだろ。
572login:Penguin
垢版 |
2007/02/10(土) 16:03:43ID:XWBlzb1u
初歩的な質問ですがよろしいでしょうか

私はlinuxカーネル2.6.13のモジュールでhello worldのプログラムを組込みたいのですが上手くいきません

gcc -c module.c -Wall -Wstrict-prototypes -O -pipe -m486

この様にコンパイルしたのですがカーネルのソースコードに構文エラーがあるようでコンパイルが通りません
カーネルのソースコードを見てみても構文エラーらしき物はみられませんでした
どうすればコンパイルが通るでしょうか

エラーメッセージとソースコードを書いておきます

ソースコード
http://sakuratan.ddo.jp/uploader/source/date32474.c

エラーメッセージ
http://sakuratan.ddo.jp/uploader/source/date32475.txt
2007/02/10(土) 17:14:52ID:d+hexa9D
>>572
普通はMakefile書くわな
2007/02/10(土) 17:47:20ID:a+8l3AD+
Makefileに
obj-m += module.o
って書いて
make -C /usr/src/linux M=$PWD modules
575login:Penguin
垢版 |
2007/02/10(土) 19:18:09ID:XWBlzb1u
>>543

そうみたいですね
私のみた資料では、そうコンパイルする様に書いてあったのですが結構古い奴だった
のでしょうか

>>574

本当にありがとうございました。
その方法で無事にモジュールを作れました

感謝感謝
576542
垢版 |
2007/02/10(土) 19:55:09ID:XWBlzb1u
.koってファイルが出てきたらからinsmodにかけてみたら
insmod: error inserting 'module.ko': -1 Invalid module format

って言われワラタ
turbo linuxなんて微妙なの使ってるせいなんですかねこれは.....
577542
垢版 |
2007/02/10(土) 20:03:22ID:XWBlzb1u
今までsage忘れてたごめん
2007/02/10(土) 20:06:01ID:791EznrY
話題提供時はage、その後はsage
ってのが一番角が立たない。

正直、どうでもいいけど。
2007/02/10(土) 20:14:38ID:a+8l3AD+
/usr/src/linux が今動いてるカーネルソースじゃないとか
580542
垢版 |
2007/02/10(土) 21:33:23ID:XWBlzb1u
>>579

そうですね
元からあったソースでコンパイルしようとすると必要なMakefileがないとかで無理
でしたから、kernel.orgから同じバージョンのコード落してきてまた設定しなし
いた訳ですがそれが原因ですかね。

ディストリとかは独自の変更を加えているらしいし、また変更が加えられていない
純粋なカーネルインストールしてから出直してきます

581login:Penguin
垢版 |
2007/02/18(日) 23:17:11ID:PxJoV1oA
すみません。kmallocで確保したメモリ領域をDMA転送するために、__paで変換して
渡してやるのと、dma_map_singleで変換して渡すのと、違いはあるのでしょうか?
たとえば性能(処理効率)が違うとか? どう使い分けているのでしょうか?
2007/02/19(月) 10:56:01ID:QHwPPpDN
UNIXTIMEを日付文字列に変換するのに なんかAPI用意されてないの?
"2007/02/19 12:34:56" とかその程度のでいいんだけど。
2007/02/19(月) 11:19:53ID:I/jMKPR3
strftime
2007/02/19(月) 13:52:20ID:QHwPPpDN
>>583
いや、デバイスドライバ内でなんだけど、あったっけ? いや、ない。
585login:Penguin
垢版 |
2007/02/21(水) 07:53:48ID:Wuryqsb6
Linux 2.6.16用のパッチとe2comprを同時に使いたいのだが、e2comprは2.6.10用まで
しかない。カーネルとドライバが完全に分離され、カーネルバージョンが上がっても
カーネル側の旧インターフェースが温存されるようになれば、ドライバの開発が停滞しても
最新のカーネルでそのドライバを使い続ける事ができる。
2007/02/22(木) 01:34:45ID:I6i5DnCh
そのカーネル側のABI決めようぜ話はLinusに一蹴されてるんじゃなかったけ?
587login:Penguin
垢版 |
2007/02/22(木) 09:14:42ID:y9d4aAAQ
>>586
カーネル側のドライバとして旧バージョンのカーネルのモジュールをロードできる
ラッパーを作成して、カーネル側インターフェースが変更されるたびにラッパーを
更新していく手もあるべ。
588login:Penguin
垢版 |
2007/02/22(木) 09:16:48ID:y9d4aAAQ
ラッパーにx86エミュレーションを追加するとザウルスでWindowsのドライバを読み込めたりもする。
2007/02/22(木) 22:34:24ID:I6i5DnCh
つ NDISwrapper
2007/02/23(金) 00:44:11ID:cxn/yRhr
つcapative ntfs
591login:Penguin
垢版 |
2007/04/03(火) 00:09:41ID:3ycIJVku
<linux/module.h>が無いんだけど、
デバドラ開発するには、なにかパッケージ追加しなきゃいけないの?

使ってるのはfedora6
592login:Penguin
垢版 |
2007/04/03(火) 00:24:35ID:3ycIJVku
yum install kernel-devel
してもダメだな。何が足りない?
2007/04/03(火) 00:41:11ID:xSB1c0Df
>>591
カーネルソースそのものじゃね?
594login:Penguin
垢版 |
2007/04/03(火) 01:00:14ID:3ycIJVku
>>593
あ、カーネルソースに有った。ありがとう。

普通、/usr/includeには入らないの?
595login:Penguin
垢版 |
2007/04/03(火) 01:08:21ID:3ycIJVku
あと、
man printk
って出ないの?
2007/04/03(火) 02:25:43ID:xSB1c0Df
>>595
出ないんじゃよ
2007/04/03(火) 02:43:03ID:GYgStP3Z
>>594
カーネル用ヘッダと、ユーザプログラム用ヘッダは
まざるとまずいから分離されてる。だから/usr/includeにカーネル用ヘッダはふつうは無い。
2007/04/04(水) 00:07:01ID:NkZt7NAi
/usr/include/linux に入ってないか?鳥にもよるけど。
599login:Penguin
垢版 |
2007/04/04(水) 00:15:23ID:wyW6RdvI
カーネル用ヘッダと、ユーザプログラム用ヘッダがまざると、何でとまずいだろ。
600login:Penguin
垢版 |
2007/04/04(水) 00:23:08ID:ICf0Aql0
爆発しても知りません。
2007/04/04(水) 00:42:58ID:IK0cizpI
>>598,>>599
/usr/include/linuxにあるのは確かにカーネルのヘッダだが、glibcをビルドするときに使った
アーキテクチャ依存部分とかのカーネルヘッダ、
/usr/src/linux/includeにあるのは「現在使用中のカーネル」のヘッダファイル
だよね。(間違ってたらスマソ)

これらが同じだとちょっとカーネルに変更があったときとかまずくない?
最悪glibc動かなくなるときもあるかと。
602login:Penguin
垢版 |
2007/04/08(日) 00:07:55ID:gmHS+Fdj
>>17 をコンパイルするとエラーがたくさん出るんだけど何が悪いの??

エラーの一部
↓
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/bitops.h:244: error: expected ‘=’, ‘,’’, ‘asm’ or ‘__attribute__’ before ‘int’
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/thread_info.h:
20,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/module.h:9,
2007/04/08(日) 00:09:38ID:2aPQfsMY
脳?
604login:Penguin
垢版 |
2007/04/08(日) 00:10:46ID:gmHS+Fdj
>>603
いや、たぶん違うと思う。

こんなのも出てる。
↓
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/system.h:346: error: expected declarat
ion specifiers or ‘...’ before ‘u8’
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/system.h:346: error: expected declarat
ion specifiers or ‘...’ before ‘u8’
2007/04/08(日) 00:11:42ID:2aPQfsMY
じゃ、頭?
606login:Penguin
垢版 |
2007/04/08(日) 00:12:08ID:gmHS+Fdj
NGID ID:2aPQfsMY
2007/04/08(日) 00:15:19ID:2aPQfsMY
マジレスすると、読み込むヘッダーファイルが足りないんだよ。
608602
垢版 |
2007/04/08(日) 00:19:06ID:gmHS+Fdj
環境はVMWare上でfedora 6を動かしてる。

こんなのも。
↓
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/bitmap.h:149: error: ‘BITS_PER_LONG’
undeclared (first use in this function)
2007/04/08(日) 00:20:46ID:2aPQfsMY
BITS_PER_LONGを定義しているファイルをさがすことだね。
2007/04/08(日) 00:29:38ID:nSKp4d9I
なんだこのキチガイ
2007/04/08(日) 00:31:56ID:2aPQfsMY
また、きちがいあつかいですか?
2007/04/08(日) 00:36:41ID:nSKp4d9I
ほう「また」なんだ
2007/04/08(日) 00:37:31ID:2aPQfsMY
で?
2007/04/08(日) 00:46:02ID:nSKp4d9I
あらら
2007/04/08(日) 00:48:10ID:2aPQfsMY
なにがあららなの?
2007/04/08(日) 00:49:12ID:nSKp4d9I
脳?
2007/04/08(日) 00:49:55ID:2aPQfsMY
それはお互い様だろ?
2007/04/08(日) 00:51:34ID:nSKp4d9I
俺はその質問者じゃないんだけどねえ
2007/04/08(日) 00:56:35ID:2aPQfsMY
お友達?
620602
垢版 |
2007/04/08(日) 00:58:54ID:gmHS+Fdj
もういちど、しきりなおし。

>>17 をコンパイルするとエラーがたくさん出るんだけど何が悪いの??

エラーの一部
↓
/usr/src/kernels/2.6.20-1.2933.fc6-i586/include/asm/bitops.h:244: error: expected ‘=’, ‘,’’, ‘asm’ or ‘__attribute__’ before ‘int’
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/thread_info.h:
20,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.20-1.2933.fc6-i586/include/linux/module.h:9,
2007/04/08(日) 01:03:19ID:z/motjJL
>>620
ヒント:>>17のかかれた日付に注目。
2007/04/08(日) 01:11:57ID:nSKp4d9I
2.6以降はモジュールのフォーマットが変わって、
.oじゃなくて.koになってるからね。
ビルドの仕方も面倒になって...俺もよくしらない。
2007/04/08(日) 01:12:30ID:2aPQfsMY
linux/compiler.hかな?
624login:Penguin
垢版 |
2007/04/08(日) 02:07:26ID:gmHS+Fdj
>>621-622
情報が古いのか。。
でも、ウェブにあるサンプルは大体同じような感じなんだけど。

2.6用モジュールhello worldってないのかな。
2007/04/08(日) 02:24:54ID:z/motjJL
>>624
2.6 kernel hello world
でぐぐればすぐ出てくるぞ。
626login:Penguin
垢版 |
2007/04/08(日) 02:28:17ID:gmHS+Fdj
>>625
なかなか無いよ。たとえばどこ?
すぐ出てきたなら、ここに貼って。
2007/04/08(日) 02:34:41ID:n+CzrFXh
#include <linux/init.h>
がいるみたいね
628login:Penguin
垢版 |
2007/04/08(日) 02:41:10ID:gmHS+Fdj
Makefileの書き方も変わってるみたいだね。

http://uguisu.skr.jp/algo/device.html
のやり方でうまくいった。
2007/04/08(日) 03:09:43ID:z/motjJL
こことかな。
http://www.si-linux.co.jp/wiki/silinux/index.php?Linux-2.6%A5%C7%A5%D0%A5%A4%A5%B9%A5%C9%A5%E9%A5%A4%A5%D0
630login:Penguin
垢版 |
2007/04/12(木) 01:42:14ID:MCdnGupN
aio_write()でユーザ空間の登録だけして、後からハードウェア割り込みでその登録したユーザ空間にアクセスすることってできる?
やり方教えて。
2007/04/12(木) 02:34:41ID:HoyZz9hB
>>626
自分はこれが良かった。
http://www.freesoftwaremagazine.com/articles/drivers_linux
632login:Penguin
垢版 |
2007/04/15(日) 01:56:51ID:YIKahQqf
タスクレットの中でcopy_to_user()、copy_from_user()を使えますか?
2007/04/17(火) 02:52:55ID:IoB9zeVk
試してみろ!!
callした瞬間ぼくの丸太のような足蹴りが君の股間をつぶす
それでもいいのなら!
634login:Penguin
垢版 |
2007/04/27(金) 00:53:37ID:6m6QKylD
プログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。
2007/04/27(金) 06:02:05ID:DTYmU0pC
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/IO-mapping.txt.html
2007/04/27(金) 06:03:05ID:DTYmU0pC
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html
637login:Penguin
垢版 |
2007/04/27(金) 08:23:06ID:6m6QKylD
ユーザプログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。
638login:Penguin
垢版 |
2007/04/27(金) 08:26:29ID:6m6QKylD
(1)ユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。

>>634-635 そこの記述では不十分だよ。
2007/04/27(金) 10:46:58ID:cjUqO3s+
>>638
つ 馬本

なんで物理アドレスが必要なのかよくわからんが、virt_to_pyhsかのう。


640login:Penguin
垢版 |
2007/04/27(金) 21:21:47ID:6NURgk06
>>639
virt_to_phys()で本当にユーザプログラムで確保したメモリの物理アドレスが求められる?
質問はカーネルの仮想アドレスを物理アドレスに変換したいのではないよ。
ユーザプログラムで確保したメモリのアドレスの物理アドレスだよ。

あと>>638の(2)については、知ってる人いないの?
2007/04/27(金) 21:40:17ID:67IsA5dw
痛い人現る
2007/04/27(金) 23:10:53ID:EZ45sIxG
cr3レジスタからたどれば
643login:Penguin
垢版 |
2007/04/27(金) 23:27:03ID:6NURgk06
>>642
で、そのcr3レジスタの値はどこから持ってくるの?
cr3レジスタの値はあくまでも現在のプロセスの仮想アドレスのページテーブルだよね。
カーネルプロセスからユーザプログラムのページテーブルを取得するにはどうするの?

mm_structを保存しておけば、任意のユーザプロセスのメモリ空間にアクセスできる?
2007/04/28(土) 04:22:35ID:+D3gS6jR
カーネル書き直せば?w
645login:Penguin
垢版 |
2007/04/28(土) 07:44:33ID:oKLKreO7
カーネルを書きなおしてもいいよ。どこをどうすればいいの?その方法を教えて。

(1)カーネルから任意のユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。
2007/04/28(土) 07:47:13ID:dRSGn50m
カーネルからだとページテーブルがページアウトしている可能性もあるから
めんどくさい
647login:Penguin
垢版 |
2007/04/28(土) 08:04:23ID:oKLKreO7
ページアウトはしていないと仮定していいよ。それなら簡単?
2007/04/28(土) 11:40:13ID:Fr2ol1ef
ザワザワ…
ザワザワ…
2007/04/28(土) 23:24:32ID:ZU2q9XRX
>>639
ttp://d.hatena.ne.jp/Newmarket/20060828/1156705255
2007/04/28(土) 23:42:14ID:o6o1fGCI
馬の多さにワロタ
651login:Penguin
垢版 |
2007/05/03(木) 23:34:15ID:ErpReMz0
カーネルのソースツリーの一部分だけ、お試しでコンパイル
したいときってどのようにすればいいですか?

たとえば、lib/ の下だけすこしいじって、syntaxのチェック
だけしたいときとか。2.6.21です。
2007/05/04(金) 00:08:49ID:9yQs8D1Y
>>651
なんだかんだいっても、一度全体コンパイルしておくのが一番早い。
653login:Penguin
垢版 |
2007/05/04(金) 00:18:46ID:yYLKnQ2E
>>652
thx.でも、

一度全体をコンパイルしておいて、lib/以下をちょっと(.cのみ)いじって、
全体をmake bzImageすると、それだけで5分以上かかるんすよ...

わたしのへぼマシンだと。
2007/05/04(金) 00:23:00ID:gFGVYRPM
やっぱりCPU速くするのが一番
2007/05/04(金) 00:24:14ID:yYLKnQ2E
そこをなんとか。
2007/05/04(金) 00:35:21ID:n4WASQRt
>>653
2.6だったらトップディレクトリから

$ make lib/cmdline.o
CC lib/cmdline.o

とか出来る。
2007/05/04(金) 00:38:41ID:yYLKnQ2E
できました。ありがとうございました。
2007/05/04(金) 01:24:26ID:ulT/mofy
>>576
カーネルをコンパイルしたgccでモジュールをコンパイルしないとinsmod時にそのエラーが出るよ。
2007/05/13(日) 23:53:14ID:EYFP+J0v
質問です。
>>620さんと同じ状況です。
ただ>>628>>629の方法を試したのですが
解決しませんでした。
いまだに>>620さんが書かれてるエラーがでてしまいます。
考えられる原因はありますでしょうか?
ubuntu 7.04、gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
を使っています。
2007/05/26(土) 11:11:39ID:XoKsvVbX
>>15
IPLで使いたい分のメモリを確保すればいいって聞いたことがある。
カーネルのブートパラメータでから使いたい分を引く感じ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況