ディバイスドライバをハックしよう!at LINUX
ディバイスドライバをハックしよう! - 暇つぶし2ch596:login:Penguin
07/04/03 02:25:43 xSB1c0Df
>>595
出ないんじゃよ

597:login:Penguin
07/04/03 02:43:03 GYgStP3Z
>>594
カーネル用ヘッダと、ユーザプログラム用ヘッダは
まざるとまずいから分離されてる。だから/usr/includeにカーネル用ヘッダはふつうは無い。

598:login:Penguin
07/04/04 00:07:01 NkZt7NAi
/usr/include/linux に入ってないか?鳥にもよるけど。


599:login:Penguin
07/04/04 00:15:23 wyW6RdvI
カーネル用ヘッダと、ユーザプログラム用ヘッダがまざると、何でとまずいだろ。

600:login:Penguin
07/04/04 00:23:08 ICf0Aql0
爆発しても知りません。

601:login:Penguin
07/04/04 00:42:58 IK0cizpI
>>598,>>599
/usr/include/linuxにあるのは確かにカーネルのヘッダだが、glibcをビルドするときに使った
アーキテクチャ依存部分とかのカーネルヘッダ、
/usr/src/linux/includeにあるのは「現在使用中のカーネル」のヘッダファイル
だよね。(間違ってたらスマソ)

これらが同じだとちょっとカーネルに変更があったときとかまずくない?
最悪glibc動かなくなるときもあるかと。

602:login:Penguin
07/04/08 00:07:55 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,

603:login:Penguin
07/04/08 00:09:38 2aPQfsMY
脳?

604:login:Penguin
07/04/08 00:10:46 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’

605:login:Penguin
07/04/08 00:11:42 2aPQfsMY
じゃ、頭?

606:login:Penguin
07/04/08 00:12:08 gmHS+Fdj
NGID ID:2aPQfsMY

607:login:Penguin
07/04/08 00:15:19 2aPQfsMY
マジレスすると、読み込むヘッダーファイルが足りないんだよ。

608:602
07/04/08 00:19:06 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)

609:login:Penguin
07/04/08 00:20:46 2aPQfsMY
BITS_PER_LONGを定義しているファイルをさがすことだね。

610:login:Penguin
07/04/08 00:29:38 nSKp4d9I
なんだこのキチガイ

611:login:Penguin
07/04/08 00:31:56 2aPQfsMY
また、きちがいあつかいですか?

612:login:Penguin
07/04/08 00:36:41 nSKp4d9I
ほう「また」なんだ

613:login:Penguin
07/04/08 00:37:31 2aPQfsMY
で?

614:login:Penguin
07/04/08 00:46:02 nSKp4d9I
あらら

615:login:Penguin
07/04/08 00:48:10 2aPQfsMY
なにがあららなの?

616:login:Penguin
07/04/08 00:49:12 nSKp4d9I
脳?

617:login:Penguin
07/04/08 00:49:55 2aPQfsMY
それはお互い様だろ?

618:login:Penguin
07/04/08 00:51:34 nSKp4d9I
俺はその質問者じゃないんだけどねえ

619:login:Penguin
07/04/08 00:56:35 2aPQfsMY
お友達?

620:602
07/04/08 00:58:54 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,


621:login:Penguin
07/04/08 01:03:19 z/motjJL
>>620
ヒント:>>17のかかれた日付に注目。


622:login:Penguin
07/04/08 01:11:57 nSKp4d9I
2.6以降はモジュールのフォーマットが変わって、
.oじゃなくて.koになってるからね。
ビルドの仕方も面倒になって...俺もよくしらない。

623:login:Penguin
07/04/08 01:12:30 2aPQfsMY
linux/compiler.hかな?

624:login:Penguin
07/04/08 02:07:26 gmHS+Fdj
>>621-622
情報が古いのか。。
でも、ウェブにあるサンプルは大体同じような感じなんだけど。

2.6用モジュールhello worldってないのかな。

625:login:Penguin
07/04/08 02:24:54 z/motjJL
>>624
2.6 kernel hello world
でぐぐればすぐ出てくるぞ。

626:login:Penguin
07/04/08 02:28:17 gmHS+Fdj
>>625
なかなか無いよ。たとえばどこ?
すぐ出てきたなら、ここに貼って。

627:login:Penguin
07/04/08 02:34:41 n+CzrFXh
#include <linux/init.h>
がいるみたいね

628:login:Penguin
07/04/08 02:41:10 gmHS+Fdj
Makefileの書き方も変わってるみたいだね。

URLリンク(uguisu.skr.jp)
のやり方でうまくいった。

629:login:Penguin
07/04/08 03:09:43 z/motjJL
こことかな。
URLリンク(www.si-linux.co.jp)

630:login:Penguin
07/04/12 01:42:14 MCdnGupN
aio_write()でユーザ空間の登録だけして、後からハードウェア割り込みでその登録したユーザ空間にアクセスすることってできる?
やり方教えて。

631:login:Penguin
07/04/12 02:34:41 HoyZz9hB
>>626
自分はこれが良かった。
URLリンク(www.freesoftwaremagazine.com)

632:login:Penguin
07/04/15 01:56:51 YIKahQqf
タスクレットの中でcopy_to_user()、copy_from_user()を使えますか?

633:login:Penguin
07/04/17 02:52:55 IoB9zeVk
試してみろ!!
callした瞬間ぼくの丸太のような足蹴りが君の股間をつぶす
それでもいいのなら!

634:login:Penguin
07/04/27 00:53:37 6m6QKylD
プログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。

635:login:Penguin
07/04/27 06:02:05 DTYmU0pC
URLリンク(www.linux.or.jp)

636:login:Penguin
07/04/27 06:03:05 DTYmU0pC
URLリンク(www.linux.or.jp)

637:login:Penguin
07/04/27 08:23:06 6m6QKylD
ユーザプログラムで確保したメモリの物理アドレスを知る方法と、その物理アドレスを使ってメモリにアクセスする方法を教えて。

638:login:Penguin
07/04/27 08:26:29 6m6QKylD
(1)ユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。

>>634-635 そこの記述では不十分だよ。


639:login:Penguin
07/04/27 10:46:58 cjUqO3s+
>>638
つ 馬本

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




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

あと>>638の(2)については、知ってる人いないの?

641:login:Penguin
07/04/27 21:40:17 67IsA5dw
痛い人現る

642:login:Penguin
07/04/27 23:10:53 EZ45sIxG
cr3レジスタからたどれば

643:login:Penguin
07/04/27 23:27:03 6NURgk06
>>642
で、そのcr3レジスタの値はどこから持ってくるの?
cr3レジスタの値はあくまでも現在のプロセスの仮想アドレスのページテーブルだよね。
カーネルプロセスからユーザプログラムのページテーブルを取得するにはどうするの?

mm_structを保存しておけば、任意のユーザプロセスのメモリ空間にアクセスできる?

644:login:Penguin
07/04/28 04:22:35 +D3gS6jR
カーネル書き直せば?w

645:login:Penguin
07/04/28 07:44:33 oKLKreO7
カーネルを書きなおしてもいいよ。どこをどうすればいいの?その方法を教えて。

(1)カーネルから任意のユーザプログラムで確保したメモリの物理アドレスを知る方法と、
(2)その物理アドレスにアクセスする方法を教えて。


646:login:Penguin
07/04/28 07:47:13 dRSGn50m
カーネルからだとページテーブルがページアウトしている可能性もあるから
めんどくさい

647:login:Penguin
07/04/28 08:04:23 oKLKreO7
ページアウトはしていないと仮定していいよ。それなら簡単?

648:login:Penguin
07/04/28 11:40:13 Fr2ol1ef
ザワザワ…
ザワザワ…


649:login:Penguin
07/04/28 23:24:32 ZU2q9XRX
>>639
URLリンク(d.hatena.ne.jp)

650:login:Penguin
07/04/28 23:42:14 o6o1fGCI
馬の多さにワロタ

651:login:Penguin
07/05/03 23:34:15 ErpReMz0
カーネルのソースツリーの一部分だけ、お試しでコンパイル
したいときってどのようにすればいいですか?

たとえば、lib/ の下だけすこしいじって、syntaxのチェック
だけしたいときとか。2.6.21です。

