問題タブ [kernel-extension]
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.
gdb - MacoverEthernet間の2台のマシンのGDBデバッグ-トランザクションがタイムアウトしました
gdbを実行しているリモートマシンを使用して、Macでカーネルをクラッシュさせているデバイスドライバーをデバッグしようとしています(ここの手順に従ってください)。両方のマシンはイーサネットによって同じネットワークに接続されています(同じルーターでも、両方がネットワークにアクセスできます)。nvram boot-args="debug=0x144"また、ターゲットを設定して再起動しました。
次に、通常どおり、カーネル拡張機能をターゲットにロードします。ホストマシンで、次のようにgdbを起動します。
gdbに入ったら、カーネルマクロをロードし、リモート接続用にセットアップします
ただし、最後のコマンドは接続を確立せず、次の無限のスプールを取得します
gdbをターゲットマシンに接続する正しい方法は何ですか?
macos - Kext スーパークラスが起動しない - IOSCSIPeripheralDeviceType00::start() が返されない
IOSCSIPeripheralDeviceType00USB 接続の大容量記憶装置用のからサブクラス化された SCSI パススルー デバイス ドライバーを作成しています。デバイスは、ファームウェア内のいくつかのベンダー固有の SCSI コマンドをインターセプトし、適切に応答するだけでなく、「通常の」SCSI コマンドにも応答します。
私は、この Wagerlabs コードのスタイルによく似たドライブを実装しました。
およびメソッドは基本的に空でinit()、probe()ログを記録し、反復的なスーパークラス関数を呼び出すだけです。これらは正しく動作しているように見えます (ログは期待どおりに表示され、プラグインされたときにドライバーがデバイスに割り当てられます)。ただし、ドライバーのstart()メソッドが呼び出されると、スーパークラスstart()が最初に呼び出されますが、デバイスが取り外されるまで返されません。
macos - IOServiceOpenは0x10000003(MACH_SEND_INVALID_DEST)を返します
私が書いているドライバーのサービスを開こうとすると(SimpleUserClientの例ではユーザークライアントを使用)、IOServiceOpenは0x10000003(MACH_SEND_INVALID_REQUEST)を返します。
したがって、サービスが開かれることはありません。
c - Linux の SO_BINDTODEVICE ソケット オプションを実装するための OS X カーネル拡張の記述
特定のネットワーク インターフェイスを介してソケットを強制できるようにしたいと考えています。Linux では、カーネルは、プログラマーが上記のソケット オプションを設定することでこれを実現できるようにしますが、OS X では、私は暗闇の中にいます。
したがって、私のタイトルの質問 - それは可能ですか? それは行われましたか?IP スタックの再実装については検討していません。バインドからインターフェイスへのオプションの使用を有効にするだけです。
macos - OSX のカーネル拡張機能の整合性チェック
OS X でカーネル拡張の整合性と有効性を確認する方法はありますか? バンドル名が com.apple で始まる拡張機能が、Apple の実際の拡張機能であることを確認する必要があります。カーネル拡張機能が Apple からのものかどうかを明らかにする証明書または何らかのフットプリントかもしれません。
macos - ドライバーの親(または祖先)のプロパティを取得する
ベンダー固有のコマンドを実装するUSB接続のカスタムSCSIデバイス用のドライバーがあります。各USBデバイスは複数のSCSILUNをホストします。これは非常にうまく機能していますが、デバイスごとにSCSI LUNをグループ化する際に問題があります。IOSCSILogicalUnitNubレベルが下がると(ドライバーが継承します)、LUNをリンクする識別機能がありません(SCSI論理ユニット番号があります。ただし、これらはすべての新しいデバイスで衝突します。すべてのユニットは0x0です)。
USBフィールド(または他の一意のキー)に従ってそれらすべてをリンクするようなことをしたいのですが、一致するSCSIドライバーlocationIDのみを指定して親USBデバイスを取得する方法がわかりません。io_service_tこれは、ドライバーではなくアプリケーション側で実行する方が適切です。アプリケーションは、どのサービスにどのLUNがあり、ハンドラーのどのインスタンスによって開かれたかを追跡する必要があるためです。
IOレジストリの階層は次のとおりです。
macos - mach カーネル、ロックの最適な使用法
Mac OS X ネットワーク カーネル拡張機能の特定の部分を可能な限り高速かつ効率的に設計する方法 (C 言語) に関するアドバイスや指針を探しています。
説明: 2 セットの TAILQ リストがあります。1 つはタイプ A 構造用、もう 1 つはタイプ B 構造用です。ほとんどの場合、私はそれらを別々に扱うので、それぞれに lock_mtx を持っています。場合によっては、A、B、そして両方を同時に変更する必要があります。次のようになります。
私はロックの使い方に慣れていません。1. 単一のロックを使用して両方のリストを保護します。B のみを変更する関数が実行されている間に、A のみを変更する関数が実行されるのを防ぐため、これは無駄です (逆も同様です)。
- 両方のロックを連続して取得し、解放します。それは私に与えるでしょう:
.
これらすべてのロックを取得すると、これは非常に高価になるでしょう。A と B の相互変更を保護するより良い方法はありますか?
アドバイスありがとうございます。
xcode - kextutil:com.apple.iokit.IOUSBFamilyに互換性のある依存関係が見つかりません
Mac-pro 10.6.8でドライバをロードするときにKextutilが失敗しましたが、iMac10.6.8では問題ありません。それについて何か教えていただければ幸いです!ありがとう
情報:
java - アプリケーションに kext をバンドルすることはできますか?
kext を必要とする Mac OS X アプリケーションがあります (これも私が作成しました)。ユーザーがアプリケーションを実行すると、kext が自動的に読み込まれるように、kext をアプリケーションに「バンドル」したいと思います (もちろん、管理者パスワードのプロンプトが表示される場合があります)。可能ですか、それともインストール時に kext をインストールする必要がありますか?