2007年6月5日火曜日

KEXTドライバへのパラメータ

AppleのNik Gervaeという人がDarwin-devのMailing Listで面白い返事をしていました。
------ by Apple Nik Gervae -----
That second parameter has always been passed as NULL. I'm afraid there's no clean way to get data passed to your kext at load time (and mixing in libkern C++ with a non-I/O Kit kext is problematic, but it can be done). Feel free to file an enhancement request for the feature you need, and I'll add it to my list. It seems pretty reasonable, after all!

(By the way, the kmod_info_t struct contains fields for your kext's bundle ID and version, and other internal bookkeeping stuff. Nothing much of use to kexts themselves. Check out Kernel.framework/Headers/mach/kmod.h for the definition.)
------ by Apple Nik Gervae -----

KEXTドライバがロードされるときのパラメータとしてデータを渡す方法はないそうです。他にチップスとして、kmod_info_t構造体にKEXTドライバのバンドルIDやバージョンなどの情報が格納されているそうです。Kernel.framework/Headers/mach/kmod.hには以下のようになっています。

typedef struct kmod_info {

struct kmod_info *next;

int info_version;// version of this structure

int id;

char name[KMOD_MAX_NAME];

char version[KMOD_MAX_NAME];

int reference_count; // # refs to this

kmod_reference_t *reference_list; // who this refs

vm_address_t address; // starting address

vm_size_t size; // total size

vm_size_t hdr_size; // unwired hdr size

kmod_start_func_t *start;

kmod_stop_func_t *stop;

} kmod_info_t;


面白いことにこの宣言の前に以下のようなコメントが書かれています。
/* LP64todo - not 64-bit safe */