ディバイスドライバの改造、製作にまつわる情報交換、質問、
噂話、ぐち、政治、経済に関するスレです。できる限り生産的にいきましょーや。
ディバイスドライバをハックしよう!
■ このスレッドは過去ログ倉庫に格納されています
1login:Penguin
02/01/31 01:14ID:t3s191ys04/11/10 18:01:50ID:MrVsce1+
>>385
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。
最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
CPUキャッシュはユーザー空間から叩く手段がないので、
カーネルとハードウエア側の制御にお任せするしかないです。
最適化の方はvolatile付けておけば大丈夫でしょう。
なにもしないと最近のコンパイラは賢すぎてとんでもないことをやってくれますからな。
04/11/10 23:54:53ID:8UeNJl+2
>>385
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。
キャッシュは気にしてください。キャッシュがあると
. 書き込みがキャッシュが溢れるまでなされない。
. 読みだしも同様。
. 同一ラインにのる近隣のレジスタがいっしょにアクセスされちゃう
という、デバイスの制御にとっては致命的なことがいろいろ。
388382 385
04/11/11 00:27:04ID:95L6p31P すみません。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。
387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。
ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
キャッシュを気にししなくてもよいと書いたのは、
キャッシュが働かないので、気にしなくても良いという意味で
書いていました。
387さんのおっしゃるとおり、デバイスアクセスでキャッシュが
働いてしまうと、ひどい目にあいますね。
ところで、mmapのキャッシュ無効化ってmem.cの
noncached_address を修正すれば有効無効をユーザで
任意に操作可能になるんですかね?
ハードやBIOSでキャッシュ関係の細工が何かあったりしたらだめなのかもしれませんが。
04/11/12 00:12:24ID:nxDtrzpb
390login:Penguin
04/11/14 11:26:16ID:ZhMJfRu+ USBサブシステムを読んでいるんですが、
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。
またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?
デバイス、バス、ドライバの三つの関係のイメージを
教えてください。なんだかソース読んでいてもよく分かりません。
またxxx_probeという関数に渡ってくるstruct usb_interfaceとは
どこで確保されいてる構造体なんでしょうか?
391login:Penguin
04/11/21 11:06:40ID:RzBM8DsM technokitのUSB-IOをFedora Core 3に接続したら、/dev/hiddev0が勝手にできたので、
これに対しCでプログラムを作って、
fd = open("/dev/hiddev0", O_WRONLY);
して、
write(fd, command, 8);
した。commandは0x01FF00000000。けど全然反応が無い。
USB-IOのエンドポイント0には、0x01FFを送ったら、ポート0が反転するはずなんだけどなあ。
hid使わずに、ちゃんと専用ドライバ使わないとだめなの?
これに対しCでプログラムを作って、
fd = open("/dev/hiddev0", O_WRONLY);
して、
write(fd, command, 8);
した。commandは0x01FF00000000。けど全然反応が無い。
USB-IOのエンドポイント0には、0x01FFを送ったら、ポート0が反転するはずなんだけどなあ。
hid使わずに、ちゃんと専用ドライバ使わないとだめなの?
04/11/21 17:22:45ID:fkgrUhvM
デバイスドライバはカーネルメモリを消費するらしいのですが、
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
現在のカーネルメモリーの残量を知るにはどうしたらよいですか?
393391
04/11/21 17:37:11ID:RzBM8DsM >390 /usr/include/usb.h
04/12/12 18:20:03ID:fch5Qtg6
Linuxデバイスドライバの勉強を始めました。
がまずは、オライリーの本で解説してる、
サンプルコードから入ろうと思ったんですが、
asm/system.hをincludeしているコードは、
/usr/src/linux/include/asm/system.h: 関数 `__set_64bit_var' 内:
/usr/src/linux/include/asm/system.h:190: 警告:
dereferencing type-punned pointer will break strict-aliasing rules
と警告を出されてしまいます。
同じ現象に遭遇した香具師いませんか?
コンパイラはgcc3.3、kernel2.4.26。
ちなみに、警告された部分は、
#define ll_low(x) *(((unsigned int*)&(x))+0)
#define ll_high(x) *(((unsigned int*)&(x))+1)
static inline void __set_64bit_var (unsigned long long *ptr,
unsigned long long value)
{
__set_64bit(ptr,ll_low(value), ll_high(value)); //190行目
}
がまずは、オライリーの本で解説してる、
サンプルコードから入ろうと思ったんですが、
asm/system.hをincludeしているコードは、
/usr/src/linux/include/asm/system.h: 関数 `__set_64bit_var' 内:
/usr/src/linux/include/asm/system.h:190: 警告:
dereferencing type-punned pointer will break strict-aliasing rules
と警告を出されてしまいます。
同じ現象に遭遇した香具師いませんか?
コンパイラはgcc3.3、kernel2.4.26。
ちなみに、警告された部分は、
#define ll_low(x) *(((unsigned int*)&(x))+0)
#define ll_high(x) *(((unsigned int*)&(x))+1)
static inline void __set_64bit_var (unsigned long long *ptr,
unsigned long long value)
{
__set_64bit(ptr,ll_low(value), ll_high(value)); //190行目
}
395394
04/12/12 18:22:17ID:fch5Qtg6 あ、マシンは i686です。
04/12/14 01:02:15ID:bnBNd/cw
たしか-fno-strict-aliasingだったかな。それつけれ。
より詳細が知りたいときはググれ。
より詳細が知りたいときはググれ。
397394
04/12/14 02:47:39ID:iNH7gUWs398login:Penguin
04/12/14 11:29:27ID:HO3MDnt+ モジュールでmallocを使うと
implicit declaration of function `malloc'
なる警告が出ました。
正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。
何かヘッダをincludeすればいいのでしょうか。
implicit declaration of function `malloc'
なる警告が出ました。
正直、うまくいくとも思っていなかったのですが、ためしにやってみた感じです。
何かヘッダをincludeすればいいのでしょうか。
04/12/14 11:44:22ID:vlh4D4yl
>>398
kmalloc() or vmalloc()
kmalloc() or vmalloc()
04/12/14 11:54:53ID:HO3MDnt+
>>399
感謝.あとは調べます.
感謝.あとは調べます.
401login:Penguin
04/12/14 15:55:34ID:ScDxM3L+ 【序 論】
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。
統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。
日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。
一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、
後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。
もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。
宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。
そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、
北の現体制を維持するための、CIAの有難い配慮だったわけです。
なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。
麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。
今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。
尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。
http://mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。
統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。
日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。
一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、
後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。
もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。
宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。
そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、
北の現体制を維持するための、CIAの有難い配慮だったわけです。
なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。
麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。
今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。
尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。
http://mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100
04/12/14 17:02:39ID:WBCZfumK
国際金融資本と無関係な人はいません。ここが大事なところです。
国際金融資本とダーティーな勢力になんらかの関係があるというのなら、
全ての人間がダーティーな勢力と関係があるということです。
国際金融資本とダーティーな勢力になんらかの関係があるというのなら、
全ての人間がダーティーな勢力と関係があるということです。
403login:Penguin
04/12/16 00:42:54ID:HSUTNn3s <linux/errno.h>をincludeしているのに、errnoが宣言されていないとエラーが出ます。
なぜですか?
なぜですか?
404login:Penguin
04/12/16 00:52:12ID:fnG8qWZe #include <asm/errno.h>
04/12/16 03:08:53ID:L4JhEJTY
デバイスドライバーをイジルとハードが壊れます
05/01/13 20:25:56ID:5Qhjx5GH
jiffies の質問です。jiffies がオーバーフローする時の挙動を確かめ
たく、下記のようなモジュールを作成してロードしたのですが、モジュー
ルのロードに非常に時間がかかります。
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/delay.h>
MODULE_LICENSE("GPL");
int init_module(void)
{
jiffies = 4294961296UL;
return 0;
}
void cleanup_module(void)
{
return;
}
即座に jiffies 値を変更するためには、何か工夫が必要なのでしょう
か?
たく、下記のようなモジュールを作成してロードしたのですが、モジュー
ルのロードに非常に時間がかかります。
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/delay.h>
MODULE_LICENSE("GPL");
int init_module(void)
{
jiffies = 4294961296UL;
return 0;
}
void cleanup_module(void)
{
return;
}
即座に jiffies 値を変更するためには、何か工夫が必要なのでしょう
か?
05/01/13 21:59:07ID:b26g+4JK
05/01/13 22:21:10ID:5Qhjx5GH
やっぱりそれしか方法ないでしょうかね。カーネルコンパイルが億劫で
まだ試していませんでした。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 8640000; にすると、より多くの時間がかかるようです。仮
想マシン環境で実験しているのですが、その間、仮想マシンのプロセス
の CPU 使用率は高いままでした。
まだ試していませんでした。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 8640000; にすると、より多くの時間がかかるようです。仮
想マシン環境で実験しているのですが、その間、仮想マシンのプロセス
の CPU 使用率は高いままでした。
05/01/14 02:03:54ID:PSu0RjKD
ん? 何書いてたんだ、俺
>408 は、正しくは以下です。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 864000000; にすると、より多くの時間がかかるようです。
>408 は、正しくは以下です。
例えば、jiffies += 8640000; だとそれほど時間はかからないのですが、
jiffies += 864000000; にすると、より多くの時間がかかるようです。
410login:Penguin
05/02/06 11:19:02ID:+OMlHKxZ mmapによるデバイスアクセスについてご教授ください。
16bitアクセス限定のデバイスに対して、
mmapによるアクセスを試行しているのですが、
どうも挙動が怪しくて困っています。
アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、
そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか?
なにか考慮が不足してるのでしょうか。
16bitアクセス限定のデバイスに対して、
mmapによるアクセスを試行しているのですが、
どうも挙動が怪しくて困っています。
アプリ側からmmap(/dev/memをO_SYNCでopen)してshortアクセスをしても、
そのままshort幅でデバイスにアクセスが行くとは限らないのでしょうか?
なにか考慮が不足してるのでしょうか。
05/02/06 14:33:57ID:JfjjYGk4
412login:Penguin
05/02/10 21:10:10ID:oT40ukFS gcc 3.3.5(gentoo) で作成したモジュールを gcc 3.4.2(FC3) のPCへ
組み込もうとするとエラーで組み込めません。
どちらも kernel-2.6.10 です。
insmod: error inserting 'hoge.ko' : -1 Invalid module format
kernel config (General setup, Loadable module) は同じにしてあります。
同じバージョンの gcc で作成したシステムでないと無理なのでしょうか。
組み込もうとするとエラーで組み込めません。
どちらも kernel-2.6.10 です。
insmod: error inserting 'hoge.ko' : -1 Invalid module format
kernel config (General setup, Loadable module) は同じにしてあります。
同じバージョンの gcc で作成したシステムでないと無理なのでしょうか。
05/02/12 01:22:07ID:QcR6E3eX
>>410
>>411の言うとおりアーキテクチャが分からないのでなんともいえないけど・・・
/dev/memをmmapでshortアクセスしたら、普通はshortで触ってくれるでしょう。
でも、触ってるデバイスが * 例えば32bit PCI * にぶら下がってたりしたら
32bit で触りに行っちゃうこともありますよ。
っていうか、PCIの向こうにいるデバイスに届くまでに余計な16bitが増えてたりする。
それでも、読みにいくときには多分shortで行っても多分大丈夫。
書き込みをshortでやったりすると、残りの16bitにゴミが乗っかっちゃうとか、
そんなんじゃないでしょうか?
そうならば、shortで書きに行くときには、最初にデバイスから32bit分持ってきて、
それに16bit分上書きして、32bit書き戻すとかするしかないのでは。
(16bitアクセス限定でも、読みに行くときは16bit×2で32bit分をうまく返してくれることを
かってに期待して書いてますけど)
それから、32bitでアクセスするときにも触りに行くアドレスに注意が必要ですよ、多分。
32bitアラインメントじゃないとダメな予感がします。
もしそうならば、アラインメントの境界をまたいじゃうような16bitの書き込みをする場合、
両側の32×2 = 64bit分を持ってきて16bit書いて戻す、とかしないとダメですよね。
もちろんこれは、PCI上でうまく振舞うように作られていないデバイスの話で、
たとえ16bitアクセス限定デバイスでもそうならないようにつくることは可能だと思います。
ところどころ言ってるかもしれませんけどね・・・
>>411の言うとおりアーキテクチャが分からないのでなんともいえないけど・・・
/dev/memをmmapでshortアクセスしたら、普通はshortで触ってくれるでしょう。
でも、触ってるデバイスが * 例えば32bit PCI * にぶら下がってたりしたら
32bit で触りに行っちゃうこともありますよ。
っていうか、PCIの向こうにいるデバイスに届くまでに余計な16bitが増えてたりする。
それでも、読みにいくときには多分shortで行っても多分大丈夫。
書き込みをshortでやったりすると、残りの16bitにゴミが乗っかっちゃうとか、
そんなんじゃないでしょうか?
そうならば、shortで書きに行くときには、最初にデバイスから32bit分持ってきて、
それに16bit分上書きして、32bit書き戻すとかするしかないのでは。
(16bitアクセス限定でも、読みに行くときは16bit×2で32bit分をうまく返してくれることを
かってに期待して書いてますけど)
それから、32bitでアクセスするときにも触りに行くアドレスに注意が必要ですよ、多分。
32bitアラインメントじゃないとダメな予感がします。
もしそうならば、アラインメントの境界をまたいじゃうような16bitの書き込みをする場合、
両側の32×2 = 64bit分を持ってきて16bit書いて戻す、とかしないとダメですよね。
もちろんこれは、PCI上でうまく振舞うように作られていないデバイスの話で、
たとえ16bitアクセス限定デバイスでもそうならないようにつくることは可能だと思います。
ところどころ言ってるかもしれませんけどね・・・
414413
05/02/12 01:24:29ID:QcR6E3eX 早速、間違えてました(w
>ところどころ言ってるかもしれませんけどね・・・
ところどころ * うそ * 言ってるかもしれませんけどね・・・
>ところどころ言ってるかもしれませんけどね・・・
ところどころ * うそ * 言ってるかもしれませんけどね・・・
415410
05/02/16 00:46:02ID:E/KjMwKc いろいろ情報ありがとうございます。
もともとドライバ経由でアクセスしていたのですが、
パフォーマンス的な問題でmmapでを使用したかったという経緯があります。
ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。
ですので、単純にmmapでの処理の問題かと思っていました。
時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。
もともとドライバ経由でアクセスしていたのですが、
パフォーマンス的な問題でmmapでを使用したかったという経緯があります。
ですが、mmapだとどうもうまくいかなくて試行錯誤していた次第です。
ですので、単純にmmapでの処理の問題かと思っていました。
時間はあるので、勉強も兼ねてもうちょっと情報収集をしたいと思います。
416login:Penguin
05/02/16 22:28:50ID:mypLuczy05/02/20 21:06:04ID:0sjUjbHi
現在、デバイスドライバ作成(とりあえずキャラクタ型)の勉強しているのですが、
2.4.30-pre1上で作成したテストドライバでモジュールのロードは成功したと思われる
のですが(lsmodで存在を確認)、実際にドライバを使用する為に作成したテストツールから
呼び出す(ioctlを使用する箇所で)と失敗しました。
$ ls -l /dev/testdev
crw-rw-rw- 1 root root 60, 0 2月 20日 20:11 /dev/testdev
$ ./testtool
ioctl: Inappropriate ioctl for device <-- perrorで表示させてみたところ
2.4.30-pre1上で作成したテストドライバでモジュールのロードは成功したと思われる
のですが(lsmodで存在を確認)、実際にドライバを使用する為に作成したテストツールから
呼び出す(ioctlを使用する箇所で)と失敗しました。
$ ls -l /dev/testdev
crw-rw-rw- 1 root root 60, 0 2月 20日 20:11 /dev/testdev
$ ./testtool
ioctl: Inappropriate ioctl for device <-- perrorで表示させてみたところ
418417
05/02/20 21:09:12ID:0sjUjbHi つづき
そこで、さらに詳細に状況を確認するためにstraceを使用してみました。
$ strace ./testtool
execve("./testtool", ["./testtool"], [/* 52 vars */]) = 0
brk(0) = 0x8049a6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=62075, ...}) = 0
old_mmap(NULL, 62075, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40013000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0DU\1\000"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1333605, ...}) = 0
old_mmap(NULL, 1145796, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x40134000, 27588, PROT_NONE) = 0
old_mmap(0x40134000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x110000) = 0x40134000
old_mmap(0x40139000, 7108, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40139000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4013b000
munmap(0x40013000, 62075) = 0
open("/dev/testdev", O_RDWR) = 3
ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40013000
write(1, "errno = 25\n", 11errno = 25
) = 11
そこで、さらに詳細に状況を確認するためにstraceを使用してみました。
$ strace ./testtool
execve("./testtool", ["./testtool"], [/* 52 vars */]) = 0
brk(0) = 0x8049a6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=62075, ...}) = 0
old_mmap(NULL, 62075, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40013000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0DU\1\000"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1333605, ...}) = 0
old_mmap(NULL, 1145796, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x40134000, 27588, PROT_NONE) = 0
old_mmap(0x40134000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x110000) = 0x40134000
old_mmap(0x40139000, 7108, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40139000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4013b000
munmap(0x40013000, 62075) = 0
open("/dev/testdev", O_RDWR) = 3
ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40013000
write(1, "errno = 25\n", 11errno = 25
) = 11
419417
05/02/20 21:10:12ID:0sjUjbHi つづき
dup(2) = 4
fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR)
brk(0) = 0x8049a6c
brk(0x804aa6c) = 0x804aa6c
brk(0) = 0x804aa6c
brk(0x804b000) = 0x804b000
fstat64(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
_llseek(4, 0, 0xbfffef50, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(4, "ioctl: Inappropriate io"..., 47ioctl: Inappropriate ioctl for device
) = 38
close(4) = 0
munmap(0x40014000, 4096) = 0
close(3) = 0
munmap(0x40013000, 4096) = 0
exit_group(1) = ?
$
結果を見ていると実行したおぼえのない以下の行がありました。
ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)
この現象はどこにエラーがある場合におこり得ますか?
知ってる方お願いします。m(_ _)m
dup(2) = 4
fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR)
brk(0) = 0x8049a6c
brk(0x804aa6c) = 0x804aa6c
brk(0) = 0x804aa6c
brk(0x804b000) = 0x804b000
fstat64(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
_llseek(4, 0, 0xbfffef50, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(4, "ioctl: Inappropriate io"..., 47ioctl: Inappropriate ioctl for device
) = 38
close(4) = 0
munmap(0x40014000, 4096) = 0
close(3) = 0
munmap(0x40013000, 4096) = 0
exit_group(1) = ?
$
結果を見ていると実行したおぼえのない以下の行がありました。
ioctl(3, FIBMAP, 0xbffff1d8) = -1 ENOTTY (Inappropriate ioctl for device)
この現象はどこにエラーがある場合におこり得ますか?
知ってる方お願いします。m(_ _)m
05/02/20 21:38:19ID:uvzGFsyf
結果じゃなくてソースだそうよ
422417
05/02/20 22:06:08ID:0sjUjbHi #define MODULE
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/string.h>
static int devmajor=60;
static char *devname="testdev";
MODULE_PARM(devmajor, "i");
MODULE_PARM(devname, "s");
#include <asm/uaccess.h>
static int devtest_open(struct inode * inode, struct file * file){
MOD_INC_USE_COUNT;
return 0;
}
static int devtest_close(struct inode * inode, struct file * file){
MOD_DEC_USE_COUNT;
return 0;
}
static int devtest_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg){
int i;
printk("testdev: ioctl: cmd=%04X\n",cmd);
switch(cmd)
{
case 1: printk("Driver testing\n"); return 0;
}
return -EINVAL;
}
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/string.h>
static int devmajor=60;
static char *devname="testdev";
MODULE_PARM(devmajor, "i");
MODULE_PARM(devname, "s");
#include <asm/uaccess.h>
static int devtest_open(struct inode * inode, struct file * file){
MOD_INC_USE_COUNT;
return 0;
}
static int devtest_close(struct inode * inode, struct file * file){
MOD_DEC_USE_COUNT;
return 0;
}
static int devtest_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg){
int i;
printk("testdev: ioctl: cmd=%04X\n",cmd);
switch(cmd)
{
case 1: printk("Driver testing\n"); return 0;
}
return -EINVAL;
}
423417
05/02/20 22:07:26ID:0sjUjbHi つづき
static struct file_operations devtest_fops = {
ioctl: devtest_ioctl,
open: devtest_open,
release: devtest_close,
};
int init_module(void){
printk("install '%s' into major %d\n",devname,devmajor);
if(register_chrdev(devmajor,devname,&devtest_fops)){
printk("device registration error\n");
return -EBUSY;
}
return 0;
}
void cleanup_module(void){
printk("remove '%s' from major %d\n",devname,devmajor);
if (unregister_chrdev(devmajor,devname))
{
printk ("unregister_chrdev failed\n");
}
};
static struct file_operations devtest_fops = {
ioctl: devtest_ioctl,
open: devtest_open,
release: devtest_close,
};
int init_module(void){
printk("install '%s' into major %d\n",devname,devmajor);
if(register_chrdev(devmajor,devname,&devtest_fops)){
printk("device registration error\n");
return -EBUSY;
}
return 0;
}
void cleanup_module(void){
printk("remove '%s' from major %d\n",devname,devmajor);
if (unregister_chrdev(devmajor,devname))
{
printk ("unregister_chrdev failed\n");
}
};
424417
05/02/20 22:10:07ID:0sjUjbHi デバドラ呼び出し部
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
extern int errno;
int main(void){
int fd, ret;
fd=open("/dev/testdev",O_RDWR);
if(fd<0){
fprintf(stderr,"cannot open device\n");
return 1;
}
errno = 0;
ret = ioctl(fd,1);
if(ret == -1){
printf("errno = %d\n", errno);
perror("ioctl");
}
close(fd);
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
extern int errno;
int main(void){
int fd, ret;
fd=open("/dev/testdev",O_RDWR);
if(fd<0){
fprintf(stderr,"cannot open device\n");
return 1;
}
errno = 0;
ret = ioctl(fd,1);
if(ret == -1){
printf("errno = %d\n", errno);
perror("ioctl");
}
close(fd);
return 0;
}
425417
05/02/20 22:11:43ID:0sjUjbHi 以上で全部です。
05/02/20 23:44:25ID:Ia/OzVXx
05/02/21 00:25:27ID:PN7I+gvx
>>427
# uname -r
2.6.10-gentoo-r6
/var/log/messages より
Feb 20 23:41:06 XXXXX testdev: ioctl: cmd=0001
Feb 20 23:41:06 XXXXX Driver testing
変更点は /dev/wrkdev にしただけ。
# uname -r
2.6.10-gentoo-r6
/var/log/messages より
Feb 20 23:41:06 XXXXX testdev: ioctl: cmd=0001
Feb 20 23:41:06 XXXXX Driver testing
変更点は /dev/wrkdev にしただけ。
429417
05/02/21 00:37:25ID:bwxnTums05/03/06 13:19:22ID:PjCVkwmZ
何気に良スレ
みんな頑張れ
お気に入りに追加しますた。
みんな頑張れ
お気に入りに追加しますた。
2005/03/29(火) 16:05:44ID:lbUCJwgD
ドライバのread、write関数でminor番号取得する方法ってないんですか?
2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、
片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。
まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。
2.6用に、LIRCの仮想ドライバで、デバイスファイル2つ作って、
片方にキーコード書き込んだらLIRCに送られるやつ書いてるんだけど。
まあ、LIRC側はIOCTLとreadだけだし、キーコード送るほうはwriteだけだから今のとこ何とかなってるんだけど、気持ち悪いし。
2005/03/29(火) 23:34:47ID:ChOvrjsk
private_data を使う、かな?
2005/03/30(水) 11:17:39ID:tWHa73x6
>>432
サンクス!
open時に file->private_data にポインタ突っ込んでおくってことですね。
取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。
修行が足りぬ…orz
サンクス!
open時に file->private_data にポインタ突っ込んでおくってことですね。
取得することばかり調べてて、あらかじめ持たせておくことを考えてませんでした。
修行が足りぬ…orz
2005/04/16(土) 06:28:18ID:R/hasO1P
usb-hid についての質問です.
usb 接続の joypad を,hid-input 経由ではなく,
(drivers/usb/usb-skeleton.c のような) usb のデバイスドライバで処理したいと考えています.
問題は,joypad の挿入時に hid-core の probe 関数が呼ばれてしまい,
自作 usb デバイスドライバの probe 関数が呼ばれないことです.
上記の解決策はあるのでしょうか.
自作 usb デバイスドライバ内では, joybad のベンダーID,プロダクトIDを
usb_device_id 構造体に設定しています.
kernel は 2.6.10 です.
よろしくお願いします.
usb 接続の joypad を,hid-input 経由ではなく,
(drivers/usb/usb-skeleton.c のような) usb のデバイスドライバで処理したいと考えています.
問題は,joypad の挿入時に hid-core の probe 関数が呼ばれてしまい,
自作 usb デバイスドライバの probe 関数が呼ばれないことです.
上記の解決策はあるのでしょうか.
自作 usb デバイスドライバ内では, joybad のベンダーID,プロダクトIDを
usb_device_id 構造体に設定しています.
kernel は 2.6.10 です.
よろしくお願いします.
435434
2005/04/16(土) 08:17:16ID:R/hasO1P 自己レスです.
解決法を見付けたので,書き込みます.
drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に,
joypad のベンダIDとプロダクトIDを加えることで,解決しそうです.
スレ汚し失礼しました.
解決法を見付けたので,書き込みます.
drivers/usb/input/hid-core.c 内の,hid_blacklist 構造体に,
joypad のベンダIDとプロダクトIDを加えることで,解決しそうです.
スレ汚し失礼しました.
2005/05/17(火) 18:53:06ID:CbytfkQn
2.6 kernel(2.6.11.x)上でデバドラ書く場合、
MOD_INC_USE_COUNT
MOD_DEC_USE_COUNT
を使用する事ってobsolete?
MOD_INC_USE_COUNT
MOD_DEC_USE_COUNT
を使用する事ってobsolete?
437login:Penguin
2005/05/18(水) 01:07:17ID:2baf1QgQ >>436
れがし
れがし
2005/05/19(木) 23:52:14ID:m1yq1rQI
カーネル2.6.8(turbolinux10Server)でデバイスドライバを開発しています。
ドライバAでエクスポートしたシンボルをドライバBでコールしたいのですが、
ドライバBのinsmod時に"Unknown symbol"エラーが出てしまいます。
そこで、単純なソースで確認してみたのですが、同様の状態でした。
同様のソースをカーネル2.4.18(turbolinux8Server)でコンパイルしてinsmod
したところ上手く動作したのですが、カーネル2.6では何か手続きが必要
なのでしょうか?
確認したソースは以下の通りです
==ドライバA==
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
int __init test_init_module (void)
{
printk("test : init_module\n");
s_print();
return 0;
}
void __exit test_cleanup_module (void)
{
printk("test : cleanup_module\n");
return 0;
}
void s_print(void)
{
printk("Hello, World!\n");
}
module_init(test_init_module)
module_exit(test_cleanup_module)
ドライバAでエクスポートしたシンボルをドライバBでコールしたいのですが、
ドライバBのinsmod時に"Unknown symbol"エラーが出てしまいます。
そこで、単純なソースで確認してみたのですが、同様の状態でした。
同様のソースをカーネル2.4.18(turbolinux8Server)でコンパイルしてinsmod
したところ上手く動作したのですが、カーネル2.6では何か手続きが必要
なのでしょうか?
確認したソースは以下の通りです
==ドライバA==
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
int __init test_init_module (void)
{
printk("test : init_module\n");
s_print();
return 0;
}
void __exit test_cleanup_module (void)
{
printk("test : cleanup_module\n");
return 0;
}
void s_print(void)
{
printk("Hello, World!\n");
}
module_init(test_init_module)
module_exit(test_cleanup_module)
439login:Penguin
2005/05/19(木) 23:52:48ID:m1yq1rQI ==ドライバB==
#include <linux/module.h>
#include <linux/kernel.h>
extern void s_print();
int __init test2_init_module (void)
{
printk("test2 : init_module\n");
s_print();
return 0;
}
void __exit test2_cleanup_module (void)
{
printk("test2 : cleanup_module\n");
return 0;
}
module_init(test2_init_module)
module_exit(test2_cleanup_module)
#include <linux/module.h>
#include <linux/kernel.h>
extern void s_print();
int __init test2_init_module (void)
{
printk("test2 : init_module\n");
s_print();
return 0;
}
void __exit test2_cleanup_module (void)
{
printk("test2 : cleanup_module\n");
return 0;
}
module_init(test2_init_module)
module_exit(test2_cleanup_module)
440login:Penguin
2005/05/19(木) 23:57:30ID:m1yq1rQI ==コンパイル手順==
cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__ -DMODULE -DKBUILD_MODNAME=test initial.c
/usr/src/linux/scripts/mod/modpost initial.o
cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__-DMODULE -DKBUILD_MODNAME=test -c -o initial.mod.o initial.mod.c
ld -r -o test.ko initial.o initial.mod.o
==動作確認==
# insmod test.ko
// シンボルのエクスポートを確認
# cat /proc/kallsyms | grep s_print
f8xxxxxx T s_print [test]
# insmod test2.ko
test2 : Unknown symbol in module 's_print'
となります。実機が側にないので出力メッセージは大体こんな感じということで。
よろしくお願いします。
cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__ -DMODULE -DKBUILD_MODNAME=test initial.c
/usr/src/linux/scripts/mod/modpost initial.o
cc -c -w -O -I/usr/src/linux/include -I/usr/include -D__KERNEL__-DMODULE -DKBUILD_MODNAME=test -c -o initial.mod.o initial.mod.c
ld -r -o test.ko initial.o initial.mod.o
==動作確認==
# insmod test.ko
// シンボルのエクスポートを確認
# cat /proc/kallsyms | grep s_print
f8xxxxxx T s_print [test]
# insmod test2.ko
test2 : Unknown symbol in module 's_print'
となります。実機が側にないので出力メッセージは大体こんな感じということで。
よろしくお願いします。
2005/05/20(金) 03:04:35ID:Ds9MyJAI
442login:Penguin
2005/05/20(金) 08:58:08ID:zG+tsX8i >>441
烈婦ワロタ
レスありがとうございます。
s_printでgrepしてみたのですが、同名のシンボルは無いようでした。
念のため、ドライバAに
EXPORT_SYMBOL(s_print);
を追加しても'Unknown symbol'になってしまいます。
ドライバ間の依存関係をどこかで明示する必要があるのでしょうか?
烈婦ワロタ
レスありがとうございます。
s_printでgrepしてみたのですが、同名のシンボルは無いようでした。
念のため、ドライバAに
EXPORT_SYMBOL(s_print);
を追加しても'Unknown symbol'になってしまいます。
ドライバ間の依存関係をどこかで明示する必要があるのでしょうか?
2005/06/07(火) 10:17:39ID:6uaL4exB
普通はそんなことはできないんじゃない?
誰かができると言ったのかな?
デバイスファイル開いてioctlをコールが普通じゃねぇの?
誰かができると言ったのかな?
デバイスファイル開いてioctlをコールが普通じゃねぇの?
2005/06/17(金) 18:54:11ID:9kSGojSd
http://www.oreilly.com/catalog/linuxdrive3/book/index.csp
Linux Device Drivers, Third Edition
Linux Device Drivers, Third Edition
2005/06/18(土) 19:13:08ID:Uc6V46BE
2005/06/19(日) 15:13:18ID:f3bsYXGy
the role of a device driver is providing mechanism, not policy.
これが、policy-free
これが、policy-free
2005/06/19(日) 15:19:24ID:f3bsYXGy
ここでのfreeはduty freeのfreeと同じ使われ方。
policyがないdriver
policyがないdriver
448login:Penguin
2005/06/29(水) 18:33:32ID:hcN+gVRw カーネル2.4.28を使用して、EZ USB FX2のドライバを作成しています。
USBを4つさし、ここに、デバイスドライバを作成します。デバイスドライバは、
カーネルにあるusb-skelton.cを使って作成しました。3つまでさして、制御した場合、
動作したのですが、4つさし、アプリを動かずとドライバが死にます。
4つとも、ここにドライバを作成し、メジャー番号180 で、それぞれ、
マイナー番号を100 120 140 160としました。
open / closeのみを行うプログラムを作成し、何回か行いました。
何回かおこなうと、ドライバが死にます。
ドライバソースを追っていったのですが、open時に
dev = minor_table[minor]
という行でdevが0になっていました。
minor_tableは、probe関数で取得しているのですが、なぜNULLになったのか
なぞです。どなたかわかる方いらっしゃいますか?
USBを4つさし、ここに、デバイスドライバを作成します。デバイスドライバは、
カーネルにあるusb-skelton.cを使って作成しました。3つまでさして、制御した場合、
動作したのですが、4つさし、アプリを動かずとドライバが死にます。
4つとも、ここにドライバを作成し、メジャー番号180 で、それぞれ、
マイナー番号を100 120 140 160としました。
open / closeのみを行うプログラムを作成し、何回か行いました。
何回かおこなうと、ドライバが死にます。
ドライバソースを追っていったのですが、open時に
dev = minor_table[minor]
という行でdevが0になっていました。
minor_tableは、probe関数で取得しているのですが、なぜNULLになったのか
なぞです。どなたかわかる方いらっしゃいますか?
449login:Penguin
2005/06/29(水) 18:42:20ID:Cc/icRgl Linux のドライバのプログラミングの
良い入門書があったらおしえてください
良い入門書があったらおしえてください
2005/06/29(水) 22:17:33ID:OM3Tds/i
>>448
Kernel2.4.27のソースしか見てないので違ったら失礼。
>マイナー番号を100 120 140 160としました。
これがよくわからん。デフォでは192から16個を順番に割り当てるようになってるが、それをわざわざいじったってことか?
そうなると、スケルトンをあちこち変更してあるのだろうから、さすがにソース無いとなんも判らん。
Kernel2.4.27のソースしか見てないので違ったら失礼。
>マイナー番号を100 120 140 160としました。
これがよくわからん。デフォでは192から16個を順番に割り当てるようになってるが、それをわざわざいじったってことか?
そうなると、スケルトンをあちこち変更してあるのだろうから、さすがにソース無いとなんも判らん。
451login:Penguin
2005/06/29(水) 22:32:06ID:rSbPN/4/2005/06/30(木) 09:52:01ID:6k+4MtMc
12冊=たくさん
納得した
納得した
2005/06/30(木) 11:24:58ID:9CZUZn2O
なぜ12冊なのかちっとも納得いかないんだが
2005/06/30(木) 11:25:42ID:J4A9ru3W
たくさんだからだろう
455Artane. ◆o6gE1yuDGM
2005/07/04(月) 07:22:47ID:Y9u/GUb1 2.6.13で又モジュール周りのAPIが変わりそうな悪寒…
drivers/base/class_simple.cがまるごとなくなってる…そこのAPIを使ってる ttp://www.linuxant.com/ のx86_64用のHSFモデムドライバがそのままでは動かない状況に(;´Д`)
その前はACPI絡みでデッドロックがかーねるにあって動かなかったし、どうなってるんだろうヽ(`ー´)ノ
しかもライセンスがプロプラなのでどーすりゃいいのか頭が痛いです。
drivers/base/class_simple.cがまるごとなくなってる…そこのAPIを使ってる ttp://www.linuxant.com/ のx86_64用のHSFモデムドライバがそのままでは動かない状況に(;´Д`)
その前はACPI絡みでデッドロックがかーねるにあって動かなかったし、どうなってるんだろうヽ(`ー´)ノ
しかもライセンスがプロプラなのでどーすりゃいいのか頭が痛いです。
2005/07/07(木) 22:10:08ID:DftqFJii
2.4はcc -o hoge.o -c hoge.cするだけでokだったけど
2.6はmakeファイルを書かないとダメになった。
はぁ、マンドクセ
2.6はmakeファイルを書かないとダメになった。
はぁ、マンドクセ
2005/07/07(木) 22:51:04ID:Hy9t4ICF
ttp://japan.linux.com/kernel/03/10/26/1026229.shtml
ここの一番下に書いてあるのなら楽だろ。簡単に再利用できるし。
ここの一番下に書いてあるのなら楽だろ。簡単に再利用できるし。
2005/07/08(金) 11:00:44ID:9KK2lDyF
obj-m := unko.o
の1行でよくね?
の1行でよくね?
459login:Penguin
2005/07/24(日) 15:33:14ID:02p0TYUx USBのドライバ書いたことアルヤツいる?
2005/07/28(木) 21:47:52ID:3ylo+PR7
2005/07/31(日) 16:37:19ID:0Amwd3lA
カーネル2.6.xのSMPの wait_event_interruptible でしつもんです。
起こされる要因をビットであらわすようにして
起こされたあとに flag &= ~FLAG; として
起床要因をクリアしたいです。そこで、
wait_event_interruptible(wq, !(flag & FLAG) );
tmpflag = flag; // ◆1
// ★
flag &= ~FLAG; // ◆2
if( tmpflag & ・・・
としていたのですが、割込が運悪く★のところに来たときに
次回起床要因flagを割込ルーチンで設定された直後にクリアしてしまいます。
◆1と◆2をアトミックに処理するのに割禁使うのも大げさな気がします。
どうしたらよいでしょうか? (><)教えて!
起こされる要因をビットであらわすようにして
起こされたあとに flag &= ~FLAG; として
起床要因をクリアしたいです。そこで、
wait_event_interruptible(wq, !(flag & FLAG) );
tmpflag = flag; // ◆1
// ★
flag &= ~FLAG; // ◆2
if( tmpflag & ・・・
としていたのですが、割込が運悪く★のところに来たときに
次回起床要因flagを割込ルーチンで設定された直後にクリアしてしまいます。
◆1と◆2をアトミックに処理するのに割禁使うのも大げさな気がします。
どうしたらよいでしょうか? (><)教えて!
462login:Penguin
2005/08/18(木) 13:31:44ID:wsNIgIg1 ご存知の方がいたら教えて頂けないでしょうか?
printk の動作に関してなのですが、たとえば、ドライバの登録の際に
int init_module (void) /* Loads a module in the kernel */
{
printk("Hello kernel \n");
return 0;
}
などと printk を使い、(X-Window は起動しないで)コンソールで
# insmod filename.o
を実行すると Hello kernel とコンソールに表示されるはずなのですが、
表示される場合と表示されない場合があります。実際には、
ほとんどの場合は表示されず、表示されるのは数十回に1回程度です。
そもそも 「printk はコンソールに *必ず* 出力するわけではない」
のでしょうか?どうなのでしょう?
printk の動作に関してなのですが、たとえば、ドライバの登録の際に
int init_module (void) /* Loads a module in the kernel */
{
printk("Hello kernel \n");
return 0;
}
などと printk を使い、(X-Window は起動しないで)コンソールで
# insmod filename.o
を実行すると Hello kernel とコンソールに表示されるはずなのですが、
表示される場合と表示されない場合があります。実際には、
ほとんどの場合は表示されず、表示されるのは数十回に1回程度です。
そもそも 「printk はコンソールに *必ず* 出力するわけではない」
のでしょうか?どうなのでしょう?
2005/08/18(木) 14:45:51ID:AA5MGziJ
>>462
ほんとうに\nを入れたのか
ほんとうに\nを入れたのか
464login:Penguin
2005/08/18(木) 14:47:24ID:zqtjM++q465login:Penguin
2005/08/18(木) 14:54:07ID:zqtjM++q X-Window は起動せずにって書いてあったな。 すまそ。
printk() は中で register_console() されたドライバの ->write() を
直接呼んでるから必ず出力されるよ。
出ないとするとログレベルの設定かな。
頭に "<1>" とかつけるといいのでは?
printk() は中で register_console() されたドライバの ->write() を
直接呼んでるから必ず出力されるよ。
出ないとするとログレベルの設定かな。
頭に "<1>" とかつけるといいのでは?
466462
2005/08/18(木) 18:10:38ID:wsNIgIg12005/08/18(木) 18:35:47ID:spRqn48O
flushされていない or
同じメッセージなので纏められているのでは?(この場合、last message repeated xxx times とでる。)
同じメッセージなので纏められているのでは?(この場合、last message repeated xxx times とでる。)
2005/08/18(木) 20:41:10ID:cWStGfHc
469462
2005/08/19(金) 09:09:08ID:qyuoI/lN >>467, 468
/var/log/message には出てます。
改行もしてるんだけどなぁ。
どうもよくわからないので、あきらめることにしました。(^^;
お忙しいところ、レスありがとうございました!
/var/log/message には出てます。
改行もしてるんだけどなぁ。
どうもよくわからないので、あきらめることにしました。(^^;
お忙しいところ、レスありがとうございました!
470login:Penguin
2005/08/19(金) 22:08:36ID:ZOCJz/g6 /etc/syslog.conf に
kern.* /dev/console
とか書いてあるか?
kern.* /dev/console
とか書いてあるか?
471462
2005/08/22(月) 13:16:52ID:nvUzxFpI >>470
を! /etc/syslog.conf の kern.* /dev/console が
コメントアウトされています!
なるほど、これを有効にすると確実に表示されそう
ですねぇ。
今、ハードが客先に行ってしまったので
確認できないんですけど、ハードが戻ってきたら
試してみます。
ありがとうございます!
を! /etc/syslog.conf の kern.* /dev/console が
コメントアウトされています!
なるほど、これを有効にすると確実に表示されそう
ですねぇ。
今、ハードが客先に行ってしまったので
確認できないんですけど、ハードが戻ってきたら
試してみます。
ありがとうございます!
472login:Penguin
2005/10/22(土) 01:07:43ID:EmofMJka やべえ、カッコイイ......デバイスドライバ自分で書いてる人たち......。
Cは一通り入門程度のことは覚えたけど、遊びでstdio.h使うことばっかりで入門の領域出てないんですよね、僕。
Linuxにも入って間もないからシェルスクリプトの使い方もまともに知らないからLinuxプログラミングなんてまだまだ....。
お馬さんの本、大学の図書館にありましたねー、ぱらっと見たけどさっぱり......。
Cは一通り入門程度のことは覚えたけど、遊びでstdio.h使うことばっかりで入門の領域出てないんですよね、僕。
Linuxにも入って間もないからシェルスクリプトの使い方もまともに知らないからLinuxプログラミングなんてまだまだ....。
お馬さんの本、大学の図書館にありましたねー、ぱらっと見たけどさっぱり......。
2005/10/22(土) 17:23:49ID:0rh+z8HN
デバドラ本第3版の和訳もう出てるのね。
洋書を見つけてレジに持っていこうとするも、ふと横を見ると書棚にありました
洋書を見つけてレジに持っていこうとするも、ふと横を見ると書棚にありました
2005/10/23(日) 03:10:35ID:JQc1kDtY
2005/10/23(日) 06:34:02ID:TRsS2wCF
SMPな環境で、あるAという区間とBという区間があるとき
そこを走行するCPUをひとつだけにして、
かつAとBを同時に走らないようにしたい。
最速で処理できる区間ではspin_lock_irqsaveを使ってもいいけど
ちょっと時間を食いたい処理のときには割り禁にしたくない/出来bネい。
こb、いうときってャZマフォを使うbセっけ?
あと、誰かがそこを走行してたら、待たずにあきらめる処理も
どうやるのかいまいちわからんです。
そこを走行するCPUをひとつだけにして、
かつAとBを同時に走らないようにしたい。
最速で処理できる区間ではspin_lock_irqsaveを使ってもいいけど
ちょっと時間を食いたい処理のときには割り禁にしたくない/出来bネい。
こb、いうときってャZマフォを使うbセっけ?
あと、誰かがそこを走行してたら、待たずにあきらめる処理も
どうやるのかいまいちわからんです。
2005/10/23(日) 07:17:36ID:TyUzTsLn
っ[MUTEX]
2005/10/24(月) 11:41:52ID:y/bnKz7N
futex
478login:Penguin
2005/10/24(月) 21:00:03ID:qab5z916 insmod hello.o
が出来ません....
bash: insmod: command not found
と出てしょっぱなから弾かれました....。
FC4を入れているのですが、ぐぐったところKernelのバージョンが
上ってからサポートされなくなった(?)のようなことがかいてありましたが...
ちょっとわからないです..。
が出来ません....
bash: insmod: command not found
と出てしょっぱなから弾かれました....。
FC4を入れているのですが、ぐぐったところKernelのバージョンが
上ってからサポートされなくなった(?)のようなことがかいてありましたが...
ちょっとわからないです..。
2005/10/24(月) 21:41:23ID:nHBdU4lq
2005/10/25(火) 01:26:16ID:boXSHzJM
っ[/sbin/insmod]
2005/10/25(火) 01:50:35ID:mHOxbI49
$ su -
passwd:
#
passwd:
#
2005/10/25(火) 07:29:46ID:gtGeQ0F/
モジュールに挑戦する前にやるべきことがあるだろう。
2005/10/27(木) 22:32:36ID:5z/EqZNh
みなさん、返事が遅れてすみません....。
何日ものぞいていませんでした。
どうやら、おっしゃる通りパスが通っていないようでして、
あれから、/sbin/insmod [filename]
を試してみましたがなんだか、だめだ!のようなメッセージが表示されて
しまい、無理でした。Linuxのデバイスドライバのプログラミングは
BIOSレベルでのデバイスドライバを書くときの参考にもなるかと
思ったのですが、やっぱりLinuxを初めてあまりたっていないのに
背伸びをしすぎたようです。出直してきます。
御回答いただいた方々、ほんとうにありがとうございました。:-)
何日ものぞいていませんでした。
どうやら、おっしゃる通りパスが通っていないようでして、
あれから、/sbin/insmod [filename]
を試してみましたがなんだか、だめだ!のようなメッセージが表示されて
しまい、無理でした。Linuxのデバイスドライバのプログラミングは
BIOSレベルでのデバイスドライバを書くときの参考にもなるかと
思ったのですが、やっぱりLinuxを初めてあまりたっていないのに
背伸びをしすぎたようです。出直してきます。
御回答いただいた方々、ほんとうにありがとうございました。:-)
2005/10/28(金) 05:51:31ID:gqZeSigl
│
│
J
∩_∩ ∩_∩
( ・(ェ)・) (・(ェ)・ )
エサクマか? 違うクマよ、
あわてて食いつくと面倒なことになるクマ。
│
J
∩_∩ ∩_∩
( ・(ェ)・) (・(ェ)・ )
エサクマか? 違うクマよ、
あわてて食いつくと面倒なことになるクマ。
2005/10/28(金) 08:53:26ID:iWNW3bFs
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】広島東洋カープの矢野雅哉・前川誠太選手を書類送検 ゾンビたばこを巡る容疑 広島県警 [Ailuropoda melanoleuca★]
- 第2次大戦に触れトランプ氏「米中は同盟国」、当時は中華民国…「抗日」巡る中国の言説補強する恐れ ★7 [蚤の市★]
- 「暗い未来に子供を産みたくない…」それでも左派よりも右派の方が「たくさん子供を産む」のはなぜか【米研究】 [首都圏の虎★]
- 若い農家の意欲奪わないで ジャガイモ輸入解禁「反対」、首相官邸前で訴え (JA新聞) [少考さん★]
- 「習氏より先に言うとは…」 トランプ氏同盟国発言、日本政府内に困惑 [蚤の市★]
- 【野球】セ・リーグ DB 2-1 T [9/25] DeNA3連勝 宮﨑11号逆転2ランホームラン 阪神連勝ストップ石井被弾 [鉄チーズ烏★]
- 【高市悲報】ベッセント、オンライン会談で円の過小評価を再確認、片山にくぎを刺す [733893279]
- 【実況】えちえちアソビ★まわり隊!初コラボ配信 ★2
- ガールズ&パンツァー第9話「絶対絶命です!」実況スレ🏡21時スタート
- 女性「たのしいピクニック女を擁護するってことは、常に俺の前ではニコニコしてろ、俺はコストを払わないって言ってるんだが?」 [592058334]
- おまえらって孤独に強いよな、なんかコツあるのか?ふつうは壊れるだろ [683838391]
- 東京都に住むメリットってなによ? [841411289]