聯機編譯內核
一、編譯環境
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了。
⑵ 怎樣ubuntu環境下編譯內核詳解
步驟/方法
一、下載源代碼和編譯軟體的准備
下載內核源代碼:http://www.kernel.org/
注意,點擊2.6.25內核的F版,即完整版。
如果你懶得去網站點聯接,運行下列命令:
代碼:$cd ~$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.10.tar.bz2
安裝有關編譯程序。安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯內核相關的工具。安裝不了,請檢查/etc/apt/sources.list 文件。有關命令:代碼:$sudo apt-get install build-essential kernel-package libncurses5-dev
二、解壓源代碼注意,網上很多教程上說應該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當然,linus的說法是正確的。我放在自己的主目錄下的src目錄。如果你下載源代碼是放到自己的主目錄下或者運行上面的wget下載的,那麼運行下列命令:代碼:$ cd ~$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/現在,源代碼就在 ~/src/linux-2.6.25.10進入源代碼的目錄,准備下一步的工作。後面都在這個目錄裡面進行。代碼:$ cd ~/src/linux-2.6.25.10
三、開始編譯前的准備工作。首先,清理以前編譯時留下的臨時文件。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。相關命令如下:代碼:$ sudo make mrproper網上很多教程上說把現在使用的內核的config拷貝過來參考,據實驗,是不需要的,ubuntu還有debian會自動做這步。不過這條命令倒是可以學習一下。當然你可以將以前的配置拷貝過來。命令:代碼:cp /boot/config-`uname -r` ./.config
四、開始配置內核選項。相關命令:代碼:$sudo make menuconfig配置用到的鍵只有幾個,esc退出菜單;空格改變選項狀態;游標鍵上下左右移動,回車選定。選項意義:M是編譯成可以隨時加入的模塊,*是編譯進入內核,空就是不要。配置選項非常多,具體配置可以參考金步國先生翻譯的資料:Linux 2.6.19.x 內核編譯配置選項。參考網址:http://lamp.linux.gov.cn/Linux/kernel_options.html為了一次成功,請大家遵循一個原則,如果你自己使用的內核已經選用了某個選項,如果你沒用充分的理由,不要隨便改動。這樣雖然內核不那麼精簡,但是不容易出現問題。我們可以精簡的部分是硬體模塊部分,對於自己沒有的硬體要毫不猶豫的清除。如果你很執著,或者你有潔癖,你也可以一項項對過去,按照金步國先生的資料描述去選擇基本上沒有問題。
五、必須強調的幾個選項:1、
在「General setup」裡面的「Prompt for development and/or incomplete
code/drivers」金步國認為是不需要。但是如果你的硬體比較新,那幾乎是必須選的,這樣,我們才可以找到4965無線網卡,alsa聲音驅動等
等。Kernel log buffer size 我選15,雙核。如果你用ia64,要選16。Control Group support 集群支持?可以不要Choose SLAB allocator (SLUB (Unqueued Allocator)) 內存管理模式slab和slub選擇slub。
2、在「Block layer」里,假如沒有2TB的硬碟,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,誰有2TB的文件?
3、Processor type and features中是關於cpu的,要認真選。Symmetric multi-processing support是打開多核的開關,我的cpu是雙核的,選中。Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu後,把Generic x86 support選項取消。Subarchitecture Type 選(PC-compatible)Maximum number of CPUs 輸入自己的核心數目,我輸入2。SMT (Hyperthreading) scheler support說的是超線程技術,P4有支持的,我的t8100不支持,目前大部分市場上的家用cpu都不支持。High Memory Support (4GB) 1G以下選1G;我是3G,選4G;4G以上的選16G在「 Timer frequency 」里,默認是250Hz,較新的cpu都可以選擇了1000Hz,性能更好。
4、Power management options中把APM (Advanced Power Management) BIOS support關閉。現在的電腦都用acpi了。CPU Frequency scaling 是筆記本cpu節電技術Default CPUFreq governor (conservative) cpu節電模式有四個,筆記本默認選conservative比較好。ACPI Processor P-States driver 必須選,不然CPU Frequency就不能用。後面的可選自己硬體相關的,我選的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的統統消滅。
5、Bus options的選擇:Bus options (PCI, PCMCIA, EISA, MCA, ISA)PCI support PCI Express support 現在新買的機器基本上都是PCI Express了ISA support 較新的新機器沒有ISA設備,可以去掉MCA support 去掉NatSemi SCx200 support 去掉PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果沒有PCI熱插拔設備,去掉這里的選項可以考慮全部編譯進內核,而不是以模塊形式存在。
6、Device Drivers是重點,由於linux不但面向個人工作站,更多的是面向伺服器的應用,所以可以把自己機器上沒有的硬體全部去掉,而不用面面俱到。但是通用型的選項要慎重。比如在網卡的部分,除了我的千兆網卡 Broadcom Tigon3 support和4965無線網卡Intel Wireless WiFi 4965AGN,其餘的硬體支持統統去掉。再比如音效卡部分,我的是hd音效卡,我只是在PCI devices中,選intel hd 音效卡,再選Build IDT/Sigmatel HD-audio codec support,除此之外的硬體支持全部去掉。
音效卡還有一個細節,在ubuntu7.10裡面, 需要在/etc/modprobe.d/alsa-base後面添加options
snd-hda-intel probe_mask=1
model=3stack,這樣我的筆記本喇叭才可以發聲,不然只有外接耳機或者音箱。這次編譯以後,這個動作就不必了,但是兩個耳機插口只有一個可以用
了。再比如我的電腦中沒有agp,就可以直接把agp相關的選項全部取消。要注意的:ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬碟上,那麼這里一定要選*,選M都不行。否則啟動時會出現「waiting for root file system」的提示而停滯不前。 SCSI emulation support 要用刻錄機,必須選。SCSI device support 現在都是SATA硬碟,一定要選* SCSI disk support 如果你的/boot放在SATA硬碟上,一定要選*。
SCSI CDROM support 雖然康寶刻錄機是ide介面的,但是必須把它當成scsi介面的,這是老問題了。用刻錄機,必須選。
Graphics supportSupport for frame buffer devices 選中,進入選擇 VESA VGA graphics support 選上,不然字元界面啟動會有問題,後面的顯卡選擇:由於我的顯卡是nvidia 8400gs,要自己安裝nvidia公司的驅動,所以一個都沒有選。這樣導致ubuntu開機動畫會出問題,我索性在grub中的splash字元全部刪除,把開機動畫關閉。字元界面很正常。 Console display driver support 有人開機後字元控制台錯誤,就是這部分選項沒有選,出問題了。 Framebuffer Console support 需要打開。
Bootup logo 開機圖標,會在自檢的畫面上加上個性圖標。需要在grub上添加「vga=」的選項,可以參考http://dotimes.com/articles /t23-slackware-framebuffer.html7、File systemsFilesystem in Userspace support 簡稱fuse。是必選的,如果你要用windows分區。
CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般選*DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分區就選*吧 NTFS file system support 有NTFS分區就選*吧 NTFS write support 如果想對 NTFS分區進行寫操作,選*必須將啟動盤的文件系統編譯進內核,默認是編譯成模塊,這樣無法啟動系統。ubuntu採用的文件系統是ext3,請把ext2,ext3相關的必要選項都編譯進入內核。
8、Virtualization這個大類是我多花幾百元買t8100的主要原因,因為t8100支持intel vt技術使linux上的虛擬機的性能大幅度提高。這里的選項我除了amd的,其他都編譯成模塊。
9、全部設置完成,最後一項是保存設置。按照我的習慣,先在上一層目錄保存一個備份,文件名類似 ../config20080630然後再保存到當起目錄,文件名 .config退出設置程序。
六、開始編譯內核。ubuntu的工具是make-kpkg,和其他的發行版相比,步驟相對簡單。相關命令:代碼:$sudo make-kpkg clean 這條命令好像不要超級許可權,很多資料上說要,不過這不是原則問題。
$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers上述命令中的dell1400可以用自己喜歡的字元代替,最後的字元一定是數字.輸完上述命令回車之前,建議大家把瀏覽器還有別的運用程序都關掉,機器開始的工作比較艱苦。
我的機器大概十幾分鍾。
七、安裝內核編譯完成就是安裝工作。編譯好的內核在上一層目錄。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb兩個文件,如果你不搞開發的話,只要安裝內核就可以,頭文件以後要用的時候再說。安裝相關命令:
代碼:$ cd ..$ sudo dpkg -i linux-image-(按tab鍵)文件名很長,如果不用tab自動補足是不可能的,tab鍵萬歲。安裝完成後和老內核比較一下大小代碼:
$ ls -l /boot/
八、重新啟動驗證新內核。代碼:$ sudo reboot
九、顯卡驅動如果你的顯卡和我一樣是nvidia顯卡,啟動之後往往無法正常進入x-window。即使能看到gdm登錄界面,效果也是很差的。那麼就要安裝nvidia驅動。用ctrl+alt+f1 進入字元命令行,輸入用戶名,密碼登錄。命令:代碼:下載驅動$ wget http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run$sudo -s輸入密碼取得超級許可權。#ps ax看看和gdm相關的進程,把這些進程全部關閉;用sudo /etc/init.d/gdm stop有可能有一個進程沒有關閉:#kill 進程號然後安裝nvidia顯卡驅動,當然驅動要先下好,到nvidia驅動所在的目錄里,運行:# sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run重新啟動以後就ok。要用nvidia的驅動,每次升級內核都要這么做。
十、無線網卡相關的內核選項是Networking --->Wireless --->Generic IEEE 802.11 Networking Stack (mac80211)還有4965的驅動。4965
無線網卡驅動雖然已經編入內核,但沒有firmware無法使用。需要把原來內核的firmware拷貝到新內核對應的目錄,名字和內核一致,我的內核是
linux-image-2.6.25.10dell1400,那建的目錄名就是2.6.25.10dell1400。代碼:具體命令:$ cd /lib/firmware/$ sudo mkdir 2.6.25.10dell1400把你的老內核中的4965的firmware拷貝過來。$ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/上面的命令和下面的命令是等價的:$ cd /lib/firmware/$ sudo cp -R 2.6.24-16-generic/ 2.6.25.10dell1400/
重新啟動系統,無線網卡就正常了。
附編譯使用的機器配置:dell vostro 1400,t8100,nvidia 8400cs顯卡,內置SigmaTel STAC9228晶元的音效卡,4965無線網卡,BCM5906M千兆網卡,3G內存,160G硬碟,combo刻錄。
編譯系統版本:ubuntu 8.04桌面版.
⑶ 如何編譯Linux內核
內核配置完成,輸入make命令即可開始編譯內核。如果沒有修改Makefile文件並指定ARCH和CROSS_COMPILE參數,則須在命令行中指定:
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
目前大多數主機都是多核處理器,為了加快編譯進度,可以開啟多線程編譯,在make的時候加上「-jN」即可,N的值為處理器核心數目的2倍。例如對於I7 4核處理器,可將N設置為8:
$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j8
採用多線程編譯的優點是能加快編譯進度,。具體可以參照ZLG《嵌入式Linux開發教程(下冊)》第1章。
⑷ 什麼叫做內核編譯,為什麼要進行內核編譯呢
對開源操作系統(主要是指Linux)的內核源代碼在本機進行有針對性的編譯,就叫做內核編譯。
編譯內核的目的主要是改變內核的默認選項,比如內核原來不支持某硬體,原因是內核的相應選項默認狀態是disactivated,需要改變。
當然,也有人把新版的linux裝在舊機子上。這樣,許多在內核里activated的硬體,他沒有,將來也不需要。那麼,就可以在內核里去掉。以及一些服務、特殊的功能等等,如果用不著,比如機子是伺服器的話,最好在內核里關掉,"精兵簡政"。這是以系統安全和提高效率為目的。
有專門的工具對其進行編譯。這個問題不是幾句話能說明白的。看你的提問就知道你是剛剛學習這些內容,建議不要好高騖遠,先把c語言學好,然後再研究這些東西。
歡迎訪問我的論壇:)
http://www.chinesebloger.com
期待您的支持:)
⑸ Linux內核配置與編譯相關流程
linux內核配置與編譯相關流程1、清除臨時文件、中間文件和配置文件
make
clean
不刪除配置文件。
make
mrproper
make
distclean
刪除編輯的backup文件、補丁文件等2、確定目標系統的軟硬體配置情況,比如CPU的類型,網卡的型號,所需要支持的網路協議。3、使用命令配置內核
make
config
基於文本模式的交互配置。
make
menuconfig
基於文本模式的菜單配置。
make
oldconfig
使用已有的配置文件(.config),但是會詢問新增的配置選項。
make
xconfig
圖形化的配置(需要安裝圖形化系統)。4、編譯內核
make
zImage
make
bzImage
區別:在X86平台上,zImage只能用於小雨512k內核。如果需要獲取詳細編譯信息,則在後面加上V=1.
編譯好的內核位於arch/<cpu>/boot/目錄下。
5、編譯內核模塊
make
moes
6、安裝內核模塊
make
moes_install
將編譯好的內核模塊從內核源代碼目錄到/lib/moes下。7、製作
init
ramdisk
mkinitrd
$initrd-$version
-$version內核安裝(X86)1、cp
arch/X86/boot/bzImage
/boot/vmliuz
-$version2、cp
$initrd
/boot/3、修改etc/grub.conf
或
/etc/lilo.conf$version為所編譯的內核版本號。
⑹ 如何編譯安裝新內核
一、獲取內核源碼
二、解壓內核源碼
首先以root帳號登錄,然後進入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內核的源代碼,則會發現一個linux-x.y.z的子目錄。該目錄下存放著內核x.y.z的源代碼。此外,還會發現一個指向該目錄的鏈接linux。刪除該連接,然後將新內核的源文件拷貝到/usr/src目錄中,並解壓:
# tar zxvf Linux-2.3.14.tar.gz
文件釋放成功後,在/usr/src目錄下會生成一個linux子目錄。其中包含了內核2.3.14的全部源代碼。 將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。
# cd /usr/include
# rm -Rf asm linux
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
刪除源代碼目錄中殘留的.o文件和其它從屬文件。
# cd /usr/src/linux
# make mrproper
三.增量補丁
有時不需要完全重新安裝,只需打增量補丁,類似升級,在內核源碼樹根目錄運行:
patch-p1< ../patch-x.y.z
四.內核源碼樹目錄:
arch:包含和硬體體系結構相關的代碼,每種平台佔一個相應的目錄。和32位PC相關的代碼存放在i386目錄下,其中比較重要的包括kernel(內核核心部分)、mm(內存管理)、math-emu(浮點單元模擬)、lib(硬體相關工具函數)、boot(引導程序)、pci(PCI匯流排)和power(CPU相關狀態)。
block:部分塊設備驅動程序。
crypto:常用加密和散列演算法(如AES、SHA等),還有一些壓縮和CRC校驗演算法。
Documentation:關於內核各部分的通用解釋和注釋。
drivers:設備驅動程序,每個不同的驅動佔用一個子目錄。
fs:各種支持的文件系統,如ext、fat、ntfs等。
include:頭文件。其中,和系統相關的頭文件被放置在linux子目錄下。
init:內核初始化代碼(注意不是系統引導代碼)。
ipc:進程間通信的代碼。
kernel:內核的最核心部分,包括進程調度、定時器等,和平台相關的一部分代碼放在arch/*/kernel目錄下。
lib:庫文件代碼。
mm:內存管理代碼,和平台相關的一部分代碼放在arch/*/mm目錄下。
net:網路相關代碼,實現了各種常見的網路協議。
scripts:用於配置內核文件的腳本文件。
security:主要是一個SELinux的模塊。
sound:常用音頻設備的驅動程序等。
usr:實現了一個cpio。
在i386體系下,系統引導將從arch/i386/kernel/head.s開始執行,並進而轉移到init/main.c中的main()函數初始化內核。
五.配置內核
# cd /usr/src/linux
內核配置方法有三種:
(1)命令行: make config
(2)菜單模式的配置界面: make menuconfig
(3) X window:make xconfig
Linux的內核配置程序提供了一系列配置選項。對於每一個配置選項,用戶可以回答"y"、"m"或"n"。其中"y"表示將相應特性的支持或設備驅動程序編譯進內核;"m"表示將相應特性的支持或設備驅動程序編譯成可載入模塊,在需要時,可由系統或用戶自行加入到內核中去;"n"表示內核不提供相應特性或驅動程序的支持。由於內核的配置選項非常多,本文只介紹一些比較重要的選項。
1、Code maturity level options(代碼成熟度選項)
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [N/y/?] 如果用戶想要使用還處於測試階段的代碼或驅動,可以選擇「y」。如果想編譯出一個穩定的內核,則要選擇「n」。
2、Processor type and features(處理器類型和特色)
(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 選擇處理器類型,預設為Ppro/6x86MX。
(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 內核支持的最大內存數,預設為1G。
(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 協處理器模擬,預設為不模擬。
(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]
選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供X server使用。
(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 選擇「y」,內核將支持對稱多處理器。
3、 Loadable mole support(可載入模塊支持)
(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 選擇「y」,內核將支持載入模塊。
(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 選擇「y」,內核將自動載入那些可載入模塊,否則需要用戶手工載入。
4、 General setup(一般設置)
(1)、Networking support (CONFIG_NET) [Y/n/?] 該選項設置是否在內核中提供網路支持。
(2)、PCI support (CONFIG_PCI) [Y/n/?] 該選項設置是否在內核中提供PCI支持。
(3)、PCI access mode (BIOS, Direct, Any) [Any] 該選項設置Linux探測PCI設備的方式。選擇「BIOS」,Linux將使用BIOS;選擇「Direct」,Linux將不通過BIOS;選擇 「Any」,Linux將直接探測PCI設備,如果失敗,再使用BIOS。
(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 選擇「y」,內核將支持平行口。
5、 Plug and Play configuration(即插即用設備支持)
(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 選擇「y」,內核將自動配置即插即用設備。
(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 選擇「y」,內核將自動配置基於ISA匯流排的即插即用設備。
6、 Block devices(塊設備)
(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 選擇「y」,內核將提供對軟盤的支持。
(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 選擇「y」,內核將提供對增強IDE硬碟、CDROM和磁帶機的支持。
7、 Networking options(網路選項)
(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 選擇「y」,一些應用程序將使用Packet協議直接同網路設備通訊,而不通過內核中的其它中介協議。
(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 選擇「y」,內核將支持防火牆。
(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 選擇「y」,內核將支持TCP/IP協議。
(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 選擇「y」,內核將支持IPX協議。
(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 選擇「y」,內核將支持Appletalk DDP協議。
8、SCSI support(SCSI支持)
如果用戶要使用SCSI設備,可配置相應選項。
9、Network device support(網路設備支持)
Network device support (CONFIG_NETDEVICES) [Y/n/?] 選擇「y」,內核將提供對網路驅動程序的支持。
10、Ethernet (10 or 100Mbit)(10M或100M乙太網)
在該項設置中,系統提供了許多網卡驅動程序,用戶只要選擇自己的網卡驅動就可以了。此外,用戶還可以根據需要,在內核中加入對FDDI、PPP、SLIP和無線LAN(Wireless LAN)的支持。
11、Character devices(字元設備)
(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 選擇「y」,內核將支持虛擬終端。
(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]
選擇「y」,內核可將一個虛擬終端用作系統控制台。
(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]
選擇「y」,內核將支持串列口。
(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]
選擇「y」,內核可將一個串列口用作系統控制台。
12、Mice(滑鼠)
PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用戶使用的是PS/2滑鼠,則該選項應該選擇「y」。
13、Filesystems(文件系統)
(1)、Quota support (CONFIG_QUOTA) [N/y/?] 選擇「y」,內核將支持磁碟限額。
(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 選擇「y」,內核將提供對automounter的支持,使系統在啟動時自動 mount遠程文件系統。
(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 選擇「y」,內核將支持DOS FAT文件系統。
(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]
選擇「y」,內核將支持ISO 9660 CDROM文件系統。
(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]
選擇「y」,用戶就可以以只讀方式訪問NTFS文件系統。
(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系統運行狀態的虛擬文件系統,該項必須選擇「y」。
(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的標准文件系統,該項也必須選擇「y」。
14、Network File Systems(網路文件系統)
(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 選擇「y」,內核將支持NFS文件系統。
(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)
選擇「y」,內核將支持SMB文件系統。
(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)
選擇「y」,內核將支持NCP文件系統。
15、Partition Types(分區類型)
該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇「y」即可。
16、Console drivers(控制台驅動)
VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 選擇「y」,用戶就可以在標準的VGA顯示方式下使用Linux了。
17、Sound(聲音)
Sound card support (CONFIG_SOUND) [N/y/m/?] 選擇「y」,內核就可提供對音效卡的支持。
18、Kernel hacking(內核監視)
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 選擇「y」,用戶就可以對系統進行部分控制。一般情況下選擇「n」。
六、 編譯內核
(一)、建立編譯時所需的從屬文件
# cd /usr/src/linux
# make dep
(二)、清除內核編譯的目標文件
# make clean
(三)、編譯內核
# make zImage
內核編譯成功後,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件zImage。如果編譯的內核很大的話,系統會提示你使用make bzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內核映像文件。
(四)、編譯可載入模塊
如果用戶在配置內核時設置了可載入模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行載入。
# make moles
# make modelus_install
編譯成功後,系統會在/lib/moles目錄下生成一個2.3.14子目錄,裡面存放著新內核的所有可載入模塊。
七、 啟動新內核
(一)、將新內核和System.map文件拷貝到/boot目錄下
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14
# cp /usr/src/linux/System.map /boot/System.map-2.3.14
# cd /boot
# rm -f System.map
# ln -s System.map-2.3.14 System.map
(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)、使新配置生效
# /sbin/lilo
(四)、重新啟動系統
# /sbin/reboot
新內核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內核。然後查出故障原因,重新編譯新內核即可。
⑺ 三、內核&文件系統編譯
一、編譯官方提供的內核源碼
1、解壓官方提供的內核源碼包
2、根據官方提供的配置文件對內核進行配置,方式如下
make ARCH=arm xxxxx_defult_config
cp arch/arm/xxxxx_config .config
3、打開圖形界面對內核進行配置,根據需要增加或者刪除模塊和其他內容
4、對內核進行編譯
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- uImage -j6
或者編輯Makefile文件,對其中的ARCH變數和CROSS_COMPILE變數進行修改,然後執行make uImage
5、在編譯編譯的時候回出現mkimage命令缺失,這個命令是UBootr提供的,在編譯的UBoot路徑下面找到這個命令,即可直接使用
6、編譯的時候各個方面需要一致性,
1、編譯的內核的交叉編譯工具鏈如果支持硬體浮點數運算那麼在配置內核的時候也需要添加硬體浮點數的支持
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
2、在編譯的內核的時候注意保持不要做太多的修改,否則會出問題
7、編譯內核模塊
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- moles -j6
8、安裝內核模塊到指定的目錄中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build
9、不要採用內核模塊安裝的命令來安裝內核,因為內核不需要安裝,在arch/arm/boot/uImage就是所需要的內核文件
二、編譯官方提供的busybox來構建根文件系統
1、解壓需要編譯的busybox源碼
2、進入源碼中對busybox進行配置,主要是配置交叉編譯工具鏈
Busybox Settings --->Build Options ---> 下面有關於busybox是否配置為採用共享庫的模式,還有添加交叉編譯工具鏈的前綴
3、配置需要的文件和命令進行添加或者刪除
4、然後執行命令make -jn && make install
5、創建根文件系統需要的其他的文件和目錄,在一個空白的目錄中首先拷貝busybox/_install下面的bin、sbin、usr目錄到空白目錄中,在空白目錄中創建其餘的所需要的目錄文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目錄
6、接下來在lib目錄中復制內核模塊,在編譯內核的時候模塊安裝在了指定的地方,直接拷貝過來就行。
6、創建文件系統所需要的其他文件,配置文件(最簡單的辦法就是直接復制busybox文件下面的example文件夾裡面的東西)
1、/etc/inittab 填寫或者 一下是最基本的,還有其他的需要填寫
# /etc/inittab
::sysinit:/etc/init.d/rcS //指定初始化腳本
::askfirst:-/bin/sh //指定第一次輸入回車後打開的shell
::ctrlaltdel:/sbin/reboot //指定這三個按鍵按下後的反應
::shutdown:/bin/umount -a -r //指定關機是進行的操作
2、/etc/init.d/rcS //這個就沒有詳細額硬性規定了,寫入需要初始化的東西即可
#!/bin/sh
mount -a
3、/etc/fstab //寫入mount -a是要自動掛載的文件系統
# device mount-point type options mp fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
7、拷貝需要用到的庫文件,在交叉編譯工具鏈下面存放
arm-linux-xxxxxx-gcc/lib
海思的開發板是在和tahet/lib下面,切記。