トップページ⇒linux
986コメント359KB

☆Linux カーネルの仕組みを勉強するスレ☆

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001login:Penguin01/10/02 17:44ID:38KkZsUQ
メモリ管理、プロセス、ファイルシステム色々ありますが
カーネル全般について語り合うスレッドです。
0931login:Penguin04/09/06 16:37ID:zvPrxyTS
初心者はここから勉強しましょう。
ム板より転載。
http://program2ch.jugem.cc/
0932login:Penguin04/09/28 13:20:48ID:j6tq7+L5
linux programmingスレが無かったのでここで聞いてみる。
2.2用のカーネルモジュール(driver)がありまして、2.4で使いたいのですけ
ど、カーネルに変更が加わった為かソースはそのままではmakeが通らないです。
一般的な話でいいのですが、kernel2.2から2.4などバージョンを上げる時
moduleのソースはどの辺りに修正加えてますか?

0933login:Penguin04/10/12 13:21:06ID:8oNaJMZy
>>932
オライリーの「LINUXデバイスドライバ」ぐらい持っとけ。
0934login:Penguin04/12/22 21:16:51ID:pSCYM4cf
>>932
2.2と2.4の同じデバイスのドライバ見比べてみたらどうでしょうか。

あと、「LINUXデバイスドライバ」って英語版はWeb上で読めましたっけ。
0935login:Penguin04/12/23 07:06:29ID:S0CjoABJ
x86カーネルだと、1GByteのメモリを使うのですら、
HIGHMEMが必要なわけですが、
HIGHMEMを使うにあたって、ペナルティ等はありますか?

2.6になって改善されたというような記事は見つかったのですが、
具体的な問題については見つかりませんでした。
0936login:Penguin04/12/30 10:00:07ID:4MuG0KSs
guluの皆様、ご教示ください。

モジュールでシステムコールを追加する方法というのはありますが、
(hoge.oをロードしてる間だけhoge()と言うシステムコールが使える)
既存のシステムコールを上書きすることはできるのでしょうか。
(hoge.oをロードしている間だけカスタマイズしたopen()、close()が使えるような)

カーネルがROなROMに焼かれているシステムですので、カーネルに直接
手を入れることができず上記のような発想で対応したいと考えています。
0937login:Penguin04/12/30 10:00:44ID:4MuG0KSs
>>936
なお、対象のカーネルは2.4.17です。
0938login:Penguin04/12/30 10:09:32ID:4MuG0KSs
自己レスとか言う奴です。
ここにそのものズバリがありました。
ご参考に。

http://www.csg.is.titech.ac.jp/~kourai/memo/linux_kernel.html
0939login:Penguin05/01/29 14:37:42ID:gZ/pqgzp
おしえろ

# define __acquire(x)__context__(1)

__context__(1)ってのはどういう意味?

教えてくれた人には俺の妹をもれなくプレゼント!
0940login:Penguin05/02/01 14:08:57ID:lTL5Ae25
>>939
コンテキストスイッチ。

って何だったっけ?

ああ、不完全だからおぱーいとマソこだけでいいよ。
0941login:Penguin05/02/01 15:58:58ID:Azn3cU4M
>>940
とりあえずレスに感謝。あんた最高だよ、ただコンテキストスイッチじゃないんだよな。
不正解だから>>940には、俺の使用済みティッシュ(3年分)をもれなくプレゼント!

__context__(1)ってのはどうもgcc拡張っぽい気がするんだ。
0942login:Penguin05/02/03 11:47:43ID:vTRZ9nM+
このスレ最高
0943login:Penguin05/02/03 12:58:08ID:8pVcdBBv
linux2.6 の include/asm-generic/percpu.h の per_cpu() がどういうものなのか
理解できずに苦しんでます。どうかご教授ください。
0944login:Penguin05/02/20 01:52:12ID:HsEiZt6D
ぱっと見だけど、
DEFINE_PER_CPUで定義したCPU毎の変数を取り出すマクロじゃないの?

