我有一個大的系統,主要用C語言編寫,到目前爲止一直在用戶空間中運行。現在我需要將代碼編譯爲內核模塊。爲此,AFAIK,我應該至少重寫代碼和替換功能作爲malloc
,calloc
,free
,printf
與他們的內核當量,因爲這些都是僅僅用戶空間的功能。但問題是,我沒有系統中使用的一些定製庫的源代碼,這些庫在它們的函數內調用malloc
等。所以,基本上,我可能需要重新實現整個圖書館。將用戶空間代碼移植到內核空間
現在的問題:會是一個非常骯髒的黑客,如果我寫我自己的實施malloc
作爲一個包裝周圍kmalloc
,這樣的事情:
void *malloc(size_t size) {
return kmalloc(size, GFP_USER);
}
然後這個實現鏈接到系統代碼,這將消除模塊中的所有未知符號錯誤。
其實我認爲這將是一個普遍的問題,有人會已經寫這樣的kmalloc的包裝,但我一直在google搜索了兩天,現在,沒有發現任何有用的。
編輯:這樣做的原因是我所說的系統是一個在VxWorks實時操作系統上運行的實時應用程序,現在我們要將它移植到Linux RTAI上,其中應用程序主要在內核中運行空間。但我想在用戶空間中也有實時的可能性,因此,我應該按照Mike的建議做,並將代碼分離到內核和用戶空間部分,並使用共享內存在它們之間進行通信。
我剛剛看到[這個破解](http://stackoverflow.com/a/14728092/912144)對於gcc可能對你有用。 – Shahbaz 2013-02-08 12:32:10
通常情況下,人們試圖將內容從內核移出,而不是相反。我個人的經驗是,如果你認爲你需要製作一個你的程序的內核模塊,那麼你可能做錯了。 – 2013-02-08 12:34:35
@JoachimPileborg他可能會認爲它會在內核空間更快 – Ulterior 2013-02-08 12:37:07