2012-04-11 98 views
0

我想爲android構建一個內核模塊。 我知道我使用交叉編譯。在內核中,我想我可以使用一些通用的交叉編譯,例如arm-none-linux-gnueabi-gcc.Is我的想法是否正確?或者任何其他交叉編譯爲android,u可以提示給我?還有任何關於如何在ubuntu中爲交叉編譯構建環境的artile?其次,無論何時編譯模塊,我如何將它作爲模塊加載到內核中? 最後,誰都解釋了NDK,交叉編譯和工具鏈之間的關係? THXandroid跨編譯,ndk,工具鏈

+0

我想添加一些東西給這個問題,下面的鏈接給出了兩件事NDK和NDK與工具鏈。這是什麼區別? http://developer.android.com/tools/sdk/ndk/index.html – sandyJoshi 2013-09-19 18:27:04

回答

3

那麼,這是怎樣的一個大問題,但我會嘗試,並回答了我至少知道。我相信一個特定的硬件製造商將擁有一個Android「Bundle」,它將包含一套完整的工作軟件。這將包括工具鏈,Linux內核源碼,u-boot引導程序以及整個Android系統。就我而言,飛思卡爾爲他們提供的特定處理器和評估板提供了Android捆綁包。

就術語而言,「交叉編譯器」將包含在「工具鏈」中。術語「工具鏈」包含整個交叉編譯器,交叉庫等。每個工具鏈都是爲主機(即Linux,cygwin等)和目標處理器(arm,mips,PowerPC等)構建的。

構建Linux for Linux與構建Linux真的沒有什麼不同。建議使用相同的工具鏈來構建用於構建Android系統其餘部分的Linux。要構建Linux,請將環境變量設置爲「ARCH = arm」和「CROSS_COMPILE = arm-none-linux-gnueabi-」(或使用實際交叉編譯器的前綴)。注意結尾「 - 」在交叉編譯前綴中很重要。

以下鏈接將介紹如何設置開發環境。

Android Development environment set up.

注意,Ubuntu的10.04至11.04效果很好。建議保留在其中一個版本中。

將Linux內核放到目標上完全取決於目標。對於我正在使用的飛思卡爾,它希望在SD卡上找到偏移量爲0x800塊的Linux內核(每塊在SD卡上爲512字節)。我使用以下方法來寫入SD卡原料:

須藤DD如果=的/ dev/SDB BS = 1M的=的uImage尋求= 1;同步

至於NDK去,我根本沒有經驗。我對它的理解,它是Android Java應用程序的一個接口,用於向時間關鍵功能的「C」和「CPP」代碼發出呼叫。我不知道的是它對JNI接口的優勢,以及它與JNI接口的不同之處。

我希望你覺得這個有用且有幫助。