問題タブ [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.
macos - kernel.framework に基づく kext と app 間の IPC に関するいくつかの問題 (Mac os x)
Mac OS で kext とアプリケーションの間で IPC を実現したいと考えています。アプリから kext にデータを転送しようとすると、いくつかの問題が発生します。
サーバーのセットアップ (bootstrap_create_service) やサーバー ポートの取得 (bootstrap_look_up) など、Mac で Mach IPC プログラミングを実装するために、インターネット上のいくつかの例では、より多くのシステム関数が必要です。ただし、kext プログラミング用の kernel.framework 以外のフレームワークまたはシステム標準ライブラリは使用できません。
ここに私の質問があります: kext でシステム レベルのサポート (bootstrap_create_service 関数など) を取得する別の方法や、kernel.framework で IPC を実現する他の方法はありますか??
どうもありがとう..
その上、kernel.framework では、mmap()、open() を使用して kext と app の間でメモリを共有することはできません。
http://flylib.com/books/en/3.126.1.90/1/からの一例: のように:
サーバー側コード:
クライアント側コード:
macos - OS X で kext 開発を開始できない
Appleの「カーネル拡張」チュートリアルをやろうとしています。プロジェクト ファイルを作成し、Info.plist を作成し、ビルドし、kextlibs を使用して依存関係を学習し、それらを Info.plist に追加し、再ビルドし、/tmp にコピーし、kextutil を使用してテストしました。これまでのところすべて順調です。ただし、kext をロードしようとすると、start/stop/probe 関数が呼び出されないようです。IOLog メッセージが /var/log/system.log に表示されません。
実際、system.log には何も表示されません。sysctl -w debug.kextlog=0x0007780E で kext ロギングを有効にすると、kernel.log が記録されます。kernel.log には、「Kext ch.digorydoo.driver.XinputDevice は依存関係を正常に解決しました」と表示されます。次に、「ロードされていないkextとその他の未使用データをフラッシュしています。」多分私のクラスはすぐにフラッシュされますか?
私のクラスは kextstat の最後に表示されますが、参照はありません。ioclasscount と同じです。ioreg で、自分のクラスが表示されません。
IOProviderClass を IOResources に設定したので、常に参照が必要ですよね? IOMatchCategory を適切に設定しました。
何か助けて?!?! どうもありがとう!
編集: ここに私の Info.plist があります:
xcode - pkgbuild を使用して Xcode 内から kext インストーラーを作成する方法
PackageMaker が非推奨になったことを理解しています。ここでは、pkgbuild/productbuild を使用することになっています。
ただし、kext のインストーラーを作成する例が見つからないようです。kext Xcode プロジェクトのビルド手順の一部としてパッケージをビルドしたいと考えていました。したがって、任意の bash/script ファイルが最適です。
xcode - OSX上のコードレスkext
わかりました。uControllerプロジェクト(ポインティングデバイス)に取り組んでいます。ユーザースペースドライバーを作成しようとしていますIOkit.framework
。
idProductとidVendorを使用して、IOUSBInterfaceInterface300
objを取得できます
問題は私が試してみるときです
kr = (*intf)->USBInterfaceOpen(intf);
で失敗します。kIOReturnExclusiveAccess
おそらく、HID
マネージャがすでに排他的アクセスでデバイスを開いているためです。
ここでは、コードレスkextがHIDManagerによるデバイスの乗っ取りを防ぐことができると述べています
MacでのUSB(HID)割り込みエンドポイントの読み取りと書き込み
idVendor
とを使用してkextを作成し、idProduct
kextloadを使用してロードしました。kextloadから「正常にロード」されました
しかし、どういうわけか私はまだインターフェイスを開くことができませんか?私は何か間違ったことをしていますか?
ファイル名Info.plist(idProductとidVendorを調整したその投稿と同じコンテンツ)を作成してkextを作成し、MyUSBDeviceTest.kextという名前のフォルダーに配置しました。
次に、所有者をroot:wheelに変更し、次にkextをコピーします/System/Library/Extensions
。
デバイスを再起動して再接続しようとしましたが、HID
システムからインターフェイスを取得できません
macos - kext の OSBundleLibraries でリンクするライブラリのバージョンは?
私はkextlibs
自分の kext に対して実行しましたが、使用するように指示されました:
これは私の開発マシン (10.8) で問題なく動作します。しかし、別のマシン(10.7を実行)で実行すると、次のようにロードされません。
ある範囲の Mac OS バージョン (10.6 から 10.8) をターゲットにしたい場合、リンクするバージョンをどのように判断すればよいですか?
usb - Lion 32 ビット kext は純粋仮想機能のロードに失敗しましたが、64 ビットは動作します
OSX用のkextとして仮想USBバス(Linuxボックスとネットワーク経由で通信)を構築します。メイン クラスは IOUSBControllerV3 から派生します。
10.6 32 ビット、10.7.5 64 ビット、10.8 64 ビットでは動作しますが、10.7.5 32 ビットでは (a?) 純粋仮想機能が原因でロードできませんでした。kextutil は私にこれを教えてくれました。
同じシステムで kext をコンパイル (Xcode 4.6) し、システムまたは SDK のバージョンをターゲットとする多くのバリエーションを試しましたが、問題はまだ残っていますか?
特に純粋仮想関数のコンテキストでは、基本クラスのヘッダーにいくつかの #ifdef LP64の違いがあることを私は知っています。
しかし、純粋仮想関数のオーバーロードを 2 日間比較して比較した結果、なぜ 32 ビットだけで問題が発生するのかわかりません。
同じコードは他のシステムでも機能しますが、Lion 32 ビットでは機能しません。
すべてのヒントを前もって感謝します。
よろしくマーカス
=========== ターミナル出力:
python - 次のエラー「com.apple.kextd[38]: Unable to resolve raw path /System/Library/Extensions/ni488lock.kext.」平均?
次のコマンドを実行しています。
参考:http ://www.rau-deaver.org/Mac-PyVISA.html
システムログ
com.apple.kextd[38]: raw パス /System/Library/Extensions/ni488lock.kext を解決できません。
ReportCrash[395]: Python[383] バージョン 2.7.2 (2.7.2) のクラッシュ レポートを /Users//Library/Logs/DiagnosticReports/Python_2013-02-27-175134_Motions-Mac-mini.crash に保存しました
クラッシュログ
macos - kext で libpcap.dylib を使用する
OS X 用の kext ドライバーを作成しており、ライブラリーの関数を使用したいと考えていますlibpcap.dylib
。Libpcap.dylib は OS X の /usr/lib にあります。カーネル空間から使用できますか? Xcode を使用して kext から libpcap.dylib を使用するにはどうすればよいですか?
なんとかコンパイルできました -- (-lpcap がリンク オプションとして表示されます)。
"unexpected dylib"
リンカで警告を受けました。どういうわけか間違っていることは明らかです。- kextload は libpcap の依存関係を解決できません。
- kextlibs は、私の dylib が無視されることを示唆する OsBundleLibraries を介してインクルードしたライブラリのみを表示します。
同様の質問Linking Dylibs in Kexts を認識していますか? しかし、誰かが kext で libpcap を使用したことがあるかどうか知りたいです。
macos - MAC OS X 10.8.x では、AppStore アプリケーションはどのようにカーネル拡張機能をインストールできますか?
説明 適切に機能するためにカーネル拡張機能をインストールする必要がある、科学的なサンドボックス化されたアプリケーションの開発を計画しています。
コード関連の質問 購入したアプリで kext をインストールするにはどうすればよいですか? つまり、どのように展開されますか?呼び出す (ココア) API はありますか? 私は運なしでこの答えを探しました。ほとんどのアプリは kexts を必要としないようです。
一般的な質問 そのようなアプリケーションを appStore に置くことはできますか? カーネル拡張機能をインストールするとサンドボックス化の目的が無効になるため、疑問があります。
xcode - OSX のコードサインとカーネル拡張機能 (Kext): ロードされない
カーネル拡張機能を含む製品を開発していますが、テスト マシンの 1 つで解決策が見つからない奇妙な問題を発見しました。
私の開発マシン (OSX 10.8.3 および最新の Xcode) では、次のように kext をコード署名します。
すべてうまくいき、my.kext/Contents/MacOS/mykext バイナリが変更され (署名が追加され)、フォルダ my.kext/Contents/_CodeSignature が作成され、ファイル CodeResources が含まれます。
この kext をテスト マシン (Xcode 3.2.6 を搭載した OSX 10.7.5、Darwin Kernel 11.4.2 x86_64) の 1 つにロードすると、ロードが拒否されます。
署名なしでモジュールをロードしても問題ありません。また、コマンドラインからではなく、Xcode から kext に署名しようとしましたが、同じ結果が得られました。
署名証明書をその面倒なコンピューターに移動し、そこで kext に署名しました。署名プロセスは異なります。
署名が完了すると、my.kext/Contents/MacOS/mykext にある kext 実行可能ファイルは変更されず、フォルダー Contents/_CodeSignature には、CodeDirectory、CodeRequirements、CodeResources、および CodeSignature というその他のファイルが含まれます。この署名された kext は、これまでのところすべてのデバイスで動作するようです。
質問は次のとおりです。
ここで何が起こっているのですか?署名プロセスで何が間違っていますか? この「古い」マシンで動作する更新されたデバイスで署名を作成するにはどうすればよいですか? 署名されたバイナリを理解していないため、ターゲット マシンが kext のロードを拒否していることを理解しています。このデバイスから署名すると、バイナリが変更されていない、ある種の切り離された署名が作成されます。-D オプションは役に立たないようで、バンドル内に _CodeSignature フォルダーを作成しません。
アップデート
XCode 4.6 の時点でも、問題は解決していません。下位互換性のある方法で署名されているのは、i386 kext のみです。一部の 10.6 および 10.7 カーネルでは、バイナリに埋め込まれた署名を理解できないため、x64 および混合アーキテクチャ kext をロードできません。
codesignコマンドライン ツールには、この目的のために文書化されていない--no-machoフラグがありますが、実装されていないようです。
更新 2
Xcode 4.6.2 4.6.3の時点でも問題は解決していません