私はちょうど私の自身のコンピュータ上で実験したが、私自身の質問に答えるために(これは、私たち「信頼」私たち自身のプロセスは、組み込み機器のためです):NO、直接カーネルのメモリを共有することはできませんユーザスペースプロセス。
私はテンペスタのスタックのような領域ベースのメモリマネージャ(pool.c)に基づいて、自分自身のカーネルモジュールを記述してみました:
[...]
static int __init
tfw_pool_init(void)
{
printk(KERN_ALERT "HIJACK INIT\n");
write_cr0 (read_cr0() & (~ 0x10000));
pg_cache = alloc_percpu(unsigned long [TFW_POOL_PGCACHE_SZ]);
if (pg_cache == NULL)
return -ENOMEM;
printk(KERN_NOTICE "__tfw_pool_new = %p\n", __tfw_pool_new);
printk(KERN_NOTICE "tfw_pool_alloc = %p\n", tfw_pool_alloc);
printk(KERN_NOTICE "tfw_pool_realloc = %p\n", tfw_pool_realloc);
printk(KERN_NOTICE "tfw_pool_free = %p\n", tfw_pool_free);
printk(KERN_NOTICE "tfw_pool_destroy = %p\n", tfw_pool_destroy);
return 0;
}
static void __exit
tfw_pool_exit(void)
{
free_percpu(pg_cache);
write_cr0 (read_cr0() | 0x10000);
printk(KERN_ALERT "MODULE EXIT\n");
}
module_init(tfw_pool_init);
module_exit(tfw_pool_exit);
MODULE_LICENSE("GPL");
とセグメンテーションフォールトをプリントアウト機能を呼び出すことが、私のシステムは非常に不安定になっただけでなく、モジュールをロードした後にを訪問しないでください。