ttp://lwn.net/Articles/22911/
0945login:Penguin05/02/20 01:59:27ID:HsEiZt6D
うぉ!2週間前か…。
094694305/02/23 08:44:24ID:L5tOcRY0
>>944
ありがとうございますm(_ _)m
半分、あきらめかけていました。
0947CPUID05/02/25 14:48:05ID:T5ngmMgI
ユーザ空間からプロセススクリプトのアドレス取得する方法があれば教えて下さい。
0948login:Penguin05/02/25 21:56:30ID:Kyzhm2lt
プロセススクリプト? 何のことを言おうとしているのだろう・・・
0949login:Penguin05/02/25 23:10:03ID:L0S86Pvn
すみません。
すプロセスディスクリプタの誤りです。
0950login:Penguin05/02/25 23:55:11ID:Nj2juC+S
>>949
そんなんユーザー空間から見えちゃまずいだろう。
0951login:Penguin05/02/26 13:57:10ID:NTEY/KLT
何をするつもりだ>>949
お前は一人で世界を救おうというのか!
0952login:Penguin05/02/26 20:38:32ID:c7lqcqLw
おい。
カーネルを理解したいのだ。

「この本をこの通りに順番に読め!」
というのがあったら、教えてください。
0953login:Penguin05/02/26 21:54:11ID:PsgioYqx
>>952
本などない
ソース嫁
0954login:Penguin05/02/27 14:18:38ID:BnGxFurs
↓の2つのマクロの意味が分かりません。もう限界です。
これ以上理解できない状態が続くと、妻を道連れに逝くかもしれません。
そうなったらお前らすごい後悔するよな、そうだよな、そうだろ!
心の中で否定しても無駄だ、絶対後悔しちゃうぞ。
後悔したくないよな、そうだよな。

じゃー、さっさと教えてちょ!

include/linux/compiler.h
# define __releases(x)__attribute__((context(1,0)))
# define __acquire(x)__context__(1)

すいません、ちょっと強気に迫ってみましたが、教えてください。
本当に困ってます。頼みます。m(_ _)m
0955login:Penguin05/02/27 14:21:21ID:BnGxFurs
>>952

1. UnixUserのLinux2.6解読室
2. 詳解Linuxカーネル
3. Linuxのソース
0956login:Penguin05/02/27 20:25:37ID:1DzM+Kt1
>>955
詳細Linuxカーネルは持ってます。
UnixUserのブートの本も。

ただ、それに至る知識がないのです。

Linuxプログラミング(ソフトバンクのやつ)も読んでいるのですが、
「何かが足りない」感じなのです。
0957login:Penguin05/02/27 20:27:14ID:1DzM+Kt1
UNIXカーネルの設計でも読んで、修行します。
0958login:Penguin05/02/27 20:53:44ID:+C2cvjvn
>>956
恐らくハードウェアの知識と根性

>>954
それバージョンいくつ?そんな内容ないし。

それに__attribute__について知りたいならgccのinfoで
C Extensionの項目の
* Function Attributes:: Declaring that functions have no side effects,
or that they can never return.
* Attribute Syntax:: Formal syntax for attributes.
* Variable Attributes::Specifying attributes of variables.
* Type Attributes::Specifying attributes of types.
この辺り見れば?
0959login:Penguin05/02/27 20:54:49ID:BnGxFurs
>>956

あくまで個人的な意見だが、Linuxカーネルはプロセッサの知識
が無いと苦しい。
「はじめて読む8086」→「はじめて読む486」
を読んで、プロセッサの知識を身につけておいた方が良いと思う。

ただ、「あれやって、これやって、そしてLinuxカーネルを読もう」
とあまり遠回りをするのではなく、プロセッサとC言語の知識が
あったら、すぐにLinuxカーネルを読み始めた方がよいように思う。
096095405/02/27 21:00:55ID:BnGxFurs
>>958
とりあえずレス、サンクス!感謝感謝感謝
Linux2.6.10です。
探してみたんだけど見つかりません>gccのinfo (ToT)

context()っていう関数が一体、どの関数のことなのか知りたいです。
0961login:Penguin05/02/28 11:32:10ID:D7G2yqC2
>>960

つ[GNU GLOBAL ソースコードタグシステム]
http://tamacom.com/global-j.html
096296005/03/01 07:37:21ID:yi/Urpst
>>961

サンクス、ちょっと試してみます!
追って報告する!
096396005/03/01 11:16:17ID:yi/Urpst
やはり見つからない(T_T)

include/linux/compiler.h
の中のマクロってことがヒントかもしれない。
http://lxr.linux.no/source/include/linux/compiler.h#L6
↑の場所なんだが、
#ifdef __CHECKER__
っというのは何だろう?__ASSEMBLY__とかいう定義もあるが、
これはどこで調べれば良いのだろうか。

どうか放置せずに教えてください m(_ _)m

これ以上停滞してると、・・・お、お客さんが怖い・・・
0964login:Penguin05/03/01 11:56:56ID:dudfwCjE
仕事を2chに丸投げですか そうですか。
0965login:Penguin05/03/01 12:04:54ID:eifVJR66
>>963
>これ以上停滞してると、・・・お、お客さんが怖い・・・
ソースを解析する仕事??
0966login:Penguin05/03/01 12:14:12ID:PnFz+g+l
出来もしない仕事なんて引き受けるなよ…
096796005/03/01 13:45:21ID:yi/Urpst
>>964-966
スイマセン。

ソースを解析する仕事じゃないんだけど、ちょっと行き詰ってまして・・・。
0968login:Penguin05/03/01 15:25:54ID:eifVJR66
むしろ>>963の質問よりも仕事内容の方が気になった...
096996005/03/01 16:13:44ID:yi/Urpst
とある医療関連会社のシステムの試作(主にデバドラ)をやってます。
下請けなので断れない立場です(T_T)
0970login:Penguin05/03/01 16:16:52ID:xn0lGzJZ
できもしない仕事請けるなよ。
おたがい不幸になるだけだ。
0971login:Penguin05/03/01 16:21:19ID:xn0lGzJZ
この話が終わりしだい↓に統合でいいよね。

【Linux】カーネル総合2【Kernel】
http://pc5.2ch.net/test/read.cgi/linux/1100967722/
0972login:Penguin05/03/01 16:36:21ID:eifVJR66
>>969
ちょっと調べたら自分はわかったよ。

言っておくけどデバドラ開発ならこれらは知らなくても別に問題ないよ。
無視してもいい。


ちょっとだけヒント:これらはgccでは使用しません
097396005/03/01 16:44:06ID:yi/Urpst
>>972
サンクス!x9
か、かなり気が楽になったよ。お前は神だ!
できればどこを調べたのか知りたいのだが・・・頼む.com

>>970は厳しいね。
仕事、断れるくらい大きい会社に勤めてるんだろうね。うらやましぃ...
0974login:Penguin05/03/01 17:47:44ID:eifVJR66
>>973
>できればどこを調べたのか知りたいのだが・・・頼む.com
(ーー;)
無視してもよいと言ってるではないか...

Use the source and google, >>963




− May the source be with >>963!
0975必死な96005/03/01 19:23:39ID:yi/Urpst
> (ーー;)
>無視してもよいと言ってるではないか...

