問題タブ [darwin]
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.
kernel - ディスクアービトレーションをパスする Darwin カーネルディスクデバイス
そこで、最新の ZFS を OSX に移植 ( github/osx.zfs
) し、ZVOL が欲しかったので追加しました。現在、純粋な BSD カーネル側は機能しているように見えますが、Apple 固有の統合に問題があります。パズルのピースが欠けているだけです。
bdevsw
と を定義して とcdevsw
を呼び出すことにより、他の Darwin カーネルの例bdevsw_add
と同様に、新しい仮想ディスク (ZVOL) を作成しますcdevsw_add_with_bdev
。ここでわかるように、メインの ZFS ノードであり、すべての特定の ioctl を処理する /dev/zfs を作成します。次に、ZVOL 仮想ディスク ノードがここに作成されます。 create /dev/disk_POOL_name
(開発ノードに と という名前を付けてみましたがdisk3
、rdisk3
違いはありませんでした)。
私は受け取ったほとんどの ioctl を を使用して処理しますnewfs_msdos
newfs_hfs
newfs_udf
。ここでは ioctl を処理します
したがって、基本的には、BSD /dev/ エントリが作成され、仮想ディスクを newfs し、マウントして使用することができます。Unix POV からは、ディスクとして動作するように見えます。
しかし、OSXではありません。「diskutil リスト」にも、GUI ディスク ユーティリティにも表示されません。明らかに、それを考慮に入れるためにカーネルで何か他のことをする必要があります。それとも、ユーザーランドでやるべきことですか?
パーティションに関してはまだ何も処理していませんが、パーティションを作成できるようにするには、少なくともディスク ユーティリティに raw ディスクを表示する必要があると思います。
unix - 行末にスペースを 1 つ追加するにはどうすればよいですか?
シェル スクリプトを使用しており、最後の文字が ,.- の場合、行末にスペースを追加したい
試してみましsed 's/,.-\r\n/,.- \r\n/g' part2.out > part3.out
たが、うまくいきませんでした。何が欠けていますか?
macos - OS X の lsusb に相当するものはありますか
この質問はグーグル全体にあるようですが、答えはすべてシステムプロファイラーの使用を指しています。それは素晴らしいことですが、System Profiler を使用すると、次のようなものしか得られません。
多数のデバイス記述子の内容だけが必要な場合はこれで十分ですが、インターフェイスとエンドポイント、インターフェイスの関連付け、複合デバイスに関する情報など、さらに多くの情報が得られます...この情報は OS X のどこにありますかlsusb
? これを行うツールが必要ですか?
c - OSX 上のネットワーク デバイスのマルチキャスト グループ メンバーシップをプログラムで取得する
この種の情報をプログラムで (C/C++ などで) 取得する方法を探しています。
... 等々 ...
Linux では /proc ファイルシステムから取得できますが、多くの検索を行っても OSX に関する有益な情報は得られません。私はそれが sysctl() のものかもしれないと思っていますが、どの sysctl() リクエストを使用するかについては何も見つかりませんでした。
kernel - IOBlockStorageDevice の kext で自分の BSD 名を見つける
これは本当に簡単なことだと思いますが、現時点では回避しています。ほとんどの例は、「BSD 名 /dev/disk を持っている場合、デバイスを見つける方法」を扱っていますが、デバイスを登録したばかりで、与えられた BSD 名を見つけたいと思っています。つまり、/dev/disk2.
基準を作ります
新しいデバイスのナブを作成します。
ここで、新しい nub に与えられた BSDName を知りたいと思います。net_lundman_zfs_zvol または net_lundman_zfs_zvol_device にあるかどうかは私には関係ありません。
私はちょうど私が呼び出すことができると思った
ただし、常に NULL です。それで、おそらく私は自分を見つけてそこからIOMedia *
電話しなければなりませgetProperty()
んか?
kernel - カスタム Darwin カーネルの使用
Mac OS (Mountain Lion、Darwin 2050.22.13) 用のカスタム カーネルを構築しています。カーネルを問題なくビルドでき、それに何かを追加できますが、何かが欠けています。
簡潔にするために、ここに私がやろうとしていることのサンプルがあります。
関数 [my_func(void*)] を追加して、bsd/kern/kern_fork.c を追加したいとします。インクルード ファイルを追加して osfmk/bsd に貼り付け、Makefile を変更して、新しい .h ファイルがBUILD/obj/RELEASE_X86_64/EXPORT_HDRS/ にコピーされるようになりました
関数名も config/BSDKernel.exports に追加しました。/mach_kernel に関数のシンボルが表示されているので、問題ないように見えます。
さて、ここがトリッキーな部分です。それ自体はトリッキーではありませんが、理解できません。私がやりたいことは、私が書いている kext から関数を呼び出せるようにすることです。基本的には、私にとってはある種のプライベート API になります。
kext は正常にコンパイルされますが、kextload/kextutil を実行すると、my_func シンボルが見つからないというエラーが表示されます。
(カーネル) kxld[com.blah.foo.kext]: 次のシンボルは、この kext によって解決されません (カーネル) kxld[com.blah.foo.kext]: _my_func
kextlibs の戻り値: すべてのアーキテクチャの場合: com.apple.kpi.libkern = 12.3
x86_64 の場合: ライブラリ kext に 1 つのシンボルが見つかりません
問題は、関数を kext から見えるようにするにはどうすればよいかということです。ありがとう!