652:login:Penguin
07/05/04 00:08:49 9yQs8D1Y
>>651
なんだかんだいっても、一度全体コンパイルしておくのが一番早い。

653:login:Penguin
07/05/04 00:18:46 yYLKnQ2E
>>652
thx.でも、

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

わたしのへぼマシンだと。

654:login:Penguin
07/05/04 00:23:00 gFGVYRPM
やっぱりCPU速くするのが一番

655:login:Penguin
07/05/04 00:24:14 yYLKnQ2E
そこをなんとか。

656:login:Penguin
07/05/04 00:35:21 n4WASQRt
>>653
2.6だったらトップディレクトリから

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

とか出来る。


657:login:Penguin
07/05/04 00:38:41 yYLKnQ2E
できました。ありがとうございました。

658:login:Penguin
07/05/04 01:24:26 ulT/mofy
>>576
カーネルをコンパイルしたgccでモジュールをコンパイルしないとinsmod時にそのエラーが出るよ。

659:login:Penguin
07/05/13 23:53:14 EYFP+J0v
質問です。
>>620さんと同じ状況です。
ただ>>628>>629の方法を試したのですが
解決しませんでした。
いまだに>>620さんが書かれてるエラーがでてしまいます。
考えられる原因はありますでしょうか?
ubuntu 7.04、gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
を使っています。


660:login:Penguin
07/05/26 11:11:39 XoKsvVbX
>>15
IPLで使いたい分のメモリを確保すればいいって聞いたことがある。
カーネルのブートパラメータでから使いたい分を引く感じ。

661:login:Penguin
07/05/26 16:19:33 olOYm4ED
>>660
それで短くなるの? ならないと思うけど。

662:login:Penguin
07/05/26 23:30:58 XoKsvVbX
>>661
あれ?なんかぜんぜん違う話へのレスになってる…。
スマソ、なんか誤爆っぽい…orz

663:login:Penguin
07/06/03 15:06:38 W8zh9WHI
ドライバ内での double 型の使用について質問があります.

Kernel 2.6 のドライバ内で double の演算と,sprintf("%.2f", ...) の様な
関数を使うのはどうすればいいのでしょうか?

現在,下記のようなエラーが出ていてドライバをロードできないです.
% make
...(snip)
WARNING: "__adddf3" [hoge.ko] undefined!
WARNING: "__muldf3" [hoge.ko] undefined!
WARNING: "__floatsidf" [hoge.ko] undefined!

% insmod hoge,ko
insmod: error inserting 'hoge.ko': -1 Unknown symbol in module

664:login:Penguin
07/06/03 15:14:36 1QJRDZ5d
>>663
ドライバで浮動小数点の計算はしない方がいいと思う。

665:login:Penguin
07/06/03 15:35:59 W8zh9WHI
proc_fs で表示するために使いたいのですが,駄目なんでしょうか...?

666:login:Penguin
07/06/03 16:53:58 KH63vIBs
浮動小数点演算はFPUを使う可能性があるから
カーネルモードでは可能な限り避けるべき

きちんと対応すれば使えないことはないけど、
速度的な利点はほとんどなくなる

667:login:Penguin
07/06/03 23:23:42 /hAY1VOO
「速度的な利点」って何に対する何の利点?

668:login:Penguin
07/06/03 23:31:28 5NVvB11p
きっと >>666 の CPU は浮動小数点演算を使うと割り込み禁止になるんだろう

669:login:Penguin
07/06/04 00:46:42 CXn8XPVL
nVidiaのドライバの解析って3年ぐらいまでやってる人間
いたけど今どうなってるの?

670:webmaster@気まぐれアナスイ
07/06/04 12:11:48 RaTjYNE+
!(-_Φ+){ ... }

671:663
07/06/05 02:17:22 aHzmfEHS
とりあえず固定小数点もどきをつかって回避して,こんなのできました.
お時間があれば添削などしていただけると嬉しいです.

URLリンク(acapulco.dyndns.org)

672:login:Penguin
07/06/05 10:49:22 qhZ8Q9LN
>>665
固定小数点じゃだめか?

値が必ず正値と仮定、valに本当の値の100倍を入れるとすると

 unsigned int val;
 sprintf(str, "%d.%02d", val/100, val%100)

みたいな感じ
負値だと剰余の扱いがちょっと面倒になる

673:login:Penguin
07/07/16 18:26:19 h1/eDBu5
はck

674:login:Penguin
07/08/06 00:29:52 E6mK6Nbx
ドライバ書くときってCPUの事は知っておいた方がいいのでしょうか?

675:login:Penguin
07/08/06 01:55:04 Taq1zrH7
どうでもいいよ
タマゴがどっち向きかだけ知っとけば

676:login:Penguin
07/08/28 23:24:19 aUO2fWSH
あげ

677:login:Penguin
07/08/29 01:23:49 bmM5qB+B
>>675
俺はとんがったほうから食べるのが好きだ。

678:login:Penguin
07/08/29 23:50:22 E1JDVS03
どちらから割るのが正しいかが問題だ。大きいほうか、尖った方か。
16bit時代以降、中には大きい方から割って、尖った方から食べるという
両刀使いが出てきてさらにややこしくなった。

679:login:Penguin
07/08/30 12:40:15 pmmgZB5J
そんな両刀使いがいたのか
具体的にはドレ?

680:login:Penguin
07/08/31 00:43:34 pR6eg2ir
NUXIとかmixed endianでggr。1234じゃなくて2143並びになったりするらしい。
実は漏れも知らなかったが、最近でも某腕プロセッサはデータ型によってはまさにミックスになるそうな。

681:login:Penguin
07/08/31 01:04:08 //apeG96
まあそうはいっても日常的にミックスは体験してるよな
通信プロトコルは大体ビッグだからな

