これまでユーザー空間で実行されていた大部分が C で書かれた大きなシステムがあります。次に、コードをカーネル モジュールとしてコンパイルする必要があります。そのためには、少なくともコードを書き直してmalloc
、calloc
、 、free
などの関数をprintf
カーネルの同等のものに置き換える必要があります。これらはユーザー空間の関数のみであるためです。ただし、問題は、システムで使用されるカスタムメイドのライブラリのソース コードがなく、それらのライブラリmalloc
が関数内で呼び出しなどを行っていることです。したがって、基本的に、ライブラリ全体を再実装する必要があるかもしれません。
malloc
ここで質問: の独自の実装をラッパーとして次のkmalloc
ように記述した場合、それは本当に汚いハックになりますか?
void *malloc(size_t size) {
return kmalloc(size, GFP_USER);
}
次に、この実装をシステム コードにリンクします。これにより、モジュールエラーのすべての不明なシンボルが排除されます。
実際、これは一般的な問題であり、誰かがすでにそのような kmalloc ラッパーを作成しているだろうと思っていましたが、数日間グーグルで調べてみましたが、何も役に立ちませんでした。
編集: これを行う理由は、私が話しているシステムが VxWorks リアルタイム OS で実行されているリアルタイム アプリケーションであり、現在、アプリがほとんどカーネル空間で実行される Linux RTAI で使用されるように移植したいからです。しかし、ユーザー空間でもリアルタイムを持つ可能性があると思うので、マイクが提案したように、コードをカーネルとユーザー空間の部分に分離し、それらの間で共有メモリを使用して通信する必要があります。