Ⅰ ARM體系的cpu編譯內核時$make menuconfig 與 $make menuconfig ARCH =arm CROSS_COMPILE=arm-linux-區別
你可以看一下makefile的內容。
make menuconfig 是執行makefile裡面的menuconfig目標.
如果後面ARCH =arm CROSS_COMPILE=arm-linux-的話表明: 編譯出來的目標是針對ARM體系結構的。因為是針對ARM體系結構,所以需要使用交叉編譯器。使用CROSS_COMPILE=xxx來指定交叉編譯器。
CROSS_COMPILE=arm-linux- 意思是制定交叉編譯器為arm-linux-XXX。 如:makefile裡面會指定CC為arm-linux-gcc。
Ⅱ 為什麼要配置內核為何要重新編譯內核
為什麼要配置內核?
編譯前當然要配置一下內核啊,make menuconfig ,生成默認配置文件 .config ,這個文件是設置 cpu 體系,及很多驅動選項的,你沒配置這個,怎麼可能編譯那
新下載的內核都是沒有默認 .config 需要你找到一個默認的config 文件,比如 arch/arm/configs/ 下是 arm cpu 很多的默認配置,當然你也可以把你以前的 config 文件拷貝到新內核目錄下。
.config 是配置編譯內核的最初步驟,你要編譯驅動程序,就必須要了解這個,多上網查下資料
然後重新編譯
為何要重新編譯內核?
Linux作為一個自由軟體,在廣大愛好者的支持下,內核版本不斷更新。
新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定製一個更高效,更穩定的內核,就需要重新編譯Linux內核。
通常,更新的內核會支持更多的硬體,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。
為了正確的合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,一般主要有下面四個考慮:
(1)自己定製編譯的內核運行更快(具有更少的代碼)
(2)系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中)
(3)不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞
(4) 將某種功能編譯為模塊方式會比編譯到內核內的方式速度要慢一些
這樣就了解為什麼要編譯Linux內核了。
Ⅲ arm嵌入式linux系統為什麼要在Linux主機上編譯後下載到開發板呢為什麼
單片機很少跑操作系統,arm嵌入式系統如果不跑操縱系統,當然用IAR,KEIL等等集成開發環境也可以編譯出來程序,但是如果要跑操作系統,目前主流的都是跑的基於linux內核的操作系統。
既然使用的是基於linux的系統,那在linux下用交叉編譯環境編譯出程序就是自然而然的。就好像你要寫一個windows下運行的程序,自然首選是在windows下開發。
搭建linux的編譯環境很簡單。即使是windows的系統,裝個虛擬機,安裝一下交叉編譯環境,也就可以了。
搭建windows編譯環境的方法基本都是先安裝一個類linux環境的軟體,比如cgwin,然後和linux下步驟基本相同,沒多大區別。
你想用windows的環境,應該是對linux不熟悉吧。但是,學習linux是做嵌入式省不了的,是必須的。我也是這么一步一步走來的,推薦從單片機裸奔(無操作系統)過渡到ARM linux的一本書《linux c 一站式學習》
Ⅳ arm嵌入式linux系統為什麼要在Linux主機上編譯後下載到開發板呢為什麼
同學不要把單片機和嵌入式化成等同。單片機只不過是嵌入式裡面的一個小分支。
你問這個問題說明你對軟體的編譯原理還不夠深入。
簡單來說就是單片機的IDE已經集成了很多步驟,編譯,鏈接,以及調試功能,更重要的是單片機編程需要的介面是比較平台化的比如說在8位機上的程序涉及到寄存器的操作,到其他單片機就要重頭開發,
用到的函數也不同,linux應用編程其實用的是linux平台的c庫以及linux的API,這些在Windows是沒有的,除非你自己配置環境。而單片機說白了,基本都是根據某款單片機到各個論壇去或者晶元廠商去要介面實現函數,開發中很少用到C庫中的函數。
而在PC的linux中是有開源的內核代碼,以及編譯環境,linux中的編譯器可以找到需要實現的頭文件以及動態庫和靜態庫。在開發的過程中也需要有單獨的調試工具,比如GDB等。
當然你可以在Windows下從網上下載好對應的linux內核源碼以及編譯器,配置好路徑,也可以實現在Windows下進行編譯運行,但這樣會遇到很多的兼容性問題,而且你的做法不是主流,實際開發這么搞會帶來很多麻煩
Ⅳ KEIL FOR ARM晶元跟頭文件哪裡下載啊
是這樣的,ARM只是個內核,以ARM為內核做出來的MCU才是晶元,所以ARM官方不會提供具體晶元的資料,因為他們根本不做晶元
你在新建工程之後,選擇晶元的時候,不要選擇ARM,因為那隻是對內核的編譯編輯,麻煩的很,直接選你的晶元。
比如如果是STM32F417.。。就去 ST Micro...下面找。
比如如果是S3C2440.。。就去 Samsung下面找。
比如如果是LPC2138.。。就去 NXP下面找
如果你用的晶元都沒有,再去ARM里找內核,然後網上去找晶元的資料,自己做驅動和頭文件。