make 時加參數 -jX
X 是你的 CPU 核心數量 +1 。
可以加快你的編譯速度。
我的本本 T5450 編譯需要 10 分鍾。我的內核是針對機器剪裁了的。不剪裁的全功能內核貌似我就需要 30 分鍾了。
⑵ 大家編譯一個x86的Linux內核需要多長時間
make
時加參數
-jX
X
是你的
CPU
核心數量
+1
。
可以加快你的編譯速度。
我的本本
T5450
編譯需要
10
分鍾。我的內核是針對機器剪裁了的。不剪裁的全功能內核貌似我就需要
30
分鍾了。
⑶ 編譯linux內核要多久 / 藍訊
根據我當時編譯、鏈接一個完整的 Linux 操作系統的內核的時間還是比較長的。尤其是你並不能夠保證在整個的編譯、鏈接一個完整的 Linux 操作系統內核過程中,一點兒錯誤都沒有,在此過程中有可能出現各種各樣的錯誤,這才是最、最煩人的事情,也是導致編譯內核時間延長的最根本原因。所以說,如果非要說出一個數量級的話,我那會兒編譯內核是在小時數量級上的(當然了,我那會兒使用的機器硬體配置也遠遠沒有現在的配置這么高)。
⑷ linux 內核怎麼列印系統時間戳
在編譯Linux內核,配置時:make menuconfig ---> Kernel hacking --> show timing information on printks
當選中這個選項後,啟動內核,會在日誌信息前面加上時間戳。
從下面的輸出可以看出,時間精確到微秒(us)。
如下:
-------------------------------------------------------------------------------------------
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.35.7+ (bshen@bamboo) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #109 PREEMPT Mon Nov 14 15:11:15 CST 2011
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
--------------------------------------------------------------------------------------------
⑸ 如何重新編譯linux內核
因為一般電腦安裝的系統都是Windows,而整個編譯過程都需要在Linux環境下實現,所以最好是在虛擬機里安裝Linux系統來完成這一過程。我使用的虛擬機是VMware-workstation-full-v7.1.4。
然後,我們需要下載一個較高版本的Linux系統的鏡像文件,安裝在虛擬機上,作為編譯環境。我使用的是ubuntu-11.04-desktop-i386。之所以選擇較高版本,是因為它的界面比較方便用戶操作。
然後下載一個Linux內核源代碼文件,將它保存到虛擬機上新安裝的系統中去。並解壓到/usr/src目錄。我使用的是linux-2.6.36,下載低版本的原因是,小巧輕便,易於編譯。
解壓命令如下:
bzip2 -d linux-2.6.36.tar.bz2
tar -xvf linux-2.6.36.ta
修改/usr/src/linux-2.6.36/kernel/sys.c文件,在文件末尾增加一個系統調用函數。自行編寫一個簡單的程序即可,只為測試用。
修改/usr/src/linux-2.6.36/arch/x86/kernel/syscall_table_32.S,為新添加的程序配置系統調用號。
在/usr/src/linux-2.6.36/arch/x86/include/asm/unistd_32.h中配置系統調用表。
下面就是最重要的內核編譯與安裝:
首先配置編譯信息,使其生成適合當前機器的Makefile,輸入make oldconf ig。
接著還要輸入make menuconfig,在字元界面下進行必要的細微的修改。
然後要經過四步編譯過程(直接輸入命令即可):
(1)make bzImage
將內核編譯為壓縮映像,存儲在源碼根目錄下的「System.map」文件中。
(2)make moles
編譯各個模塊。
(3)sudo make moles_install
安裝模塊
(4)sudo make install
安裝內核
第(2)(3)步等待時間較長,可能需要數個小時,請耐心等待。
無報錯的話重啟進入GRUB界面,就可以看到新編譯的內核了。
按回車鍵進入我們編譯的目標內核中,用關鍵詞搜索查看新增加的系統調用「my call」是否已在內核中:
編寫測試程序,調用新添加的系統調用:
測試成功,說明系統調用添加成功,進而說明內核編譯成功!
以上的辦法你可以試一下,希望對你有所幫助。
⑹ Linux內核源碼如何編譯
首先uname
-r看一下你當前的linux內核版本
1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname
-r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核
make
menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make
bzImage、make
moles、make
moles
4、安裝,make
install
5、.創建系統啟動映像,到
/boot
目錄下,執行
mkinitramfs
-o
initrd.img-2.6.36
2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於
/boot/grub/grub.cfg
文件的設置,找到if
[
"${linux_gfx_mode}"
!=
"text"
]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry
'Ubuntu,
with
Linux
3.2.0-35-generic'
--class
ubuntu
--class
gnu-linux
--class
gnu
--class
os
{
recordfail
gfxmode
$linux_gfx_mode
insmod
gzio
insmod
part_msdos
insmod
ext2
set
root='(hd0,msdos1)'
search
--no-floppy
--fs-uuid
--set=root
9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic
root=UUID=9961c170-2566-41ac-8155-18f231c1bea5
ro
quiet
splash
$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改
set
default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。
重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make
menuconfig這一步,改好後就萬事ok了。
最後再用uname
-r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?
打字不易,如滿意,望採納。
⑺ 請簡述嵌入式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 2.6.34內核編譯
Linux-2.6.34內核編譯指南
2010-06-11 22:45 作者:瑋琦 頁面排版:瑋琦
對linux內核的編譯來說是每個編譯者都必須掌握的一個階段,但是編譯內核是有相對一些難度的,也許你可能不知如何著手,請不必為此煩惱或者放棄,經過一些歸納和總結我編寫了比較詳細的步驟,從而可以為廣大的愛好者以及新手能帶來更好的幫助和深入的了解
一、下載內核
到www.kernel.org 下載新內核到 /usr/src
下載建議最好下載比當前已安裝版本高的內核我下載的是 linux-2.6.34.tar.bz2( 原來的內核是 2.6.18-128.e15-i686)
★ 我察看當前內核的版本
[root@localhost~]#uname -a
Linux localhost.localdomain 2.6.18-128.e15-i686 #1 SMP Tue Jun 8 10:30:55 CST 2010 i686 i686 i386 GNU/Linux
然後將其解壓到/usr/src目錄下,使用下面的命令解壓得到linux-2.6.34:
[root@localhost~]#tar -jxvf linux-2.6.34.tar.bz2
[root@localhost~]#bzip2 -d linux-2.6.34.tar.bz2
如果所下載的是.tar.gz(.tgz)文件,請使用下面的命令:
[root@localhost~]#tar -zxvf linux-2.6.34.tar.gz
為了不把原來的目錄覆蓋掉所以呢在當前路徑下做一個鏈接為linux:
[root@localhost~]#ln -s /usr/src/linux-2.6.34 /usr/src/linux
二、配置內核
[root@localhost~]#make clean 清除原有不需要的模塊和文件(垃息)
[root@localhost~]#make mrproper 清理源代碼數
[root@localhost~]#make menuconfig 基於ncurse的圖形配置界面,可以在文本下以菜單方式,進行配置。
Load an Alternate Configuration File,導入.config文件
註:內核配置有兩種方法,一種是直接置入內核* ;另一種是編成模塊M ;兩種方法各有優點;直接編入內核的,比如設備的啟動,不再需要載入模塊的這一過程了;而編譯成模塊,則需要載入設備的內核支持的模塊;但直接把所有的東西都編入內核也不是可行的,內核體積會變大,系統負載也會過重。我們編內核時最好把極為重要的編入內核;其它的如果您不明白的,最好用默認.
移動鍵盤上下左右鍵,按Enter 進入一個目錄。把指針移動到Exit就退出當前目錄到上級目錄;
下面圖形界面藍色區域為選擇區:
General setup -→
[*] Enable loadable mole support --->
-*- Enable the block layer -→
Processor type and features --->
Power management and ACPI options --->
Bus options (PCI etc.) --->
Executable file formats / Emulations --->
-*- Networking support --->
Device Drivers -→
Firmware Drivers --->
File systems --->
Kernel hacking -→
Security options --->
-*- Cryptographic API -→
[*] Virtualization -→
Library routines --->
---
Load an Alternate Configuration File
Save an Alternate Configuration File
<Select> < Exit > < Help >
修改完畢選擇Save an Alternate Configuration File,然後退出配置
[root@localhost~]#cp ../kernels/2.6.18-128.e15-i686/.config /usr/src
★ 編輯配置文件.config
[root@localhost~]#vim .config
找到105行的"#CONFIG_SYSFS_DEPRECATED is not set"改為"CONFIG_SYSFS_DEPRECATED=y" 保存
假如不修改該行,在升級重新啟動後會報如下的錯,導致啟動失敗
Volume group "VolGroup00" not found
Unalbe to access resume device (/dev/VolGroup00/LogVol00)
mount: could not find filesystem '/dev/root'
setuproot:moving /dev failed: No such file or directory
setuproot:error mounting /proc: No such file or directory
setuproot:error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing:Attempted to kill init!
★ 編譯開始,大概需要半個小時到一個小時的時間自己可以倒杯涼茶耐心候。
[root@localhost~]#make
★ 編譯外掛模塊和需要載入的模塊安裝
[root@localhost~]#make moles && make moles_install
這時候會出現3個警告[2]
WARNING: No mole dm-mem-cache found for kernel 2.6.34, continuing anyway
WARNING: No mole dm-message found for kernel 2.6.34, continuing anyway
WARNING: No mole dm-raid45 found for kernel 2.6.34, continuing anyway
經過測試,這3個警告不會影響內核的升級
★ 編譯系統內核且生成新的內核文件
[root@localhost~]#make bzImage
[root@localhost~]#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.34
[root@localhost~]#mkinitrd /boot/initrd-2.6.34.img 2.6.34
[root@localhost~]# cp /boot/initrd-2.6.34.img /tmp
[root@localhost~]#cd /tmp/
[root@localhost~]#ls
[root@localhost~]#initrd-2.6.34.img
[root@localhost~]#mkdir newinitrd
[root@localhost~]# cd newinitrd/
[root@localhost~]# zcat ../initrd-2.6.34.img |cpio -i
[root@localhost~]# ls
bin dev etc init lib proc sbin sys sysroot
[root@localhost~]#vim init
★ 刪掉重復的兩行,有些情況下是沒有就不要執行
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
★ 重新打包initrd
[root@localhost~]# find .|cpio -c -o > ../initrd
[root@localhost~]# cd ..
[root@localhost~]# gzip -9 < initrd > initrd-2.6.34.img
★ 將initrd重新復制到/boot目錄下
[root@localhost~]#cp initrd-2.6.34.img /boot
★ 給 /boot/grub/grub.conf中添加一個新的啟動項,
[root@localhost~]#vim /boot/grup/grup.conf
如我的 grub.conf 增加了
如下一段文字
title Red Hat(2.6.34)
root (hd0,5)
kernel /boot/vmlinuz-2.6.34 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.34.img
三、重新起動
[root@localhost~]# reboot
★ 啟動成功後查看當前內核版本號
[root@localhost~]#uname -r
2.6.34
四、待解決的問題
★ Iptables啟動失敗
操作系統啟動過程中出現下面的錯誤信息:
Applying ip6tables firewall rules: ip6tables-restore v1.3.5: ip6tables-restore:unable to initalizetable 'filter'
Error accurred at line: 3
Try "ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
Applying iptables firewall rules: iptables-restore v1.3.5: iptables-restore:unable to initalizetable 'filter'
Error accurred at line: 3
Try "iptables-restore -h' or 'iptables-restore --help' for more information.
啟動後嘗試手動啟動防火牆:
[root@localhost~]#service iptables status
防火牆已停
[root@localhost~]#service iptables start
正在卸載 Iiptables 模塊:[確定]
應用 iptables 防火牆規則:iptables-restore v1.3.5: iptables-restore: unable to initializetable 'filter'
Error occurred at line: 3
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[失敗]
★ Hidd(Bluetooth HID daemon)啟動失敗
Starting hidd: Can't open HIDP control socket: Address family not supported by protocol [FAILED]
[root@localhost~]# service hidd status
hidd 已死,但是 subsys 被鎖
[root@localhost~]# service hidd start
正在啟動 hidd:Can't open HIDP control socket: Address family not supported by protocol