linux內核編譯時間
make
時加參數
-jX
X
是你的
CPU
核心數量
+1
。
可以加快你的編譯速度。
我的本本
T5450
編譯需要
10
分鍾。我的內核是針對機器剪裁了的。不剪裁的全功能內核貌似我就需要
30
分鍾了。
❷ 請簡述嵌入式linux內核的編譯過程
編譯及安裝簡要步驟:
編輯Makefile版本信息
定義內核特性,生成配置文件.config,用於編譯:make xconfig
編譯內核:make
安裝內核:make install
安裝模塊:make moles_install
具體步驟如下:
內核配置
先定義內核需要什麼特性,並進行配置。內核構建系統(The kernel build system)遠不是簡單用來構建整個內核和模塊,想了解更多的高級內核構建選項,你可以查看 Documentation/kbuild 目錄內的內核文檔。
可用的配置命令和方式:
make menuconfig
命令:make menuconfig
編譯內核
編譯和安裝內核
編譯步驟:
$ cd /usr/src/linux2.6
$ make
安裝步驟 (logged as
$ make install
$ make moles_install
提升編譯速度
多花一些時間在內核配置上,並且只編譯那些你硬體需要的模塊。這樣可以把編譯時間縮短為原來的1/30,並且節省數百MB的空間。另外,你還可以並行編譯多個文件:
$ make -j <number>
make 可以並行執行多個目標(target)(KEMIN:前提是目標規則間沒有交叉依賴項,這個怎麼做到的?)
$ make -j 4
即便是在單處理器的工作站上也會很快,讀寫文件的時間被節省下來了。多線程讓CPU保持忙碌。
number大於4不見得有效了,因為上下文切換過多反而降低的工作的速度。
make -j <4*number_of_processors>
內核編譯tips
查看完整的 (gcc, ld)命令行: $ make V=1
清理所有的生成文件 (to create patches...): $ make mrproper
部分編譯:$ make M=drivers/usb/serial
單獨模塊編譯:$ make drivers/usb/serial/visor.ko
最終生成的文件
vmlinux 原始內核鏡像,非壓縮的
arch/<arch>/boot/zImage zlib壓縮的內核鏡像(Default image on arm)
arch/<arch>/boot/bzImage bzip2壓縮的內核鏡像。通常很小,足夠放入一張軟盤(Default image on i386)
❸ 編譯linux內核要多久 / 藍訊
根據我當時編譯、鏈接一個完整的 Linux 操作系統的內核的時間還是比較長的。尤其是你並不能夠保證在整個的編譯、鏈接一個完整的 Linux 操作系統內核過程中,一點兒錯誤都沒有,在此過程中有可能出現各種各樣的錯誤,這才是最、最煩人的事情,也是導致編譯內核時間延長的最根本原因。所以說,如果非要說出一個數量級的話,我那會兒編譯內核是在小時數量級上的(當然了,我那會兒使用的機器硬體配置也遠遠沒有現在的配置這么高)。
❹ 如何編譯linux的x86內核
Gcc編譯器, Linux-2.6.29內核
步驟:
(一):清除臨時文件,中間文件和配置文件等(剛從網上下載下來的文件這步可省略)。
make clean
刪除大多數的由編譯生成的文件、但會保留內核的配置文件.config。
make mrproper
刪除所有的編譯生成的文件,還有內核配置文件,再加上各種備份文件。
make distclean
mrproper刪除的文件,加上編輯備份文件和一些補丁文件。
(二)選擇參考配置文件
使用正在運行的內核配置文件作為參考配製文件,該配置文件在/boot目錄下,使用命令
cp /boot/config-2.6.18-53.el5 .config。
(三)配置內核
配置內核有如下命令:
make config:基於文件模式的互動式配置(也就是一問一答)。
make menuconfig:基於文本模式的菜單式配置(強烈推薦)。
make oldconfig:使用已有的配置文件(.config)但是會詢問新增的配置選項。
make xconfig:圖形化配置(需要安裝圖形化系統)。
make menuconfig是最為常用的內核配置方式,使用方法如下:
1、使用方向鍵在各選項間移動;
2、使用「Enter」鍵進入下一層選單;每個選項上的高亮字母是鍵盤快捷方式,使用它可以快速地到達想要設置的選單項。
3、在括弧中按「y」將這個項目編譯進內核中,按「m」編譯為模塊,按「n」為不選擇(按空格鍵也可在編譯進內核、編譯為模塊和不編譯三者間進行切換),按「h」將顯示這個選項的幫助信息,按「Esc」鍵將返回到上層選單。
內核配置通常在一個已有的配置文件基礎上,通過修改得到新的配置文件Linux內核提供了一系列可供參考的內核配置文件,位於Arch/$cpu/configs
注意:要運行make menuconfig的界面需要調整終端的窗口大小,至少為80*19。
(四)編譯內核
(1):make zImage
(2):make bzImage
區別:在X86平台,在zImage只能用於小於512Kd的內核(注意是X86平台)
如需獲取詳細編譯信息,可使用:
make zImage V=1
make bzImage V=1
編譯好的內核位於arch/<cpu>/boot目錄下
(五)編譯內核模塊
使用命令make moles
內核模塊編譯的時間比較長,一般需要1~2小時的時間。這些模塊源於使用命令make menuconfig啟動的菜單型配置界面中選擇<m>的項。
(六)安裝內核模塊
使用命令:make moles_install,完成安裝後,編譯好的內核模塊會從內核源代碼目錄拷貝至/lib/moles/2.6.29目錄下。
(七)製作init ramdisk
使用cd跳動linux-2.6.29/,目錄的上層目錄,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)將上一步中產生的模塊目錄/lib/moles/2.6.29製作成initrd-2.6.29。
提示:initrd是「initial ramdisk」的縮寫,initrd是在實際根文件系統可用之前掛載到系統中的一個初始根文件系統。在桌面或伺服器Linux系統中,initrd是一個臨時的文件系統。其生命周期很短,只會用作真實文件系統的一個橋梁。在沒有存儲設備的嵌入式系統中,initrd可以是永久的根文件系統。
Linux的眾多發行版之所以使用initrd主要是為了在內核啟動之後能夠判斷哪些硬體驅動需要載入,哪些不需要,文件系統有沒有問題等,最終使得根分區能順利載入。在scsi和sata設備上啟動,usb啟動盤,無盤伺服器等都需要initrd來做判斷,這樣可以提高Linux內核的通用性。
(八)安裝內核
由於Linux系統啟動時,會從/boot目錄下尋找內核文件與init ramdisk,所以需要將內核和initrd拷貝至/boot目錄。使用命令:
cp initrd-2.6.29 /boot
cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
(九)修改/etc/grub.conf或者/etc/lilo.conf
為了讓grub在啟動時能提供一項我們自己製作的linux內核的選項,需要修改grub的配置文件/etc/grub.conf。(添加的代碼為title My Linux(2.6.29)以下的)
注意:/etc/grub.conf實際上是/boot/grub/grub.conf的一個鏈接,因此真正的配置文件存在與/boot/grub目錄下。
❺ 編譯linux內核要多久
至於說編譯 Linux 內核需要多長時間,這個和電腦的整體性能(例如:CPU主頻、內存大小等)有很大關系。我的親身體會就是:計算機性能差的,編譯 Linux 內核需要一個多小時的都有(以前在老舊的電腦上就需要這么長的時間)。
❻ 哪裡可以下載Linux系統的的源代碼編譯要多久編譯安裝的比直接安裝的性能高多少
源代碼從 https://www.kernel.org 取。
編譯的時間因人而異,也因系統不同而異,除了特別熟悉的,大多數人都要用幾個小時。一個是配置的時候要閱讀很多幫助信息,這要花很多時間,另一個就是編譯本身也需要很長的時間。
編譯的性能取決於你的配置。你對自己的機器的硬體了解得准確,配置的時候把不需要的選項都去掉;你對自己的軟體目標比較明確,該要的選項都選擇進來,這樣得到的內核性能自然會好。要是上述兩條做不到,其結果可能還不如直接安裝的內核好。
❼ linux 什麼時候需要編譯內核
和其他的開源軟體一樣,不考慮參數配置的情況下,就是直接在源碼目錄下執行:make之後執行:makeinstall就安裝好了,在重啟時就可以選擇不同的內核。內核源碼相比其他開源軟體配置項會多很多,因為它支持很多硬體,一般需要:makemenuconfig進行配置,多看看也就了解了。深入學習linux看下《linux就該這么學》
❽ linux編譯內核步驟
一、准備工作
a) 首先,你要有一台PC(這不廢話么^_^),裝好了Linux。
b) 安裝好GCC(這個指的是host gcc,用於編譯生成運行於pc機程序的)、make、ncurses等工具。
c) 下載一份純凈的Linux內核源碼包,並解壓好。
注意,如果你是為當前PC機編譯內核,最好使用相應的Linux發行版的源碼包。
不過這應該也不是必須的,因為我在我的Fedora 13上(其自帶的內核版本是2.6.33.3),就下載了一個標準的內核linux-2.6.32.65.tar.xz,並且順利的編譯安裝成功了,上電重啟都OK的。不過,我使用的.config配置文件,是Fedora 13自帶內核的配置文件,即/lib/moles/`uname -r`/build/.config
d) 如果你是移植Linux到嵌入式系統,則還要再下載安裝交叉編譯工具鏈。
例如,你的目標單板CPU可能是arm或mips等cpu,則安裝相應的交叉編譯工具鏈。安裝後,需要將工具鏈路徑添加到PATH環境變數中。例如,你安裝的是arm工具鏈,那麼你在shell中執行類似如下的命令,假如有類似的輸出,就說明安裝好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
註:arm的工具鏈,可以從這里下載:回復「ARM」即可查看。
二、設置編譯目標
在配置或編譯內核之前,首先要確定目標CPU架構,以及編譯時採用什麼工具鏈。這是最最基礎的信息,首先要確定的。
如果你是為當前使用的PC機編譯內核,則無須設置。
否則的話,就要明確設置。
這里以arm為例,來說明。
有兩種設置方法():
a) 修改Makefile
打開內核源碼根目錄下的Makefile,修改如下兩個Makefile變數並保存。
ARCH := arm
CROSS_COMPILE := arm-linux-
注意,這里cross_compile的設置,是假定所用的交叉工具鏈的gcc程序名稱為arm-linux-gcc。如果實際使用的gcc名稱是some-thing-else-gcc,則這里照葫蘆畫瓢填some-thing-else-即可。總之,要省去名稱中最後的gcc那3個字母。
b) 每次執行make命令時,都通過命令行參數傳入這些信息。
這其實是通過make工具的命令行參數指定變數的值。
例如
配置內核時時,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
編譯內核時使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,實際上,對於編譯PC機內核的情況,雖然用戶沒有明確設置,但並不是這兩項沒有配置。因為如果用戶沒有設置這兩項,內核源碼頂層Makefile(位於源碼根目錄下)會通過如下方式生成這兩個變數的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=
經過上面的代碼,ARCH變成了PC編譯機的arch,即SUBARCH。因此,如果PC機上uname -m輸出的是ix86,則ARCH的值就成了i386。
而CROSS_COMPILE的值,如果沒配置,則為空字元串。這樣一來所使用的工具鏈程序的名稱,就不再有類似arm-linux-這樣的前綴,就相當於使用了PC機上的gcc。
最後再多說兩句,ARCH的值還需要再進一步做泛化。因為內核源碼的arch目錄下,不存在i386這個目錄,也沒有sparc64這樣的目錄。
因此頂層makefile中又構造了一個SRCARCH變數,通過如下代碼,生成他的值。這樣一來,SRCARCH變數,才最終匹配到內核源碼arch目錄中的某一個架構名。
SRCARCH := $(ARCH)
ifeq ($(ARCH),i386)
SRCARCH := x86
endif
ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif
ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif
ifeq ($(ARCH),sh64)
SRCARCH := sh
endif
三、配置內核
內核的功能那麼多,我們需要哪些部分,每個部分編譯成什麼形式(編進內核還是編成模塊),每個部分的工作參數如何,這些都是可以配置的。因此,在開始編譯之前,我們需要構建出一份配置清單,放到內核源碼根目錄下,命名為.config文件,然後根據此.config文件,編譯出我們需要的內核。
但是,內核的配置項太多了,一個一個配,太麻煩了。而且,不同的CPU架構,所能配置的配置項集合,是不一樣的。例如,某種CPU的某個功能特性要不要支持的配置項,就是與CPU架構有關的配置項。所以,內核提供了一種簡單的配置方法。
以arm為例,具體做法如下。
a) 根據我們的目標CPU架構,從內核源碼arch/arm/configs目錄下,找一個與目標系統最接近的配置文件(例如s3c2410_defconfig),拷貝到內核源碼根目錄下,命名為.config。
注意,如果你是為當前PC機編譯內核,最好拷貝如下文件到內核源碼根目錄下,做為初始配置文件。這個文件,是PC機當前運行的內核編譯時使用的配置文件。
/lib/moles/`uname -r`/build/.config
這里順便多說兩句,PC機內核的配置文件,選擇的功能真是多。不編不知道,一編才知道。Linux發行方這樣做的目的,可能是想讓所發行的Linux能夠滿足用戶的各種需求吧。
b) 執行make menuconfig對此配置做一些需要的修改,退出時選擇保存,就將新的配置更新到.config文件中了。
注
❾ linux 內核裁剪 + linux驅動,一般需要多少時間
內核裁剪熟悉了十幾分鍾搞定,要是不熟悉,就要很久了,因為內核也分目錄的,每目錄下的每項都要明白是干什麼的才能取捨。驅動一般包含在內核內,linux系統通過內核管理設備,外部安裝的較少。
我常用menuconfig來編譯內核。在gentoo系統下有genkernel軟體,更方便一些。當然,gentoo系統安裝起來不方便。
❿ ubuntu下怎麼編譯linux內核
Ubuntu 系統
1. 准備工作
切換為管理員許可權,sudo –i 輸入用戶密碼 進入root 許可權
apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
build-essential (基本的編程庫(gcc, make 等)
kernel-package (Debian 系統里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig 要調用的)
libqt3-headers (make xconfig 要調用的)
2. 下載特定版本的內核源代碼
3. 復制源碼linux-3.2.12.tar.bz2 到/usr/src 目錄,解壓縮
命令.假設源碼存放在/home 目錄下
cp /home/linux-3.2.12.tar.bz2 /usr/src
cd /usr/src
tar xvjf linux-3.2.12.tar.bz2
解壓後生成 linux-3.2.12 目錄
4. cd linux-3.2.12
接下來配置內核選項
make menuconfig 這一步比較復雜,內核選項很多,可以使用當前內核的配置選項,
但編譯內核的時間會比較長,因為裝系統的時候使用的配置是適應大多數系統的,非定
制選項。關於內核配置選項怎麼定製,網上很多。
5. 把正在使用系統中的內核配置文件/usr/src/linux-headers-2.6.38-13-generic/.config 拷到
/usr/src/linux-3.2.12 目錄下
cp /usr/src/ linux-headers-2.6.38-13-generic/.config /usr/src/ linux-3.2.12
執行:
cd /usr/src/ linux-3.2.12
make menuconfig
終端會彈出一個配置界面
注意主菜單最後有兩項:
load a kernel configuration…
save a kernel configuration…
先選第一項load ….,意思是,利用當前的內核配置詳單來設置將要編譯的內核,然後選save 這一項保存,最後退出配置界面
6. 開如編譯安裝新內核
執行:make mrproper (清除以前曾經編譯過的舊文件,如果是第一次編譯,可不執行)
執行:make (編譯,加-j4,必須加,雙核並行編譯,速度快很多,不過使用原先配置
選項)
然後:make install
再:make moles (編譯模塊)
再:make moles_install (安裝模塊)
最後創建initrd 文件:
mkinitramfs -o /boot/initrd.img-linux-3.2.12
7. make install 以後,系統自動更新了啟動項,可以cat /boot/grub/grub.cfg 看下.之前的啟動項不能刪除,如果編譯內核不成功,之前的啟動項又不見了,系統也就跪了
8. reboot