682:login:Penguin
07/08/31 07:07:24 IHXG9RG5
uartのドライバ書きたいのだけど、uart_opsのメンバのそれぞれの責務がよく分からない。
文字列送って受けるだけなのに、なぜこんなにいっぱいあるんでしょう?
軽くおしえてもらえないでしょうか?
include/linux/serial_core.h
/*
* This structure describes all the operations that can be
* done on the physical hardware.
*/
struct uart_ops {
unsigned int (*tx_empty)(struct uart_port *);
void (*set_mctrl)(struct uart_port *, unsigned int mctrl);
unsigned int (*get_mctrl)(struct uart_port *);
void (*stop_tx)(struct uart_port *);
void (*start_tx)(struct uart_port *);
void (*send_xchar)(struct uart_port *, char ch);
void (*stop_rx)(struct uart_port *);
void (*enable_ms)(struct uart_port *);
void (*break_ctl)(struct uart_port *, int ctl);
int (*startup)(struct uart_port *);
void (*shutdown)(struct uart_port *);
void (*set_termios)(struct uart_port *, struct ktermios *new,
struct ktermios *old);
void (*pm)(struct uart_port *, unsigned int state,
unsigned int oldstate);
int (*set_wake)(struct uart_port *, unsigned int state);

683:login:Penguin
07/08/31 07:12:11 Bq5CxAt1
>>682
シリアル通信の基本を誰かに教えてもらったら...

684:login:Penguin
07/08/31 14:54:06 bz+r4Vre
>>682
ドライバを組むのなら、ターゲットの仕様をきちんとおさえるのが基本。
uart程度の解説なら本屋にいくらでもあるし、ググればいくらでも情報
が手に入る。

その程度の情報収集ができないなら、ドライバ開発は諦めたほうが良い。


685:login:Penguin
07/09/12 11:40:08 W+jFMZNC
初歩的な質問で、すみません

linuxカーネルは2.6.18-1.2798.fc6-i586で、fedora core6のカーネルを使っています

USBマウスが差し込まれたときに、呼ばれるprobeのコールバックと、外されたときに呼ぶdisconnect
のコールバックを書いたのですが、なぜかvenderIDと、productIDに間違いはないはずなのに
これらが呼ばれません

USBドライバの登録には成功しているようなのですが、登録に使う構造体の初期化に間違いがあったのでしょうか
それとも、このドライバ以外のUSBマウスドライバがあると、駄目なのでしょうか

文字数制限の問題で、ソースは>>686に貼らせていただきます

686:685
07/09/12 11:47:03 W+jFMZNC
コピペでは無理だったので、ロダに上げしました
URLリンク(sakuratan.ddo.jp)

687:login:Penguin
07/09/12 12:38:12 b4ZSgzLd
>>685
ハードウエアを接続したとき、dmesgにはなんて出てくる?

688:685
07/09/12 13:23:18 W+jFMZNC
>>687

dmesgは、このように出力しています

usbcore: registered new driver usb_mouse
succes_usbregist<6>usb 4-2: new low speed USB device using ohci_hcd and address 6
usb 4-2: configuration #1 chosen from 1 choice
input: Cypress Sem PS2/USB Browser Combo Mouse as /class/input/input6
input: USB HID v1.00 Mouse [Cypress Sem PS2/USB Browser Combo Mouse] on usb-0000:00:0b.1-2


689:login:Penguin
07/09/12 13:41:02 Eo9vQi0w
>>688
フックできないような感じだけど?

690:login:Penguin
07/09/12 14:04:06 gJXCaswd
usb_device_id の .driver_info だけ定義するとすべてのデバイスにマッチするらしい(馬本参照)ので
デバッグ用にやってみるのがいいかも

> このドライバ以外のUSBマウスドライバがあると、駄目なのでしょうか
たぶんそう

691:login:Penguin
07/09/13 12:25:45 oMFp/NB1
ドライバの開発って難しいでしょうか?

692:login:Penguin
07/09/13 21:34:22 dbMVSAQN
そのような質問をする方には難しいです。

693:login:Penguin
07/09/14 03:35:04 bpVkKQxn
>>685
むかしは定義に合致するドライバが呼ばれたが最近は1つ合致するやつが
あると、それ以上呼ばないようになってたと思う
HIDドライバが先にとっちゃうんでしょう。.configで無効にしてやってみそ

694:login:Penguin
07/10/03 08:13:37 WhUHfKUP
あげ

695:login:Penguin
07/10/07 18:44:44 wad8eg6i
UIO:ユーザー空間でデバイスドライバ作成が可能に
URLリンク(www.atmarkit.co.jp)

696:login:Penguin
07/10/08 12:39:42 v1nGyoTL
馬本でデバドラを勉強しています。
カーネルのソースでドライバやったことがない人にも分かりやすいソースってどれですかね?

697:login:Penguin
07/10/08 12:48:08 Y0LW8BuC
そんな事言ってる位なら、馬本のドライバソース見ればいいじゃん。ダウンロードできるよ

698:login:Penguin
07/10/09 08:54:41 qhmHV8vi
>>696
何系のドライバかによるのでは>どれを見たらいいか。

ドライバの種類によってどういうインタフェースセット(いわゆる*_opsとか)を
register_*とかで登録するのか、またインタフェース間やカーネル側処理がキュー等を
介してどのように連携するのか全く異なる。

漏れも読みたて入門者なんであれだけど、

キャラクタデバイスなら/dev/null(mem.c)とパラレルポート(ppdev.c + parport/*)
ブロックデバイスならフロッピー(floppy.c)かramdisk(rd.c)
ファイルシステムならromfs(romfs/*, readonly-fs)とbfs(bfs/*, readwrite-fs)

が短かったり馴染みがあったりしてすんなり読めた。


699:696
07/10/09 12:16:03 BjHL69v3
>>697-697
レスありがとうございます。

700:login:Penguin
07/10/18 23:39:59 YYamJxiT
複数のデバイス間でデータをバイパス
したいのですがサンプルないですか?

701:login:Penguin
07/10/19 14:04:12 CYTWECsc
いくらなんでも漠然としすぎだろw

702:login:Penguin
07/10/20 01:03:15 jtNU9aYY
2ポートとか4ポート付きのNICって
モジュールはどのようにロードされるの?
またデータの共有とかRx,Txバッファの
管理とかどうなってるの?

703:login:Penguin
07/10/20 04:41:50 izm7N8bV
1ポートのNICが複数枚ある場合と大差はない。


704:login:Penguin
07/10/21 17:41:17 yGaxVLsH
>>701
各ポートにデバイス eth0, eth1 ... と付いて、このデバイスファイルごとに
設定が管理されるだけじゃね?

705:login:Penguin
07/10/21 18:39:44 SCXCQ8PP
>>704
pciのデバイスとしては1つにしか見えないんだけどさ
どうやって、その後4ポート認識してるかわからないんだよね

706:login:Penguin
07/10/21 19:36:55 f7YPzoUy
>>705
それはPCIブリッジが載ってるからじゃね?
LANチップはその向こうのローカルバスに4ケ載ってるかと。

707:login:Penguin
07/10/23 20:59:15 pGCXISsZ
どなたかおしえてください。カーネルモジュールにバイナリコードを渡したい
のでrequest_firmware()を呼び出しているのですが、このrequest_firmware()
という関数から呼び出されるhotplugはどのディレクトリでバイナリコードを
検索してくれるのかわかりません。言ってみればバイナリコードをどのディレクトリ
におけばいいかがわかりません。ディストリビューションはfc6でカーネルは2.6.22です。

カーネルモジュールに対応するデバイスは無いので、sysfs上に仮想的なバスと
デバイス、ドライバを作ってあります。このデバイスのdevice構造体を使って
request_firmwareを呼んでいます。申し訳ありませんが、かなりまいってるので
お願いします。ご助力ください。

708:login:Penguin
07/10/23 21:05:08 tiPDo332
>>707
Documentation/firmware_class/*
?

709:login:Penguin
07/10/23 22:03:44 +D+WWc4l
BUFFALOのCD-RWドライブがまだ使えるのでハックしたいんですが、
必要な情報ってメーカーから提供されているんでしょうか?

710:login:Penguin
07/10/24 15:38:46 8BiGN5WQ
ハゲシク板違い

711:login:Penguin
07/10/26 18:00:12 OMFZLcsd
お馬さんの本読んで勉強してるのだが、さっぱり分からん。
ちなみに今3章のscullデバイス。

みんな最初はこんなもんなの?
それとも、俺がバカなだけなのか?諦めたほうがいいのか?

意見求む!!

712:login:Penguin
07/10/26 18:53:10 OVakku/9
やる気の問題じゃね?

713:login:Penguin
07/10/26 20:06:04 nlKsXgN2
>>711
「作ってみなきゃわかんない」 の典型かもしれん。
実際作業するとキャラクタデバイスは楽しい。

そして、ブロックデバイスに挑戦するときに
分けわかんなさをもう一度楽しめる

714:login:Penguin
07/10/27 11:47:28 US/tv6oE
よくわかんないのが、他のドライバの叩き方なんだよな。

ネットワーク通信してファイルとかブロックデバイスにも書くような
ドライバが最終ゴールなんだけど、他のドライバのAPIってどうやって
叩くのか(どこがインタフェース界面なのか)と。

715:login:Penguin
07/10/27 12:04:42 Y1miLqrF
OSの勉強やり直しっぽい

716:login:Penguin
07/10/27 19:45:56 5LV4rb/o
>>714
それってkernelspaceじゃなくてuserspaceでやればいいのでは。

717:login:Penguin
07/10/27 20:15:47 US/tv6oE
>>716
使う側からはファイルシステムに見せたいので、実際プロトタイプは
FUSE方式でやろうとしてます。でもそれだと簡単ではあるものの
二級市民みたいなので、kernelspaceでの正しいやり方を知りたいなと。

nfsとかcryptfsのコードを読むは読むにしても、どっかにそういう
各種ドライバを内部から使うための情報をとりまとめたものとかは
ないのかなと。

718:login:Penguin
07/10/27 21:00:45 RlzxlVfH
>>717
とにかくなんでもいいから氏ねw

719:711
07/10/28 02:49:08 W9zUZBn1
>>712
鋭いな。そうかもしんない。

>>713
なるほど、これは貴重な意見が聞けた。サンスコ!!

720:login:Penguin
07/10/28 02:54:06 7ULWmmgi
>>717
ntfs-3g なんかはfuseだけど、実用的に動いているし、全然2級って感じしないけど。

721:login:Penguin
07/10/28 23:36:04 jy3FHf6c
馬本にOSの仕組みを知ってる必要があると書いてありましたが、
どんなことを知っていたほうがいいのでしょうか?

722:login:Penguin
07/10/28 23:41:48 1vAj4w/k
メモリ管理・特権・スケジューリング・ファイルシステム(ry…全部じゃん

723:login:Penguin
07/10/28 23:45:24 jy3FHf6c
>>722
ありがとうございます。
詳解Linuxカーネルも読みます。

724:login:Penguin
07/10/29 00:42:23 uCaYz1aO
>>723
知りたくなったときに読めばいいよ
でも必ず買っとけ

725:login:Penguin
07/10/29 09:44:50 wx/mrO8x
買うなら原書(英語版)のほうがいいぜ
版が新しいし安いからな

726:login:Penguin
07/10/29 10:27:48 nDk3r2gZ
> 版が新しいし
4th edition でたの?

727:login:Penguin
07/10/29 20:53:20 Bg0Jp9i7
konozama.comとか少しは自分で調べようよ

728:login:Penguin
07/10/29 23:42:16 oMEBh2dX
Oh~、チョッとお聞きしただけで損何怒らなくても
いいじゃないですかぁ~。Hey,take it easy !
でも調べるところは教えてくれるアナタに感謝で~す!

729:login:Penguin
07/11/08 00:29:00 Cm3oK6QC
メーカーとかが作ったデバドラのソースって公開してるものはあるのでしょうか?

730:login:Penguin
07/11/08 01:07:57 vscqki7B
ネットワークデバイス系はそういうのが結構多いような。
超いい加減だけど:
つ $ grep -r 'Inc[.o]' drivers | egrep -v '(Red|Vista|Foundation)'


731:login:Penguin
07/11/12 11:19:56 vNQ95D4g
kernel2.6.18.6でターゲット側のUSBドライバ書こうとしてるんですが
参考になるサンプルってありますでしょうか?
drivers/usb/gadget/net2280.cとかが近いのかも知れないですけど
どうもpciで登録してるように見えて「別物かなぁ?」と思いまして。

あとホスト側のUSBドライバで挿されたら何でも拾う設定って
usb_device_idの.device_infoに適当な値を突っ込めばいいと思って
たんですがどうにもattachの際に自作のprobeが呼ばれません。
成功した方っていらっしゃいます?

ご存知の方いらっしゃればお願いします。

732:login:Penguin
07/11/12 23:57:28 xIHzaILy
>>731
おめー御馬様のサンプル
見てていってるんだよね?

もしそうなら、適正無いから諦めろ
見てないなら、お前は調査能力ない
からニートかなんかになれ

733:login:Penguin
07/11/13 00:56:13 0Tz4Ruwv
>>732
よく判ってらっしゃる。
馬本はさらっと読みましたが元がLinuxでも組み込みでもない世界で
やってて、急遽ヘルプで入ったんでさっぱり。

前任が逃げてヘルプなんで誰も知ってる人がいない\(^o^)/

で、聞いてみたんですが俺も逃げっかな・・・

734:login:Penguin
07/11/13 01:11:37 nAlW3/rO
>>733
一週間悩んだら解かんないか?
すげー複雑な科学計算とか遺伝子関係の
プログラミング以外ほとんどの対象のプログラミング
なんて簡単だぞ

時間がかかるものが多いのは事実だが
ドライバは簡単な部類だ

735:login:Penguin
07/11/13 01:21:16 0Tz4Ruwv
>>734
まだ2日程度なんですよね。
「デバドラ」だと思ったんで聞いてみたんですがレベル設定あるみたいなんで
「くだらねぇ」でも行ってきます(´・ω・`)

736:login:Penguin
07/11/13 01:24:22 O430Avmc
御馬様っていうのか・・・
昨日、買いました。勉強します~

737:login:Penguin
07/11/13 09:24:54 SFIG7nsG
>>734
ちなみに、回答しない人の言うことは無視したほうがいいよ。
>>732はニートとか言ってるし典型的な煽り。

738:735
07/11/14 00:27:19 2+ZY8Hov
馬本見たら「本書の範囲を超えるので載せません」て書かれてた(´・ω・`)
USB gadgetは難しいだろうかnet2280.cよりもZero.c見たほうがいいのかなぁ・・・。

739:login:Penguin
07/11/14 02:20:20 aLuJUt0c
文句とか愚痴だけいって何も貢献しない人間ほどむかつく奴はいない。

740:login:Penguin
07/11/17 09:40:38 MN9c6cz5
>>739
どうどうどぅ…

741:login:Penguin
07/11/17 11:39:12 AZzmHExp
>>739
Do! Do! Do!

742:login:Penguin
07/11/17 11:43:31 4avAGLIe
do_fork

743:login:Penguin
07/11/29 13:55:56 yo1OGExb
mmapで特定のデバイスのIOメモリを仮想空間に割り付けて,
その領域に対してユーザーからデータを書き込むことを考えています.

ユーザープログラムからその領域上に,あるデータ型の双方向リスト
を作りたいのですが,ユーザー空間の特定のアドレス範囲から空き
メモリ領域を動的に確保する方法ってないでしょうか

void *dev_malloc(start_address, end_adress, nbyte);
とすると仮想アドレスstart_address~end_adressの範囲から
nbyteバイトの領域を確保するみたいなイメージです


744:login:Penguin
07/11/29 20:09:08 iCD9/EY6
>>743
かーなーり スレ違い
デバイスドライバ関係ない
汎用heap管理ライブラリがほしいってことだろ

heap-management とか ヒープ管理 でぐぐってみそ

ちなみに
void *dev_malloc(start_address, end_adress, nbyte);
ってI/Fはありえないと思うぞ
毎回 start_addressとend_adressを与えるわけ??

745:login:Penguin
07/12/02 23:50:11 lbIQi7BJ
あげ

746:login:Penguin
07/12/13 19:50:31 pBhS9AMD
あげ

747:俺
07/12/18 23:09:45 K//ZswLt
ドライバでCPUキャッシュのフラッシュやりたい!
どうやるの?だれかおせぇ~てぇ~

748:login:Penguin
07/12/18 23:41:07 uNdsweTC
>>747
CPUキャッシュのフラッシュをする命令を実行すればいいんじゃない?
CPUはなに?

749:俺
07/12/18 23:59:27 K//ZswLt
>>748
Xeonの5100です。
データシートとか見つからなくて。。。
ご存知でしたら教えていただけませんか?

<経緯>
Linuxマシンで、DMAでPCIeのデバイスからホストメモリにデータ転送
したときにキャッシュのせいか、2周目のリングバッファ領域が
うまく参照できていなく、フラッシュすればと思いました。。



750:login:Penguin
07/12/23 13:45:51 VU+KNtKv
>>ORE
URLリンク(www.intel.com)

751:login:Penguin
07/12/24 18:03:58 ugbio3bt
Linux 2.6.22 ARM9マシンでシリアルコンソールでデバッグするためにカーネルコマンドラインで
console=uart,mmio,0x80004600,57600n8
とすると、カーネルの初期化中に
early_uart_console_init()→register_console()→early_uart_setup()→parse_options()→ioremap()→__arm_ioremap()→__arm_ioremap_pfn()→get_vm_area()→__get_vm_area_node()→kmalloc_node()→kmalloc()→kmem_cache_alloc()
が呼ばれてkmem_cache_alloc()でこけます。
slabアロケータがまだ初期化されていないのにkmem_cache_alloc()が呼ばれているのがこける原因と思うのですが、armマシンでもearly_uart_consoleは使えるのでしょうか?

752: 【大吉】 【801円】
08/01/01 19:54:53 EHGXP/cp
新年あげ

753: 【中吉】 【156円】
08/01/01 20:58:21 LfamTH+n
>750
749じゃないけど,これいいな.サンクス.
みんなチップのデータとかはどこから調べてくるの?
ちょっと想像してみたけど,「とりあえずメーカサイトを調べる」
以外の方法がわからん.
windowsのドライバから情報調べたりする人もいるの?
いたらその解析方法とかおしえてください.

754:login:Penguin
08/01/01 20:59:27 VCekl7x7
>>753
メーカに電話して聞く

755:login:Penguin
08/01/01 23:23:30 hQDOyXLN
>>749
Intel の CPU だとその手のキャッシュのことは気にしなくていいんじゃなかったっけ?
いわゆるバススヌープ。ま、明示的にフラッシュしたきゃできるだろうけど。
(実は俺自身は x86 以外用のドライバしか書いたことがないので聞きかじりだが...)

あと、キャッシュが効いているなら1周目でも駄目な場合がありそうだがどうなん?
単にリングバッファのアリゴリズムでしくじってたりして。

って、よく見るとえらい昔の書き込みだった。もう解決したのかな。

756:login:Penguin
08/01/02 12:58:56 jVjgkvN4
チップの購入先の営業から入手とか
チップベンダのwebサイトからダウンロードだろ
常考

757:login:Penguin
08/01/14 11:44:33 MLu8ArWP
今馬本の第 3 版読んでんだけど scull のソースコードって
Web でダウンロードできるの?

758:login:Penguin
08/01/14 11:59:56 hAs2atpA
あるよ

759:login:Penguin
08/01/14 13:03:13 MLu8ArWP
>>758
早速ありがとう.
本を斜め読みしてるんだけど URL が見当たらないです.
検索しても見付からないし,もしよろしければ教えていただけますと
うれしいです

760:login:Penguin
08/01/14 13:36:46 Q2m15cvj
>>759
>>80

761:login:Penguin
08/01/14 14:10:16 MLu8ArWP
>>759
ありがとう! 3版のは FTP で以下からダウンロードできました.

ar.linux.it/pub/ldd3/ldd3-samples-1.0.0.tar.gz

かなり感謝です ありがとう

762:login:Penguin
08/01/14 14:13:07 MLu8ArWP
自分にお礼ちまった

>>761の「>>759」は >>760 の間違いです
>>760さんありがとう

763:login:Penguin
08/01/17 11:56:40 1+AIbUNm
>>761
あれ?お馬さんの第3版それなの?
日付が気になるので、第3版翻訳本に載ってたのをこぴぺ

fURLリンク(example.oreilly.com)
examples.tar.gz 70 KB 2005/05/12 0:00:00

ちょいとだけ新しいかも。同じくLinuxデバドラはじめる所なので
よろしく~。Win系でWDM書いてました~。

764:!omikuji !dama
08/01/25 07:11:44 dVpHcdky
kaso

765:login:Penguin
08/01/25 21:56:39 OZPnpJ0W
ドライバでのロックの掛け方とか
その変のデザインパターンみたいなもの
ないのですか?

馬本読んでも、DualSocket 4コアとか
その辺の場合どうすればいいとかまったく
書いてなくて困ってる。

CPU毎にあるモノを意識しなければならないのか
全リソースを意識した作りなのかの判断も
ケースバイケースとかだし。WDMの方がいいよね

766:login:Penguin
08/01/26 23:10:19 jNmSnKBM
>>765
スピンロック様

767:login:Penguin
08/01/27 14:19:40 /9d4A9Tg
WDMってよく知らないが、割り禁、スピン、寝る&起こす以外に
排他の方法があるの?

768:login:Penguin
08/01/27 17:28:29 Q2ylOq7r
そもそも排他なんじゃねーの?
昔はLinuxも明示的にスケジュールよぶまで
カーネル空間は排他だったじゃん
SMPが出てきて全部直す羽目になったけど

769:login:Penguin
08/01/27 19:45:28 /9d4A9Tg
割込みハンドラ

770:login:Penguin
08/02/03 19:45:35 coODkdMv
過疎

771:login:Penguin
08/02/07 03:30:55 9BnmgFGp
「新着1件ってことは、いつもの良スレ上げ厨かなぁ」と思ったらそう来たか。

772:login:Penguin
08/02/19 16:29:32 vNMS2dUr
基本的にPCIデバイスにデータ渡すだけのドライバを作ってるのですが、
I2Cデータ転送もしたいといわれ、苦戦中につき質問させて下さい。

カーネルリリースは2.6.11-1.1369_FC4

今のところインクルードしてるのは下記ヘッダーです。
linux/module.h
linux/kernel.h
linux/pci.h
linux/pci-dev.h
asm/uaccess.h
unistd/.h
sys/ioctl.h
sys/perm.h

I2Cのオープンのために、これにfcntl.hを加えたところ、dev_tの型などが再定義されたとエラーが出ます。


また、KERNELDIRを取得して、その場でMAKEしているため
Makefileにて、環境変数C_INCLUDE_PATHに/usr/includeを設定しているのですが
fcntl.hを除いてコンパイルしてもclose, ioctl等が未定義と警告されます。

これらエラーや警告の対応に行き詰まってしまいました。
インクルードに過不足あるのか、Makefileが悪いのか、そもそもPCIドライバからI2Cを叩く方法が悪いのか…
アドバイス等お願い出来ますでしょうか。

773:login:Penguin
08/02/19 19:10:24 5BDGV8A6
デバイスドライバでunistd.hなんかincludeしちゃダメだろ
fcntl.hも同様

774:login:Penguin
08/02/19 21:35:29 ec7S8nn5
何言ってるのかわからないなw
PCIデバイスとして、I2Cバスへのブリッジが載っているのか?
それとも、PCIバス/デバイスとは関係なく、全く別のI2Cバス上のデバイスをアクセスしたいだけなのか?

775:772
08/02/19 22:00:59 vQR2/dLm
>>773
やっぱりダメですか。

というか、無理やり環境変数使ってコンパイラのエラーを抜けてる(unistd.h以降3ヘッダ、加えてfcntl.h)のは全部includeしちゃダメですかね。

>>774
>PCIデバイスとして、I2Cバスへのブリッジが載っているのか?
>それとも、PCIバス/デバイスとは関係なく、全く別のI2Cバス上のデバイスをアクセスしたいだけなのか?

PCIデバイスにI2Cバスへのブリッジが載っている、のはずです。


776:login:Penguin
08/02/19 22:53:37 5BDGV8A6
つーかさ
カーネルモードで動いてるデバイスドライバの中から
open()とかclose()とかioctl()みたいなシステムコールを
発行できるわけないだろ?

>>772が作りたいと思ってるのは root権限で直接I/O叩くだけの
ユーザランドで動くアプリなんじゃないのか?

777:login:Penguin
08/02/19 23:10:27 ec7S8nn5
>>775
じゃあ、そのPCI-I2Cブリッジのデバイスドライバを書いているんだとして、
>I2Cのオープンのために
なんで、こうなるのよw 
とりあえずDocumentation/i2c/summaryでも読んでくれ。

778:login:Penguin
08/02/20 08:43:00 zgvkT7V3
>>776
呼んじゃダメなんですね。了解しました。
先週までアプリしかやったことがなく、ついそっち寄りな考えに、と、蛇足でした。失礼しました。

>>777
あー、確かに。
教えていただいたものを読んでみます。
ありがとうございました。

779:login:Penguin
08/02/20 09:40:57 zxxPBExl
>>773
そういえば、しちゃダメだ ってどこにも書いてないな
わからない奴はわからないんじゃないか?

780:login:Penguin
08/02/21 00:46:11 VUV3LHo/
ちょっと相談なんだが、いいかな

writeの中で長時間割り込み待ちをするような処理と、その場で終わる処理を持ったデバドラがあって、
(処理の切り替えはioctl)
まずアプリAが長時間かかる処理のためにwriteわ呼び出す。

当然割り込み待ちになるが、そのままアプリBがioctlやwriteを呼び出すとどうなる?
普通に処理出来る?

781:login:Penguin
08/02/21 00:55:15 A2lpGb2W
一つのデバイスを二つのアプリで同時に使うっつー事ですか?

782:login:Penguin
08/02/21 01:18:43 VUV3LHo/
>>781
その通りで。
ただ、1つのアプリがマルチスレッドになってるという場合もありでお願いしたい

783:login:Penguin
08/02/21 01:55:12 6LvlPNy5
できるかどうかは作り方次第だろうな

資源の排他処理が必要なら、ロック使わなきゃならん
その場合は、すぐ終わるはずの処理ももちろん待たされる

待たせたくなけりゃ、長時間かかるというwriteにバッファを設けて
write処理と割り込み処理とを分離するみたいな工夫したらどうだ

的外れならスマソ

784:login:Penguin
08/02/21 02:11:45 VUV3LHo/
>>783
資源は共有しないからロックはいらなさそうだ
writeにバッファを設けて処理を分離ってのがイマイチわからんのだけど、説明頼んでもいいかい?
デバドラの中でもスレッドとかで並列にするの?

785:login:Penguin
08/02/21 06:04:45 Xs+RkuJQ
シリアルポートを想像してみたらどうだろう
Write、Read、割り込みがそれぞれ並列に動くはずだ

Writeで割り込み使ってるかどうかは知らないけど

786:login:Penguin
08/02/21 07:26:26 Kf6eqU14
ブロック と ノンブロック という用語を使ってほしいところだな

んで複数プロセスから同時に使えるかどうかはデバイスドライバの作り方次第
手抜きにつくると open()されるときに競合問題を判断して
同時にひとつとかopenできないようにするよな

複数同時にopenして、ひとつがブロックしてる時に
また別のがノンブロックの処理要求してきたなんて場合は
そういう風にうまく動くようにドライバの中で考慮する必要がある

787:login:Penguin
08/02/21 07:32:20 Kf6eqU14
追記

呼び出し側がマルチスレッド使ってるかどうかはあまり関係ない
ふたつのプロセスがメモリを共有してようがしてまいが
ドライバにとっては関係ない話だ

それよりCPUが複数ある(いわゆるSMP)かどうかの方が重要
smp対応させるなら必要なところできっちりspinlockしないとダメ

788:login:Penguin
08/02/21 08:59:36 VUV3LHo/
>>787-788
ブロック=長時間処理
ノンブロック=即時処理
でおk?

複数からopenされるのはアリにしないといけないっぽいんで、考えてみる。

ブロック中にアプリBからもwrite自体は呼び出せる?
その時点で破綻してるなら、今のwriteをそのままスレッド化して、write自体はスレッド起動だけにするなりで対応とか…ダメかな

あとCPUは1つ前提でおkっす。
余裕があったら後学のためにもsmp対応も抑えておきたいがw

789:login:Penguin
08/02/21 09:10:48 Kf6eqU14
> ブロック中にアプリBからもwrite自体は呼び出せる?
もちろん呼べる

ブロック処理とは、簡単にいうと処理開始をデバイス(ハードウェア)に
通知したあとスリープ状態に入り、処理完了割込が入ったら
割込ハンドラがスリープ(ブロッキング)しているプロセスを
たたき起こすって流れ。

アプリAがスリープ(ブロッキング)している間に
アプリBからreadなりwriteなりが発行されるのは当然ありうる話。
ちゃんとドライバを書いておけば問題なく動く。

linuxカーネルのソースコードそのものがいいサンプルコードだから
いろいろ読んでみるとよい。

それから、procfs(/procの下に仮想ファイルをつくる)に
状態監視・デバッグ操作用のI/Fを用意しておくと後々楽になるよ。

790:login:Penguin
08/02/21 09:27:27 VUV3LHo/
>>789
凄く参考になった!
ありがとう

>答えてくれた人達
いろいろありがとう

791:login:Penguin
08/03/03 00:13:39 JgGlbVL6
URLリンク(www.atmarkit.co.jp)

上記を参考にシステムコールをフックするプログラムを書きました(そのままでは駄目なので必要に応じて修正しています)。
コンパイルすると、

original_sys_uname = sys_call_table[sys_uname];
sys_call_table[sys_uname] = hook_uname;

のsys_unameで `sys_uname' undeclared (first use in this function) とエラーがでます。
これは arch/i386/kernel/syscall_table.S をインクルードしておく必要があるのでしょうか?

使用しているカーネル:2.6.23

792:login:Penguin
08/03/03 01:17:37 dOT+ttrq
>>791
よく知らんけど、これよめ。
System calls replacement
URLリンク(kerneltrap.org)

nm -uでundefinedなシンボルが置き換えらればいいだけなら、
LD_PRELOADなりLD_AUDITをつかってどうにかしたほうがいいんじゃね?
そうなら、以後下へどうぞ。

Linuxプログラミング
スレリンク(linux板)

793:login:Penguin
08/03/03 04:02:04 JCTvrwL7
>>791
sys_call_table[NR_uname] = hook_uname;
の様な気がするわけですが。

>>792
それはユーザー空間で乗っ取る方法ですがな。


794:791
08/03/03 07:25:41 zrYDUX8A
>>792-793
試してみます。
情報ありがとうございます。

795:login:Penguin
08/03/04 09:36:17 NdRlprld
>>791
乗り遅れたか!?

Linux 2.6からシステムコールのフックはできません。
パッチ当てなきゃできないようなことが
URLリンク(tldp.org)
8章にそのようなことが書いてあったはず。

記憶が確かなら、792の示したサイトの
unsigned long **sys_call_table = find_sys_call_table();を
加えればできたと思う。

796:795
08/03/04 09:39:35 NdRlprld
>>791
パッチを当てるのが嫌ならLSMを使ったらいい。
決まった関数で始めるとか、とかsecurity_operations構造体に登録するあたりとか
デバドラに似ているからsecurity以下を読めば使えると思う。

797:791
08/03/04 19:10:21 iX0t2env
>>795
どうもです。
あれから色々調べたら>>795の言うとおりに2.6.xからはできないみたいですね。
下記のURLに書いてある。i386_ksyms.cに

extern void* sys_call_table[];
EXPORT_SYMBOL(sys_call_table);

を、追加・再構築してやってみようと思います。

URLリンク(mail.nl.linux.org)

798:login:Penguin
08/03/04 20:25:09 neWtFAJV
>>791
調べもせずに書いてるけどLinux版のウィルス対策ソフトのお試し版に
運がよければカーネルモジュールのソースが含まれていて、なおかつ、
それがシステムコールのフックしていたりしないか?

799:791
08/03/05 00:39:02 QPFLTsD+
>>798
そのようなことはございません

800:login:Penguin
08/03/17 18:46:02 c0UdNwV3
あげ

801:login:Penguin
08/03/18 18:12:00 z8581E+A
init中にalloc_chrdev_regionでデバイス番号を動的確保した後で、
そのまま(関数内で)スペシャルファイルを作成する事は可能?

mknodコマンドでなく、あくまでインスコだけで済ませるように出来ないかと…

802:login:Penguin
08/03/18 18:22:19 qC/Waqz9
udevじゃダメなの?

803:login:Penguin
08/03/18 20:50:35 Hq9+Lc7G
>>801
オレならprocなりsysなりのみで済ます

804:801
08/03/18 21:37:57 z8581E+A
>>802>>803
それだとinsmod以外にも必要になるんじゃないんですか?
関数で無いですかね
(init_moduleから呼び出す)

insmod hoge
だけ実行すればアプリから叩けるような形にしたいんですが…

805:login:Penguin
08/03/18 21:49:17 irgQA2zj
shell スクリプト作ってその中で insmod、mknod すれば?
rmmod も出来るようにすれば、なお良いでしょ?

806:login:Penguin
08/03/18 23:47:40 z8581E+A
>>805
それが良さげですね。
ありがとうございました。

807:login:Penguin
08/03/18 23:49:33 owXiyD5i
>>801
mknodしたくないってだけなら、device_create(9)か、手を抜きたいなら
misc_register(9)に全部にまかせれば、>>802が言ってるように、udevが勝手に
スペシャルファイルを作ってくれるんじゃないか?

808:login:Penguin
08/03/19 10:35:22 J+fEVrF8
ブロックデバイスのブロックサイズってどこで決まってるの?
ユーザアプリから見る方法ある?

809:login:Penguin
08/03/19 14:37:31 ZMxkS/nc
>>808
mkfsする時に決まると思うが。
ext2/ext3 なら tune2fs -l で見るか、ファイルがあれば stat構造体の st_blksize を見る。

810:login:Penguin
08/03/20 00:19:26 tEIlyDHp
>>808
そのブロックデバイスドライバが制御しているハードの規格によりだね。
SCSI系ならMode Senseコマンドで取れたんじゃないっけ?

811:login:Penguin
08/03/20 00:24:56 tEIlyDHp
>>808
試してないけど、blktool(8)のblock-szコマンドでいけそうかもね?

812:login:Penguin
08/03/20 02:10:32 wMmGSYfl
>>809
フォーマットする前に最適値を知っときたい乙女心です

>>810-811
ありがとう。でもハードの規格というよりブロックデバイスとして
なんかその辺を返してくれるioctlなりなんなりがあったらいいな
とか夢想してた

813:login:Penguin
08/03/28 15:40:00 BcQjSrEl
>>807見て、misc_register調べてちょっと使ってみたんだけど、
これで作ったもんどうやって消すんだ?

関数自体は使い方分かったが、対になるもの無い?
misc_register込みのinsmod→rmmod→再度insmodでハングするんだが

814:login:Penguin
08/03/28 15:47:49 BcQjSrEl
書いた直後に自己解決しちまったorz

misc_deregisterがあるのね…
スレ汚しすまんかった

815:791
08/04/06 15:36:55 n9AD6VHb
ほ?

816:login:Penguin
08/04/10 21:40:14 zop984mC
mmapを利用して物理アドレス0x10000000に存在するデバイス(SRAM)のR/Wを
行うドライバを作成しようと思っています。
馬本の第3版のサンプルソース(simple)を参考にしながらremap_pfn_rangeで
マッピングし、ダンプをとってみたところ、0x10000000エリアのデータでは
なく、全て0のデータが読み取れました。
0x1000等の小さい物理アドレスであれば正常にリード出来ているようです。
0x10000000のように上の方のアドレスは、remap_pfn_rangeではマッピング
されないのでしょうか?

カーネルのバージョンは2.6.11です。


817:816
08/04/10 22:19:28 zop984mC
/dev/mem openして
memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
でも同じ結果でした・・・



818:816
08/04/10 22:20:55 zop984mC
訂正
>>817
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)


819:816
08/04/10 22:21:43 zop984mC
訂正
>>817
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
>memmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x10000000)
mmap((void*)0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0x1000)


820:login:Penguin
08/04/10 23:10:16 hws3UYgb
Linux 2.6.11 使ってないしためしてないけど、
/sys/devices/pci*/*/resource? を mmap(2) って出来ないんだっけ?

821:login:Penguin
08/04/11 00:58:30 pzz5pihD
とりあえず、落ち着けw
man mmap2

822:816
08/04/11 23:01:18 1s5/4DVK
>>821
>man mmap2
↓ですよね?
URLリンク(www.pinkdragon.net)
Linux 2.3.31 以降で使用可能とありますが、この環境では定義されていないと言われます。
組込み系だからなんでしょうか・・・

それと馬本第3版のP437 15.2.6 RAMのマッピングを変更する に
「ramap_pfn_rangeがRAMを扱えないことは・・・」ってくだりがあります。
実際いま起きている問題はこれなんでしょうか?
ioremap_nocacheでReadする方法とダンプ比較したところ,mmapだと
0x00000000~0x00800000 あたりまではちゃんとよめますが、
0x01000000になったとたん、0x00000000の値になってしまいます・・・
ioremap_nocacheでは0x01000000も見れるのに・・・

823:login:Penguin
08/04/12 04:09:25 CJCvWk/v
MTD使えばいいんじゃない?
phram.koとか
slram.koとか

824:login:Penguin
08/05/26 23:35:38 ZMUO6bXW
タスクレットの中でsleep_on_timeoutって呼べないんですか?
なぜかカーネルパニックになってしまいます…

825:login:Penguin
08/05/28 19:14:20 eAKKlqpI
タスクレットからkill_fasync()呼びたいんですけど、
第一引数ってどこから持ってくればいいんでしょうか?

826:login:Penguin
08/06/13 19:47:44 ngpRzev4
フリーオのデバイスドライバー書ける人が居たら神!

827:login:Penguin
08/06/13 22:56:58 yAy4CW2H
玄箱用のは、あるだろ

828:login:Penguin
08/07/05 05:09:39 +CtKxXwh
あげあげ

829:login:Penguin
08/07/05 08:11:05 d6Puhgue

スレリンク(linux板)

830:login:Penguin
08/07/05 11:49:23 D1363wxr
やっぱり情報公開されてない物のドライバ造るのって無理がある?
Willcomスマートフォン端末でLinuxを動かすプロジェクト?があるのですが、
WS003SH、WSはPrismチップの無線LANを使用。
WS011SHではSharp独自のチップを使用した物のようです。
WS020SHは不明。

当方WS011SHの物の開発に興味があるのですが、難しいどころか情報の公開がされていない限りは
手すら付けられない状態でしょうか?
アドバイスよろしくお願いします。

831:login:Penguin
08/07/27 04:17:46 JGvJfhtT
copy_{to,from}_user()でユーザプロセスのアドレスを与えるところにカーネル空間のアドレスを与えるとどうなります?
やっぱりaccess_ok()で弾かれる?


832:login:Penguin
08/07/27 08:01:26 Nq54nVAZ
>>831
その程度、自分で確認しろ。

833:login:Penguin
08/08/21 06:11:30 5vh0FBcx
あげ

834:login:Penguin
08/09/17 22:50:23 v0hV3n2N
Linuxデバドラ移植の質問です。
雑誌の記事でx86Linuxデバドラを他CPUのLinuxに移植する際に、デバドラのソースが
x86に依存してて移植できないことを知りました。
どうやらx86プログラマが他のCPUへの移植性を考えずに開発したことが原因みたいです。

雑誌によるとデバドラの依存箇所は以下が多いようです。
・バイトオーダ
・アライメント
・I/Oアクセス
・タイミング

皆様に質問ですが、このようなx86に依存したLinuxデバドラが落ちている場所を
ご存じないでしょうか?
また、根本的なことですがx86Linuxデバドラを移植したり、移植しようとしたが
x86に依存してて大変だったという案件は多いのでしょうか?

どうぞよろしくお願いいたします。













835:login:Penguin
08/09/17 23:58:51 3YmhTjsY
>>834
drivers/

直すのはそんなにめんどくないが、どこに地雷があるかわかりにくいのがのう。


836:login:Penguin
08/09/18 00:34:30 YTkXriLK
>>834
というか、デバイスドライバは基本的にハードに依存して当然
という側面も否定できないと言わざるを得ないこともあるので。

837:834
08/09/18 00:34:38 csSd+QEz
カーネルソース内にあるんですね!
知りませんでした;

私は初心者でよく知らないんですが、てっきりカーネルソール内のコードって
移植性をちゃんと考えてあって(arch/以外)、管理されていると思ってました。

むしろ、カーネルソース外の開発(企業or個人)で公開されているドライバに
あるのかと思ってました。

838:login:Penguin
08/09/18 10:25:28 tEXQNL4k
>>834
ふつー開発者の持ってるCPUでしかテストしないよ。

tg3とかe1000とかはNEC(ia64)とかIBM(powerpc)とかが
頑張って自分とこのハードで動くようにしてるけど、
個人でハックしてるものはたいていx86だけ。

839:login:Penguin
08/09/19 05:32:38 PmgUOzFO
まあ、過去の経験からすると
・USBターゲット - ほとんど手を入れる必要無し
・PCI - そんなに苦労することはない
・CPU直結 - 健闘を祈る
てところですかねえ。


840:login:Penguin
08/11/09 10:59:58 QBZrgAJi
age

841:login:Penguin
08/11/13 05:29:37 dS9nrsy0
USBデバイスでも無線LANとかは

842:login:Penguin
08/12/07 17:23:17 Ht7uJKzk
age

843:login:Penguin
08/12/19 14:08:43 MwDJWbRs
HWからの割込み処理中の、ローカルAPICへのEOI発行タイミングについて質問があります。
レベル・トリガの割込みだった場合は、end関数からEOIを発行しています。
これは、割込み処理の先頭で発行してしまうと、I/O APICへEOIが通知され、デバイスのアサートが
失われてしまうのが不都合だからでしょうか?
カーネルのverは2.6.18 です。



844:login:Penguin
08/12/20 08:40:05 9ZJbjYSC
>>843
一般的な話だけど
割り込みに関わるのは3つ。
①割り込み発生の条件と、割り込み要求するデバイス
②割り込みを調停する割り込みコントローラと、割り込み受付のカーネル
③実際の割り込み処理プログラム

①→②→③の流れは分かるよね
それなら質問の答えも分かるよねw


わんこ蕎麦に例えると
>>843のお椀の蓋が開いてる
>>843のお椀に蕎麦を放り込むおばちゃん
③蕎麦を食べる>>843

満腹になった>>843③が最初にすべきは、①の処理か②の処理か

845:login:Penguin
08/12/21 18:36:36 6RSqLOEI
>>844
「ご馳走様でした」と言いながら金を払わないで蓋も開けっ放しで逃げる。



846:login:Penguin
08/12/21 19:17:37 otIiAnj0
ダブルフォルト乙

847:login:Penguin
08/12/22 03:52:28 guo09gfy
(1)はおばさんのスピードに勝てないと判断して、(2)のおばさんに話し掛けるよな
もうお腹いっぱいって

848:login:Penguin
09/01/24 00:42:09 UJ+xFTUa
a

849:login:Penguin
09/02/17 22:55:17 m2mCukTw
ポートIOするサンプルを作ってみようと思ったのですが、
下のコードの時点で、すでにコンパイルが通りません。
sys_ioplを呼ぶのに、何が足りないのか分からないです。
どうしたら良いか、アドバイス頂けたら助かります。
よろしくお願いします。

debian 2.6.24 gcc 4.1.2

make -C /lib/modules/2.6.24/build M=/test module
error: implicit declartion of function 'sys_iopl'
---
#include <linux/init.h>
#include <linux/module.h>
#include <linux/io.h>
#include <linux/ioport.h>

static int __init
hello_init(void){
sys_iopl(3);
return;
}

static void __exit
hello_exit(void){
return;
}

module_init(hello_init);
module_exit(hello_exit);


850:login:Penguin
09/02/17 22:55:48 m2mCukTw
すみません、sageてしまいました。

851:login:Penguin
09/02/18 00:04:19 lQ8CDN9P
根本的に間違っているような気がするので、
もう少し具体的にやりたいことを書いた方がいいと思う。

取り合えずドライバでioplはいらねえ。


852:login:Penguin
09/02/18 01:04:31 WJ6360yx
>>851
もしかして、ドライバ内では、ポートにアクセスするのに、iopl自体が使えないということでしょうか?
そうすると、request_regionしていくしかないということですかね。
それとも、アクセス許可自体が必要ないのでしょうか。


元々、独自PCI-I/Fボードにアクセスするアプリがありまして、
それの、ドライバ版を作ろうと思いました。
そのアプリでは、iopl(3)→outb(),inb()にて値を取得していたので、同じ様に作っていたところでした。
PCIからのポートアドレス取得が上手くでき、そのアドレスにアクセスする段階だったのですが、
ioplでどうしてもコンパイルが通らず、includeの問題なのか、Makefileなのか、
途方に暮れてました。>>849はそのテストプログラムを抜き出しです。


853:login:Penguin
09/02/18 01:38:21 lQ8CDN9P
なんでドライバにする必要があるのかよくわからんが。
そういうレベルでわからんのであれば、まずは馬本で基礎知識を
身につけた方がいいと思う。

ついでに、sys_ioplの呼び方はそうじゃない。
つうかカーネルの中でsys_~は直接呼ぶもんじゃない。


854:login:Penguin
09/02/18 12:48:39 WJ6360yx
>>853
ありがとうございます。
ドライバ版の意図は、いずれ割り込みを使うつもりだったからです。
馬本は十分理解できなかったので、とりあえず作ってみるという感じでやってました。
sys_ioplは呼んではいけないんですね。
馬本、もう一度読んでみます。

855:login:Penguin
09/02/18 16:25:38 zpaCJvuo
馬本はカーネルの知識がある程度ある前提で書かれてるので
まずはLinuxカーネルに関する文献を読んでみることをおすすめするよ

デバイスドライバはカーネルの一部でもあることを忘れるな

856:login:Penguin
09/05/29 14:40:20 D/EXOrYt
Kernel 内で IN/OUT アセンブラ命令に相当するのは
何かマクロがあるんじゃなかったっけ?

READ_PORT とかそんなの。


857:login:Penguin
09/05/29 23:00:18 A6oE+oT8
in[bwl]
out[bwl]
とか。
include/asm/io.hに入ってたはず。


858:login:Penguin
09/07/04 14:39:23 D5yvn6Kc
シリアルドライバ内の情報で、何バイト受信済みとか、何バイト未送信という情報って
取得することは可能ですか?

859:858
09/07/04 16:35:43 D5yvn6Kc
補足です。
上記の情報をアプリケーションから取得できますか?

860:login:Penguin
09/07/05 02:17:52 vnzKXmwE
>>859
ioctlでTIOCINQとかTIOCOUTQみれば出来そう。
つーかマニュアル嫁よ。せっかくあるんだからよ。

861:login:Penguin
09/07/05 14:39:25 jkHVDhT6
ヌルイぞ。そこは

 つーかソース嫁よ。せっかるあるんだからよ。

だろ。ソース以上の資料なんかないんだからOSSってのは質問禁止なんだよ。

・・・ってえらいひとがいってました!

862:login:Penguin
09/07/05 23:11:19 vnzKXmwE
>>861
その偉い人は馬鹿だよ

863:login:Penguin
09/07/05 23:20:49 xNWd+cLB
どこでも、えらい人は馬鹿なもんさ。

864:login:Penguin
09/09/19 20:24:56 I29pddJ7
保守上げ

865:login:Penguin
09/10/12 16:24:20 cJbteqq9
>>861

× だろ。ソース以上の資料なんかないんだからOSSってのは質問禁止なんだよ。

○ だろ。ソース以外の資料なんかないんだからOSSってのは質問禁止なんだよ。

866:login:Penguin
09/12/03 22:11:10 s69LcKJk
i386BSDカーネルの386BSDカーネルソースコードの秘密
ソース以上の資料なんかないんだから、に対して何か書いてあったな。

867:login:Penguin
09/12/03 23:11:02 LYVup2we
>>866
ソースそのものと、ソースにこめられた趣旨は別じゃないかな?

868:login:Penguin
09/12/10 00:21:58 XvjOUXRH
UTSL だな。


869:login:Penguin
10/02/18 10:40:00 hWc/MwlX
linuxmintとウィンドウズ7RCを使っています。WIN7は試用なので来月から起動後一時間で自動で電源が落ちるようです。
リナックスに乗り換えるのは簡単なのですが、今使ってるテレビチューナーのドライバがリナックスには無いのです。
だれかmvp-rx3のドライバを書いてください。
このままではリナックスでテレビが見られず、リナックスをあきらめてウィンドウズのところにお嫁にイかされてしまいます。
テレビを見るためにはリナックスをお慕いもうしあげていますのにウィンドウズを買わなければならない境遇に
どうかどうか同情をしていただけるスーパーハッカーの方はドライバ書いてくださいませんか。
生きていくためには愛をもあきらめゲイツに身をゆだねなければならないのかと震えております。
ちなみにあたし女子中学生です。生娘です。似ている芸能人は17歳のころの広末涼子です。

870:login:Penguin
10/02/18 19:21:20 tk+7V5La
>>869
GV-MVP/RX3
URLリンク(www.iodata.jp)

mvp-rx3はアナログTVキャプチャーボードですね。
2011年7月にアナログテレビ放送が終了するので
どのみち地上デジタルテレビチューナーが必要になります。
Windows7を買う金でPT2を買ってLinuxで使う方がよいと思います。
PT2なら地デジでもコピーワンスによる不便から逃れられます。

日経Linux 2010年2月号
URLリンク(itpro.nikkeibp.co.jp)
> 特集2
> PT2で地デジ録画システムを作る
> パソコンで地上デジタル放送や衛星放送を受信できる
> デジタル・チューナ「PT2」を使ってシステムを作ります。
> 最新のLinuxディストリビューションのFedora 12とUbuntu 9.10で
> PT2のドライバをインストールし,高画質のテレビ番組を見てみましょう。
> 番組表から録画予約する方法も紹介します。

【視聴】Linuxでデジタル放送【録画】
スレリンク(linux板)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch