問題タブ [linux-kernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - git を使用して、移動するターゲット (Linux など) に対して変更を保持する
特定の Linux バージョン、たとえば 2.6.25.4 に対して完全に機能する一連の変更があります。
私は git ツリーを持っていて、タグ v2.6.25.4 からトラッキング ブランチ バニラ-2.6.25.4 を作成しました。これから my-changes-2.6.25.4 という名前のブランチを作成し、すべての作業を行いました。
ここで、任意の新しいバージョンの Linux の上に自分の作業をリベースしたいと思います。2.6.28.9 と言います。これを達成するための最適な git ワークフローは何ですか?
2.6.28.9 から新しいブランチを作成する方法は知っていますが、「git merge my-changes-2.6.25.4」のようなことをすると、興味のない他のものからあらゆる種類の競合が発生します。これはとにかく壊れているようです。
作業中の my-changes-2.6.25.4 から新しいブランチを作成し、git rebase 2.6.28.9 を実行しようとしましたが、これにより 2.6.25.4 からの変更が取得され、2.6.28.9 の上に適用されると想定されていましたが、これにより大量の結果が得られました。私が変更したものに関係のない競合の。
これを行う適切な方法が何であるかわかりません。私は安定した Linux ツリーhttp://www.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6-stable.gitを使用していますが、いくつかの問題はその事実に起因する可能性があると思いますバージョン管理されたタグ v2.6.xy がすべて同じ系統からのものではないことに注意してください。
これを適切に行う方法を知っている人はいますか?Linux がインターフェイスを変更してコードを壊した次の場所を見つけるために、バイナリ検索を介して可能な限り自動的に前進する方法を考案したことに対する追加の功績ですが、実際に何をしようとしているのかがわかれば、それを自分で自動化できると思います。 .
linux - おっと:不正な領域のカーネルアクセス、sig:11 - 'swapper' - 割り込みハンドラを強制終了
組み込み Linux 環境 (PowerPC でカスタマイズされた 2.4.25) では、数時間後に次のカーネル パニックが発生します。
猫 /proc/モジュール:
ksyms -m:
グーグルで助けを求めましたが、役立つものが見つかりませんでした。A もバックトレースを「デコード」したかったのですが、その方法がわかりません.... アドレスが System.map のアドレスに対応していません。エラーを見つける方法を誰かに説明してもらえますか?
ありがとう、クリス
c - マクロを定義するときのdowhile(0)の使用は何ですか?
重複の可能性:
C / C ++マクロのDo-Whileおよびif-elseステートメント
は{…}while(0)—何に適していますか?
Linuxカーネルを読んでいて、次のような多くのマクロを見つけました。
単に{}で定義するのではなく、なぜこれを使用するのでしょうか。
c - 特定のシナリオに最適なLinuxカーネルロックメカニズムは何ですか
このシナリオのロックの問題を解決する必要があります。
- マルチCPUシステム。
- すべてのCPUは、共通の(ソフトウェア)リソースを使用します。
- リソースへの読み取り専用アクセスは非常に一般的です。(着信ネットワークパケットの処理)
- 書き込みアクセスの頻度ははるかに低くなります。(ほとんどの構成変更のみ)。
現在read_lock_bh
、write_lock_bh
(スピンロック)メカニズムを使用しています。問題は、CPUが多いほど、ライターのコンテキストでソフトロックアップが発生することです。
この本の並行性の章を読みましたが、スピンロックを使用するときにリーダーとライターのどちらが優先されるかを完全には理解できませんでした。
したがって、質問は次のとおりです。
- Linuxスピンロックメカニズムはリーダー/ライター/それらのどれも優先しませんか?
- シナリオでこれらのソフトロックアップを回避するために使用できるより良いメカニズムはありますか、または現在のソリューションを使用している間、ライターがロックを取得しようとするたびにライターを優先する方法はありますか?
ありがとう、ニル
linux - カーネルとユーザー空間の間で通信するための理想的で最速の方法は何ですか?
カーネルとユーザー空間プログラム間の次のインターフェースを介して情報交換が行われることを知っています
システムコール
ioctl
/proc & /sys
ネットリンク
知りたい
他のインターフェイスを見逃した場合は?
大量のデータを交換する最速の方法はどれですか? (そして、私が参照できるそのような主張を裏付ける文書/メール/説明があれば)
おすすめのコミュニケーション方法は?(ネットリンクだと思いますが、それでも意見を聞きたいです)
linux-kernel - Linuxカーネルはどのようにしてドライバーファームウェアを探す場所を知るのですか?
Ubuntuでカスタムカーネルをコンパイルしていますが、カーネルがファームウェアを探す場所を認識していないように見えるという問題が発生しています。Ubuntu 8.04では、ファームウェアはドライバーモジュールと同じようにカーネルバージョンに関連付けられています。たとえば、kernel 2.6.24-24-genericは、カーネルモジュールを次の場所に格納します。
およびそのファームウェア:
「代替ビルド方法:昔ながらのDebianWay」に従って2.6.24-24-genericUbuntuカーネルをコンパイルすると、適切なモジュールディレクトリが取得され、Intelワイヤレスカード(ipw2200)などのファームウェアを必要とするデバイスを除くすべてのデバイスが機能します。モジュール)。
カーネルログは、たとえば、ipw2200がファームウェアをロードしようとすると、ファームウェアのロードを制御しているカーネルサブシステムがファームウェアを見つけられないことを示しています。
errno-base.hは、これを次のように定義しています。
(ENOENTを返す関数は、その前にマイナスを置きます。)
カーネルの名前が2.6.24-24-genericディレクトリを指すシンボリックリンクを/lib/firmwareに作成しようとしましたが、同じエラーが発生しました。このファームウェアは非GPLであり、Intelによって提供され、Ubuntuによってパックされています。特定のカーネルバージョンと実際に結びついているとは思いません。cmp
は、さまざまなディレクトリのバージョンが同一であることを示しています。
では、カーネルはどのようにしてファームウェアを探す場所を知るのでしょうか?
アップデート
私が抱えている問題に対するこの解決策を見つけましたが、Ubuntuが排除され/etc/hotplug.d
、ファームウェアがに保存されなくなったため、機能しなくなりました/usr/lib/hotplug/firmware
。
Update2
さらにいくつかの調査により、さらにいくつかの答えが見つかりました。のバージョン92まではudev
、プログラムfirmware_helper
はファームウェアがロードされる方法でした。93以降、udev
このプログラムは、私が知る限り同じ機能を提供するfirmware.shという名前のスクリプトに置き換えられました。これらは両方とも、ファームウェアパスをにハードコードします/lib/firmware
。Ubuntuはまだ/lib/udev/firmware_helper
バイナリを使用しているようです。
ファームウェアファイルの名前は、パスに連結されてファームウェアのロードに使用されるfirmware_helper
環境変数で渡されます。$FIRMWARE
/lib/firmware
ファームウェアをロードする実際の要求は、システムコールを介してドライバー(私の場合はipw2200)によって行われます。
これで、ドライバーが環境変数を呼び出して確認する間のどこかでrequest_firmware
、カーネルパッケージ名がファームウェア名の前に追加されます。firmware_helper
$FIRMWARE
それで、誰がそれをしているのですか?
linux - カーネルの sk_buffs の数に制限はありますか
NetFilter フックでいくつかの SKB を盗み、しばらく保持する必要があります。
一度に使用できる SKB の数について、カーネルに制限はありますか? カーネル モジュールに 100,000 個またはそれ以上の SKB が保持されていると、どのような影響がありますか? 多数の SKB を使用できる場合は、パケットを 2 回コピーすることを避けることができます。
よろしく、 デネス
c - Linux オペレーティング システム クラスのコンテンツ
私は今学期にオペレーティング システム クラスの TA になります。ラボでは、特に Linux カーネルを扱います。
- このクラスで取り上げるべき最も重要な Linux カーネルの概念/コンポーネントは何だと思いますか?
- 取り残されていた研究で取り上げられたことを望みますか?
Linux カーネルまたは全体的なオペレーティング システムの設計に関する提案は大歓迎です。
linux - Linux カーネルのクロス コンパイルと VMware によるデバッグ
Ubuntu 8.04 ホストでコンパイルを行いながら、テスト用に vmware VM (vmware server 2.0 の下のゲストとして Ubuntu 9.04 ) で Linux カーネルとデバイス ドライバーの開発を行うことを検討しています。
VM の下でコンパイルを行うことによるパフォーマンスの低下は避けたいと考えています。
カーネルが明らかにそれ自体の外部にリンクしていないことはわかっているので、その点で問題はないはずですが、
- これを行うときに注意する必要がある特別な落とし穴はありますか?
- カーネルがクラッシュしたときでもコンピューターが稼働している以外に、このセットアップには他に利点がありますか?
- この種のセットアップを使用するためのガイドはありますか?
編集
ホスト上で GDB を使用して Workstation 6.0 を介して VMware でリモート デバッグを行うことについて、数多くのリファレンスを見てきました。これがServer 2.0などのVMWareの無料バージョンで機能するかどうかは誰にもわかりません。
linux - Linux I/Oスケジューラの選択
/ sys / block / [disk] / queue / schedulerに書き込むことで、実行中のカーネル上の特定のデバイスのI/Oスケジューラーを変更できると思われることを読みました。たとえば、私のシステムで見ることができます:
デフォルトは完全に均等化キューイングスケジューラです。私が疑問に思っているのは、カスタムカーネルに4つのスケジューラーすべてを含めることに何らかの用途があるかどうかです。カーネルが正しいハードウェア用の正しいスケジューラー、特にフラッシュベースのドライブ用の「noop」スケジューラーと従来のドライブ用の他のスケジューラーを選択するのに十分賢くない限り、複数のスケジューラーをコンパイルすることにはあまり意味がないようです。ハードドライブ。
これは本当ですか?