44內核編譯器
編譯內核和 gcc 版本一點關系都沒有。
GCC 又不是微軟出的 Visual C 系列,動不動的就改介面玩。
C 語言是有標準的,使用符合 GCC 要求的源代碼就可以了。
不過 gcc 從 3.4 和 4.0 開始,加強了語法檢查,以前一些不注意語法的源代碼可能不能通過編譯。
除了特殊要求,建議還是選擇最新版本的 gcc 進行編譯。
❷ 在ubuntu13.04系統中,使用arm-linux-gcc4.4.3編譯內核,
test.s: Assembler messages: test.s:1: Error: unknown pseudo-op: `.test' test.s:7: Error: bad expression -- `ldr r2,#2' 第1行,改成.text,建議在這之前加上一個.code 32,表示是ARM指令 第7行,改成ldr, r2, =2
❸ linux各個內核版本與交叉編譯器版本的對應問題。這個是怎麼對應的。我怎麼知道我的內核需要那個編譯器。
一般來說越新的內核用越新的交叉編譯器,你不用知道怎麼選擇,網上都有大量的現成例子,你這個3.4.1和4.4.3 都跳了一個重大改版了,也許你這個3.4.1隻能編譯通過2.4.xxx的內核,交叉編譯器在編譯的時候涉及到對一些代碼的優化,2.4內核 和2.6內核差了很多,這個你也知道!
❹ 如何編譯Linux內核
一、編譯環境
ubuntu 5.10,要編譯的內核源碼版本2.6.12 二、下載並解壓源代碼 首先從linux內核的官網www.kernel.org把源代碼下載下來。為了和後面實驗要求符合,我們要下載使用O(1)調度器的源碼。因此這里下載了2.6.12版本源碼。下載 下linux-2.6.12.tar.bz2,將下載源碼放入/usr/src/目錄下。如下圖所示: 解壓該源碼: 三、構建編譯環境 現在我們得到的只是源代碼,只是許許多多的文本文件,要想使這些文件成為可以運行的程序,需要使用編譯器進行編譯以及鏈接。編譯器有很多,但在里linux下一般都使用gnu的開源編譯器套件,這里包括gcc等,現在我們安裝基本的編譯器套件,如圖所示: 四、安裝ncurses庫 這里使用Ubuntu系統,因為系統自帶的ncurses庫在支持make menuconfig的時候會出錯,所以,依然要安裝ncurses庫,這里我們從源碼安裝。首先去ncurses官網http://ftp.gnu.org/pub/gnu/ncurses/ 上下載源碼。這里我們下載5.9版本,並通過簡單的安裝方式.configure 和make、make install方式安裝。如下圖所示: 五、配置內核 一切准備工作做完,現在我們就可以配置內核了,這里我們使用make menuconfig方式。如下圖: 在使用make menuconfig這個命令後,會出現如下的字元界面,我們就可以在這個界面上對內核進行配置。但是如果這不是你第一次配置這個內核,那麼請先運行:make mrproper來清除以前的配置,回到默認配置,然後再運行:make menuconfig.
在這里,我們以對cpu支持的配置為例,其餘的選項就不一一詳述,首先查看本機的cpu類型,如下圖:
在這里我們可以看到,我的電腦的cpu是AMD Athlon的,因此我們在cpu選項裡面選用AMD,如下圖所示:
在這里需要注意的是:
A、 cpu的設置在linux內核編譯過程中,不是必需的,即使保持默認的386選項(我們剛才把它改成了AMD),內核也能正常運行,只不過運行慢一些而已。
B、 一般容易出問題的地方在於Device Driver的設置。我在一開始就遇到了在內核編譯完,通過grub引導系統過程中報 「ALERT! /dev/sda1 does not exist . Dropping to a shell!」的錯誤。這是因為硬碟驅動沒有配置好而造成的。運行lspci命令,查看到下面這行:
由此確定,需要配置SCSI、PCI-X、Fusion-MPT驅動,需要在響應的驅動選項里將[M]設置為[*],因為硬碟驅動是在系統開機的時候載入,所以不能以模塊形式載入。
把這幾個驅動內部的選項全部改為[*]:
六、編譯內核
對內核的配置完成之後,現在就可以開始編譯內核了,只需要一個簡單的make命令即可,之後我們就只能慢慢等,直到編譯完成,在我的電腦上,大概用了25分鍾。下圖是運行make後的部分輸出。
七、安裝內核
編譯完成之後,我們需要安裝內核,主要分為如下幾步:
1)、安裝模塊
安裝模塊,對於內核來說,每一個內核版本有自己的模塊目錄,默認在/lib/moles/內核版本號這個目錄下,make moles_install會創建對應的目錄,並把對應的模塊文件拷貝過去。注意,這一步必須要在編譯過內核再做。
2)、拷貝bzImage文件
bzImage文件是內核映像文件,是啟動內核所必需的,我們應當把它拷貝到/boot目錄下。在這里,我為自己新建了一個目錄,我們把它拷貝過去,並且按照一般內核映像文件的命名方式為它改名為vmlinuz-2.6.12。
3)、製作initrd文件
initrd文件命名為initrd.img-2.6.12
4)、修改grub啟動項
要能引導起我們的新系統,需要更改grub配置,增加啟動選項。ubuntu 5.10的grub版本比較低,配置文件為/boot/grub/menu.lst,高版本的grub可能在/boot/grub/grub.cfg里。在原有啟動項基礎上,添加我們自己的啟動項,並把它設為默認啟動項,配置如下:
5)重啟
不出意外的話,我們的內核已經正常載入了,運行uname -a,會發現,內核版本已經是2.6.12了。
❺ Linux的內核編譯是什麼意思
所有的軟體現在基本都是用高級語言編寫的,Linux
內核也不例外。Linux
內核是用
C
語言寫的。
但高級語言編寫的程序有個問題就是,源代碼是不能直接運行的。要麼用解釋語言解釋運行(功能限制很大,應用環境限制也很大),要麼就是通過編譯器經解釋編譯鏈接後成為計算機可以直接運行的計算機語言,也就是一般成為的二進製程序。
Linux的內核編譯就是用編譯器把
Linux
的內核源代碼編譯成可以被計算機運行的二進制代碼的行為。
當然
Linux
內核並不完全都是
C
語言寫的,還有一部分匯編語言,但匯編語言也需要編譯的。
❻ linux內核和應用程序是否需要編譯器一致
通常來說不需要。如果必須編譯器一致的話,那就大家都只能用gcc了。但事實上有不少應用是用Intel的編譯器編譯的,可以獲得更好的性能。
那個跟編譯內核的編譯器沒有關系,目標板上沒有gcc lib的問題而已……
你要用gcc的庫,目標板上沒有gcc,你又不想靜態編譯,典型的既要馬兒跑又要馬兒不吃草……
❼ linux內核編譯
include/linux/compiler.h:46: #error Sorry, your compiler is too old/not recognized.
編譯器太老或者無法設別
沒遇到過這樣的問題, 我只能說這樣有可能解決, 呵呵。
❽ 拿到了linux的內核 應該用什麼軟體 怎麼去編譯
1、你可以把linux內核代碼放到你的ubuntu或redhat之類的具有linux內核的操作系統裡面,然後在你指定的目錄裡面解壓你的內核源碼;
2、在主目錄裡面找到Makefile文件,修改裡面的「ARCH = 」和「CROSS_COMPILE」,也就是你的編輯器路徑,保存退出;
3、輸入make menuconfig配置你的內核參數,保存退出;
4、執行make zImage,你會看見屏幕嘩啦嘩啦的在運行,這是在生成內核zImage文件;
5、進入你的arch/(cpu型號)/root/裡面,你會看到zImage文件,這個就是你要的。
以上是最簡單的步驟,若想詳細了解,在網路裡面搜索「linux內核編譯」,會得到一大堆結果,記得一般只看文庫或者博客裡面的文章,因為質量比較好。
若需幫助,請追問!