長いこと悩んでいたので、結局なんだったのか知りたいです。
といろいろ検索かけてみたが、未だわかりませんorz
どうか、どうか教えてください m(_ _)m
0976login:Penguin05/03/01 20:15:49ID:eifVJR66
>>975
じゃあ手がかりを与えよう (といっても答えを言ってるようなものだけど..)
ttp://www.linuxjournal.com/article/7272
097795605/03/01 20:32:57ID:RzFHtyl+
>>959
わかりました。ありがとうございます。
やはり「8086」からの方がいいのですね。
0978login:Penguin05/03/01 22:09:08ID:eifVJR66
(´-`).。oO(結局、自分が言った事は>>960には伝わったのだろうか...)
0979& ◆/WemEjDB42 05/03/01 22:41:33ID:yi/Urpst
>>978

現在英語を読んでいるところだが、よくわからんのだ。
ただ、気持ちだけは伝わってるぜ。
サンキュー、ミスター!あんた最高だよ。
ついでに言っておくが、日本語で解説してくれると
うれしい。
0980login:Penguin05/03/01 22:44:19ID:eifVJR66
>>979
>ついでに言っておくが、日本語で解説してくれると
>うれしい。
ガン( ゚д゚)ガレ
0981login:Penguin05/03/01 22:54:00ID:yi/Urpst
>やはり「8086」からの方がいいのですね。

「はじめて読む8086」「はじめて読む486」は良い本だよ。
両方とも古い本なので、486の方はサンプルコードがMASM
とMS-C用なんだよな。で、DOSで動かすことを前提として
いる。今となっては、そのような環境は手に入らないかも
しれない。でも、あきらめるのは早い。
MS-DOSの代わりにFreeDOSを使えば良いし、MASMやMS-Cの
代わりにLSI C-86試食版を使えば良い。

FreeDOS
ttp://homepage1.nifty.com/bible/fdos/

LSI C-86試食版
ttp://oku.edu.mie-u.ac.jp/~okumura/c/lsic.html

FreeDOSにLSI C-86試食版を導入する方法
ttp://homepage1.nifty.com/bible/fdos/lsic/lsi-c.html

根気よく頑張れよ!
0982login:Penguin05/03/01 22:59:55ID:eifVJR66
>>979
まぁ簡単に言うとだな、
リーナスがちょっとしたちっちゃなコンパイラを作ったぞ、みたいな
古いK&Rスタイルは嫌だからANSI Cが好きなの、みたいな
GCCを使わずにそれでソースチェックに使ったりしてるよ、みたいな
んな事言ってるように思われ。

んだからそのリーナスコンパイラ"Sparse"って言うのか?は、
別にKernelコンパイルにもデバドラ作成にも必須で無いぞって事。
(Kernelハッカーには嬉しいツールらしいが..)
098396005/03/01 23:06:31ID:yi/Urpst
>>980

よくぞ説明してくれた!なるほど!
俺はもうあきらめて愛用のパジャマに着替えた
ところだよ。

感謝の気持ちとして俺の使用済みティッシュ
(1ヶ月分)をもれなくプレゼント!
0984login:Penguin05/03/01 23:09:19ID:eifVJR66
>>983
>よくぞ説明してくれた!なるほど!
>俺はもうあきらめて愛用のパジャマに着替えた
>ところだよ。
それでいいのか!サラリーマンよ!w

>感謝の気持ちとして俺の使用済みティッシュ
>(1ヶ月分)をもれなくプレゼント!
(゚�听)イラネ
098596005/03/01 23:19:08ID:yi/Urpst

>それでいいのか!サラリーマンよ!w

良くは無いんだけど、俺はクソエンジニアだからいいの。
でもありがとな。助かったよ。

sparseについて調べてみるといくつか見つかった。↓こういう使われ方を
してるんだね。

RedHatのサイトにて:
sparseという自動化ツールを使用してLinux 2.6ソースを調べて
いたところ、いくつかの問題が発見された。そのうち一部の問題
は、2.4シリーズのLinuxカーネルにも当てはまるものである。

japan.linux.comにて:
sparseという自動化ツールを使用してLinux 2.6ソース
を調べていたところ、複数の弱点が発見された。
0986I am free.05/03/01 23:29:18ID:eifVJR66
まぁ自分も暇で暇でしょうがないからKernelソース見ながら、
日々を過ごしてるだけだから忠告するほど偉くはないんだけどね。w
レス数が950を超えています。1000を超えると書き込みができなくなります。