linux內核剪裁


首 頁 閱覽室 館友 個人圖書館 登陸註冊 java

Linux內核裁剪與移植
linux內核裁剪的具體過程和方法linux



這是我前段時間本身整的一份,內核功能:
可以完成系統的基本功能,上網,收發郵件等,支持xwindows圖形界面。 git

在menuconfig中配置: 算法

詳細介紹內核配置選項及刪改狀況
第一部分:所有刪除
Code maturity level options ---> 代碼成熟等級選項
[]Prompt for development and/or incomplete code/drivers 默認狀況下是選擇的,這將會在設置界面中顯示還在開發或者尚未完成的代碼與驅動.不選。
第二部分 :除如下選項,其它所有刪除
General setup—〉
System V IPC (IPC:Inter Process Communication)是組系統調用及函數庫,它能讓程序彼此間同步進行交換信息。某些程序以及DOS模擬環境都須要它。爲進程提供通訊機制,這將 使系統中各進程間有交換信息與保持同步的能力。有些程序只有在選Y的狀況下才能運行,因此不用考慮,這裏必定要選。
第三部分:除如下選項,其它所有刪除
Loadable module support ---> 可引導模塊支持 建議做爲模塊加入內核
[] Enable loadable module support 這個選項可讓你的內核支持模塊,模塊是什麼呢?模塊是一小段代碼,編譯後可在系統內核運行時動態的加入內核,從而爲內核增長一些特性或是對某種硬件進行 支持。通常一些不經常使用到的驅動或特性能夠編譯爲模塊以減小內核的體積。在運行時可使用modprobe命令來加載它到內核中去(在不須要時還能夠移除 它)。一些特性是否編譯爲模塊的原則是,不常使用的,特別是在系統啓動時不須要的驅動能夠將其編譯爲模塊,若是是一些在系統啓動時就要用到的驅動好比說文 件系統,系統總線的支持就不要編爲模塊了,否在沒法啓動系統。
[]Automatic kernel module loading 通常狀況下,若是咱們的內核在某些任務中要使用一些被編譯爲模塊的驅動或特性時,咱們要先使用modprobe命令來加載它,內核才能使用。不過,若是你 選擇了這個選項,在內核須要一些模塊時它能夠自動調用modprobe命令來加載須要的模塊,這是個很棒的特性,固然要選Y嘍。
第四部分:所有刪除
Block layer-----〉塊設備
第五部分:除如下選項,其它所有刪除
Processor type and features ---> 處理器類型
Subarchitecture Type (PC-compatible) ---> 這選項的主要的目的,是使Linux能夠支持多種PC標準,通常咱們使用的PC機是遵循所謂IBM兼容結構(pc/at)。這個選項可讓你選擇一些其它 架構。咱們通常選擇PC-compatible就能夠了。
Processor family(386) : 它會對每種CPU作最佳化,讓它跑的好又快,通常來講,你是什麼型號的就選什麼型號的就好。我選的是386,這樣內核會省下很多空間
第六部分:除如下選項,其它所有刪除
Power management options (ACPI, APM) ---> 電源管理選項
[ ] Power Management Debug Support 電源管理的調試信息支持,若是不是要調試內核有關電源管理部份,請不要選擇這項。
ACPI Support ---〉高級電源接口配置支持,若是BIOS支持,建議選上這項
[]Button 這個選項用於註冊基於電源按鈕的事件,好比power, sleep等,當你按下按鈕時事件將發生,一個守護程序將讀取/proc/acpi/event,並執行用戶在這些事件上定義的動做好比讓系統關機。能夠不選擇,根據本身的需求。
第七部分:除如下選項,其它所有刪除
Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 總線選項
[]PCI support
PCI access mode (Any) ---> PCI外圍設備配置,強列建議選Any,系統將優先使用MMConfig,而後使用BIOS,最後使用Direct檢測PCI設備。
第八部分:除如下選項,其它所有刪除
Executable file formats --->
Kernel support for ELF binaries ELF是開放平臺下最經常使用的二進制文件,它支持不一樣的硬件平臺。必定要選。
第九部分:除如下選項,其它所有刪除
Networking
Networking options --->
[]Unix domain sockets
[]TCP/IP networking
第十部分:除如下選項,其它所有刪除
Device Drivers ---> 設備驅動
Block devices-------〉
[]Compaq SMART2 support
[] Compaq Smart Array 5xxx support
[]Loopback device support 大部分的人這一個選項都選N,由於沒有必要。可是若是你要mount iso文件的話,你得選上Y。這個選項的意思是說,能夠將一個文件掛成一個文件系統。若是要燒光盤片的,那麼您頗有可能在把一個文件燒進去以前,看看這個 文件是否符合IS09660的文件系統的內容,是否符合您的需求。並且,能夠對這個文件系統加以保護。不過,若是您 想作到這點的話,您必須有最新的mount程序,版本是在2.5X版以上的。並且若是您但願對這個文件系統加上保護,則您必須有des.1.tar.gz 這個程序。注意:此處與網絡無關。建議編譯成模塊
[] RAM disk support
SCSI device support ---> 裏面有關於USB支持的,要選擇
[]SCSI device support USB要用,必須選擇
[]legacy /proc/scsi/ support USB要用,必須選擇
[]SCSI disk support USB要用,必須選擇
SCSI Low-level drivers
[]Serial ATA(SATA) support
[]Intel PIIX/ICH SATA support 這個必須選擇,不然沒法產生引導文件
[]Via SATA support
Networking device support ---> 這個下面是選網卡驅動,必定要選
Ethernet(1000mbit)-個人電腦是千兆網卡因此就選這個
[]broadcom Tigon3support
Input device support ---> 這個裏面要設置你的鼠標鍵盤什麼的
[]Provide legacy /dev/psaux device
Graphics support --->
[]Support for frame buffer devices 支持Frame buffer的,必定要選擇
USB support --->
[]USB device filesystem 這個好象是用U盤必須的
[]EHCI HCD (USB 2.0) support 有usb2.0就選上把,編譯成模塊
[]OHCI HCD support 必須選擇,編譯成模塊
[]UHCI HCD (most Intel and VIA) support 必須選擇,編譯成模塊
[]USB Mass Storage support 用U盤必須選擇
USB Human Interface Device (full HID) support 裏面選擇usb鼠標和usb鍵盤,若是你有必定選上這個必需選
HID input layer support 應該選擇
/dev/hiddev raw HID device support若是這裏有USB鍵盤和鼠標選項,必定要選擇 shell

第十一部分:除如下選項,其它所有刪除
file systems ---> 文件系統
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
<M> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels 以上這些確定是要選擇的,linux的標準文件系統
<M> Kernel automounter support 內核自動掛載的,固然要選
<M> Kernel automounter version 4 support (also supports v3) 固然要選
DOS/FAT/NT Filesystems --->
<M> DOS FAT fs support
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
<M> NTFS file system support
Native language support語言支持,這裏就支持英語和漢語就好了,很少說了
[]NLS ISO 8859-1 必須選擇,這個是關於U盤掛載的。
CD-ROM/DVD Filesystems ---> 這個是關於掛載ISO文件的,用的話就選。
<*> ISO 9660 CDROM file system support
第十二部分: 所有刪除
Instrumentation support
第十三部分:所有刪除
Kernel hacking ---> 破解核心?可不是當骸客啦,不選
第十四部分:所有刪除
Security options --->
第十五部分:所有刪除
Cryptographic options ---> 這是核心支持加密的選項
第十六部分:所有刪除
Library routines --->
內核配置
  內核配置的方法不少,make config、make xconfig、make menuconfig、make oldconfig等等,它們的功能都是同樣的,區別應該從名字上就能看出來,只有make oldconfig是指用系統當前的設置(./.config)做爲缺省值。這裏用的是make menuconfig。
  須要牢記:沒必要要的驅動越多,內核就越大,不只運行速度慢、佔用內存多,在少數狀況下、還會引起其餘問題。具體步驟以下:
首先肯定shell是bash。
而後
$make menuconfig
有一些默認的符號其含義以下:
y:加載
n:不加載
m:做爲模塊加載 編程

能夠配置的選項有如下一些:
1)code maturity level option 代碼成熟度
prompt for development and/or incomplete code/drivers [N/y/?]
若是有興趣測試一下內核中還沒有最終完成的某些模塊,就選y,不然選N,想知道更詳細的信息選?會看到聯機幫助(如下?的含義相同),N大寫表示缺省值。 windows

2)processor type and features 處理器類型及特性
Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)[PPro/6x86MX]
[]內的是缺省值,咱們能夠根據前面介紹的uname 命令執行的結果選擇。此項若是高於386,那麼生成的內核在386機器上將不能啓動。
Math emulation(CONFIG_MATH_EMULATION)[N/y/?]
須要進行協處理器模擬嗎?通常的機器都回n。若是機器已經有硬件的協處理器,那麼內核仍將使用硬件,而忽略軟件的math-emulation,這將使內核變大變慢。
MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?]
在Pentium、Pro/Pentium II類的系統中能夠提升圖像寫入速度。
Symmetric multi-processing support(CONFIG_SMP)[Y/n/?]
若是您的機器有多個處理器,就選y。此時要選中下面的Enhanced Real Time Clock Support 安全

3)loadable model support 可加載模塊支持
Enable loadable module support(CONFIG_MODULES)[Y/n/?]
最好選y,否則許多僅供動態加載的模塊就不能用了。
Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?]
選N
Kernel module loader(CONFIG_KMOD)[N/y/?] bash

4)general setup 通常設置
Networking support(CONFIG_NET)[Y/n/?]
選y吧,如今還有幾臺計算機不用上網呢?
PCI support (CONFIG_PCI)[Y/n/?]
PCI 總線和設備總該有吧。
PCI access mode(BIOS,Direct,Any)[Any]
缺省值比較保險,但若是您對您的主板頗有信心,就選BIOS。
PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?]
用於修補BIOS中對PCI有影響的BUG,一樣,若是您對主板頗有信心,就選n。
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?]
之前的內核使用/proc/pci,新版內核使用/proc/bus/pci,要保持兼容性就選y。
MCA support(CONFIG_MCA)[N/y/?]
查看幫助吧。
SGI Visual Workstation support(CONFIG_VISWS)[N/y/?]
您的機器是SGI的嗎?是就選y。
System V IPC(CONFIG_SYSVIPC)[Y/n/?]
進程間通訊函數和系統調用。Linux內核的五大組成部分之一,必定要選。
BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?]
用於啓動由內核將進程信息寫入文件的用戶級系統調用。就看您想不想用它了。
Sysctl support(CONFIG_SYSCTL)[Y/n/?]
在內核正在運行的時候修改內核。用8KB空間換取某種方便。別選吧,除非你真的想試試。
Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?]
爲了能使用之前編譯的程序,選y。
Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?]
爲了能使用如今編譯的程序,選y。
Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?]
通常選y,用於支持java等代碼的自動執行。
Parallel port support(CONFIG_PARPORT)[N/y/m/?]
並口設備,如打印機。 網絡

5)plug and play support 即插即用設備支持
Plug and Play support (CONFIG_PNP)[N/y/?]
選y吧。

6)block devices 塊設備
Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?]
通常的軟驅。選y。
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)[Y/m/n/?]
這幾種接口的硬盤、光驅、磁帶、軟驅。選y。
Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?]
CDROM。選y。

7)networking options 網絡選項
Packet socket (CONFIG_PACHET)[Y/m/n/?]
按照目前網絡發展的情況,選y比較好。固然也能夠選其它的。
Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]
內核與用戶進程雙向通訊。選y。
Network firewalls(CONFIG_FIREWALL)[N/Y/?]
若是真的須要用防火牆,就選y。
UNIX domain sockets(confgi_unix)[Y/m/n/?]
socket 的用處太多了。選y。
TCP/IP networking(CONFIG_INET)[Y/n/?]
選y,理由如上一條。
The IPX protocol (CONFIG_IPX)[N/y/m/?]
其實並無那麼多人真的須要使用或者學習IPX,因此通常選N。
Appletalk DDP(CONFIG_ATALK)[N/y/m/?]
選N,理由同上。

8)SCSI support SCSI支持,SCSI low-level drives SCSI低級驅動
根據系統中SCSI設備的實際狀況選擇。

9)Networking device support 網絡設備支持
若是用LAN上網,就選擇網卡;
若是用MODEM撥號上網,就要看ISP提供那種服務了,通常都是PPP。

10)Amateur Radio support 業餘收音機支持
這是什麼我不太清楚,因此選N。

11)ISDN subsystem ISDN子系統
好像已經有支持ISDN的MODEM了,因此最好先看看本身的MODEM是否是這種,再作選擇。

12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驅驅動
通常選N,由於這種設備實在不多見。

13)Character devices 字符設備
Virtual terminal(CONFIG_VT)[Y/n/?]
Linux上通常能夠用Alt+F1/F2/F3/F4來切換不一樣的任務終端,即便在一臺計算機上也能夠充分使用Linux的多任務能力,一些須要以命令行方式安裝合適用的軟件若是有虛擬終端的支持就會更方便,所以選y。
Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?]
選y將支持一個虛擬終端做爲控制檯。通常爲Alt+F1。
Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?]
除非真的須要一個串口控制檯,不然選n。
Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?]
若是但願使用 "dumb "的非標準特性(如HUB6支持),選y,通常選N。
Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?]
非標準串口。通常選N。
UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?]
PTY指僞終端,通常用戶就選n。但若是想用telnet或者xterms做爲終端訪問主機,而且已經安裝了glibc2.1,就能夠選y。
Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)[256]
缺省值就能夠了。
Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?]
PS/2等非串口鼠標選y,不然選N。

14)Mice 鼠標
根據本身的鼠標類型選擇。

15)Video for Linux Linux視頻
根據系統中的音/視頻捕捉設備選擇。

16)Joystick support 操縱桿
根據系統中的遊戲杆設備選擇

17)Ftape,the floopy tape device driver Ftape設備驅動
Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?]
若是系統中有磁帶機,選y。

18)Filesystems 文件系統
文件系統的選擇要比較仔細,由於其中的一些給某些系統功能提供支持。並且除了proc、ext2等文件系統以外,其它的文件系統(包括下面的網絡文件系統)均可以選擇爲m方式,從而減少內核啓動時的體積。
Quota support(CONFIG_QUOTA)[N/y/?]
用於給用戶劃分定量的磁盤空間。如不用此功能就選N。
DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?]
爲內核提供FAT支持,多數用戶有可能從Linux訪問同一系統中的WINDOWS硬盤空間,所以最好選y。
ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]
有標準光驅的系統應該選Y。
Minix fs support(CONFIG_MINIX_FS)[N/y/m/?]
用於建立啓動盤的文件系統,多數應該選y或者m。
/proc filesystem support(CONFIG_PROC_FS)[Y/n/?]
虛擬文件系統,必須選Y。
Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?]
Linux標準文件系統,都應該選Y。

19)Network file systems 網絡文件系統
Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?]
先看幫助再選。
NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?]
選Y或n,可以訪問遠程NFS文件系統。
SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?]
要訪問WINDOWS系統中的共享資源選y。
NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?]
若是真的須要訪問NetWare文件系統,就選y或者m。

20)Partion Types 分區類型
通常用不上;要用請參看幫助。

21)Console drivers 控制檯驅動
VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?]
用VGA模式下用文本方式操做Linux,通常選y。
Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?]
大多數系統都不須要這項功能。

22)Sound 聲音
Sound card support(CONFIG_SOUND)[N/y/m/?]
若是系統中安裝了聲卡,就選y(或者m),而後查看幫助。

23)Kernel hacking 內核監視
kernel hacking每每會生成很是大或者很是慢(甚至又大又慢)的內核,甚至會引發內核工做不穩定。若是必定要選,那麼也最好不要選其中的 "development "、 "experimental "、 "debugging "項。



第4章 Linux內核裁剪與移植
  內核,即操做系統。它爲底層的可編程部件提供服務,爲上層應用程序提供執行環境。內核裁剪就是對這些功能進行裁剪,選取知足特定平臺和需求的功能。不一樣的硬件平臺對內核要求也不一樣,所以從一個平臺到另外一個平臺須要對內核進行從新配置和編譯。操做系統從一個平臺過渡到另外一個平臺稱爲移植。Linux是一款平臺適應性且容易裁剪的操做系統,所以Linux在嵌入式系統獲得了普遍的應用。本章將詳細講解內核裁剪與移植的各項技術。
4.1 Linux內核結構
  Linux內核採用模塊化設計,而且各個模塊源碼以文件目錄的形式存放,在對內核的裁剪和編譯時很是方便。下面介紹內核的主要部分及其文件目錄。
4.1.1 內核的主要組成部分
  在第1章中已經介紹了Linux內核主要的5個部分:進程調度、內存管理、虛擬文件系統、網絡接口、進程通訊。在系統移植的時候,它們是內核的基本元素,這5個部分之間的關係,如圖4.1所示。

圖4.1 Linux內核子系統及其之間的關係
  進程調度部分負責控制進程對CPU的訪問。內存管理容許多個進程安全地共享主內存區域。內存管理從邏輯上分爲硬件無關部分和硬件相關部分。硬件無關部分提供了進程的映射和邏輯內存的對換;硬件相關部分爲內存管理硬件提供了虛擬接口。虛擬文件系統隱藏了不一樣類型硬件的具體細節,爲全部的硬件設備提供了一個標準的接口,VFS提供了十多種不一樣類型的文件系統。網絡接口提供了對各類網絡標準的存取和各類網絡硬件的支持。進程通訊部分用於支持進程間各類不一樣的通訊機制。進程調度處於核心位置,內核的其餘子系統都要依賴它,由於每一個子系統都存在進程掛起或恢復過程。
* 進程調度與內存管理之間的關係:這兩個子系統爲互相依賴關係。在多道程序環境下,程序要運行必須爲之建立進程,而建立進程首先就是要將程序和數據裝入內存。另外,內存管理子系統也存在進程的掛起和恢復過程。
* 進程間通訊與內存管理之間的關係:進程間通訊子系統要依賴內存管理支持共享內存通訊機制,經過對共同的內存區域進行操做來達到通訊的目的。
* 虛擬文件系統與網絡接口之間的關係:虛擬文件系統經過依賴網絡接口支持網絡文件系統(NFS),也經過依賴內存管理支持RAMDISK設備。
* 內存管理與虛擬文件系統之間的關係:內存管理利用虛擬文件系統支持交換,交換進程按期地由調度程序調度,這也是內存管理依賴於進程調度的惟一緣由。當一個進程存取的內存映射被換出時,內存管理將會向文件系統發出請求,同時,掛起當前正在運行的進程。
  除了上面5個主要部分,下面將介紹Linux代碼的總體分區結構。
4.1.2 內核源碼目錄介紹
  Linux內核代碼以源碼樹的形式存放,若是在安裝系統的時候已經安裝了源碼樹,其源碼樹就在/usr/src/linux下,源碼樹結構如圖4.2所示。

圖4.2 Linux內核源碼樹結構
  下面分別針對圖4.2中各個部分進行介紹,各個目錄的主要的功能分別以下。
  1.arch目錄
  arch子目錄包括了全部和體系結構相關的核心代碼。它的每個子目錄都表明一種支持的體系結構,例如arm子目錄是關於ARM平臺下各類芯片兼容的代碼。
  2.include目錄
  include子目錄包括內核編譯時所須要的大部分頭文件。與平臺無關的頭文件在include/linux子目錄下,include/scsi目錄則是有關scsi設備的頭文件目錄,與arm相關的頭文件在include/asm-arm子目錄下。
  3.drivers目錄
  drivers子目錄放置系統全部的設備驅動程序。有些驅動是與硬件無關的,而有些驅動是與硬件平臺相關。例如,在USB驅動中,主機控制器有3種規格:
* OHCI主要爲非PC系統上及帶有SiShe ALi芯片組的PC主板上的USB芯片,嵌入式系統通常使用該驅動。
* UHCI大多爲Intel和Via主板上的USB控制器芯片。相對OHCI而言UHCI的硬件電路比較簡單,同時其成本也比較低,但驅動複雜,但它們都是在USB 1.1規範同時提出的。
* EHCI由USB 2.0規範所提出,它兼容OHCI和UHCI。
  4.fs目錄
  fs子目錄列出了Linux支持的全部文件系統,目前Linux支持ext二、vfat、ntfs、yaffs二、ramfs、cramfs和romfs等多種文件系統。在嵌入式系統中經常使用的閃存設備的文件系統有cramfs、romfs、ramfs、jffs二、yaffs等文件系統。
  5.init目錄
  init子目錄包含核心的初始化代碼(注意,不是系統的引導代碼)。它包含兩個文件main.c和version.c,這是研究核心如何工做的一個很是好的起點。
  6.ipc目錄
  ipc子目錄包含核心進程間的通訊代碼。Linux下進程間通訊機制主要包括管道、信號、消息隊列、共享內存、信號量、套接口。
  7.kernel目錄
  kernel子目錄包含內核管理的核心代碼。與處理器結構相關代碼都放在arch/*/kernel目錄下。
  8.net目錄
  net子目錄裏是核心的網絡部分代碼,其每一個子目錄存放一個具體的網絡協議或者網絡模型代碼。
  9.mm目錄
  mm子目錄包含了全部的內存管理代碼。與具體硬件體系結構相關的內存管理代碼位於arch/*/mm目錄下。
  10.scripts目錄
  scripts子目錄包含用於配置核心的腳本文件。
  11.lib目錄
  lib子目錄包含了核心的庫代碼,與處理器結構相關的庫代碼被放在arch/*/lib/目錄下。
4.2 內核配置選項
  內核配置一般是對內核支持的各個功能進行取捨配置,將配置的方案保存到configure文件中。在編譯內核的時候,就會根據此配置對內核進行取捨編譯。在源碼目錄下經過make menuconfig命令進入內核的配置界面,如圖4.3所示。在對內核功能進行配置時,使用鍵盤的方向鍵移動光標位置,使用Enter鍵選擇菜單,使用空格鍵修改配置選項。

圖4.3 內核配置界面
  Linux配置選項的基本分類和涵義以下。
4.2.1 通常選項
  菜單選項(General setup)的子菜單中包含一些內核通用配置選項,如表4.1所示。在通常配置選項中若是對系統沒有特殊要求,能夠只選擇System V IPC配置。
表4.1 通常選項
選 項 名
說 明
Automatically append version information to the version string
自動在版本後添加版本信息,編譯時須要有perl及git倉庫支持,一般能夠不選
Support for paging of anonymous memory (swap)
支持交換內存,一般選擇
System V IPC
進程間通訊,一般須要配置
POSIX Message Queues
POSIX消息隊列,一般須要配置
BSD Process Accounting
能夠將行程資料記錄下來,一般建議配置
Export task/process statistics through netlink
經過netlink接口向用戶空間導出任務/進程的統計 信息
Auditing support
審計支持,某些內核模塊(例如SELinux)須要配置
RCU subsystem
同步機制
Kernel .config support
提供.config配置文件支持
Kernel log buffer size (16=>64KB, 17=>128KB)
內核日誌緩衝區大小(16表明64KB,17表明128KB)
Group CPU scheduler
CPU組調度
Control Group support
控制組支持
Create deprecated sysfs layout for older userspace tools
爲舊的用戶空間工具建立過期的文件系統風格
Kernel->user space relay support (formerly
relayfs)
在某些文件系統上(好比debugfs)提供從內核空間向用戶空間傳遞大量數據的接口
Namespace support
命名空間支持
Initial RAM filesystem and RAM disk (initramfs/initrd) support
初始化RAM文件系統的源文件。initramfs能夠將根文件系統直接編譯進內核,通常是cipo文件。對嵌入式系統有用
Optimize for size
代碼優化。若是不瞭解編譯器,建議不選
Configure standard kernel features (for small systems)
爲特殊環境準備的內核選項,一般不須要這些非標準內核
Disable heap randomization
禁用隨機heap(heap堆是一個應用層的概念,即堆對CPU是不可見的,它的實現方式有多種,能夠由OS實現,也能夠由運行庫實現,也能夠在一個棧中來實現一個堆)
Choose SLAB allocator
選擇內存分配管理器,建議選擇
Profiling support
支持系統評測,建議不選
Kprobes
探測工具,開發人員能夠選擇,建議不選

4.2.2 內核模塊加載方式支持選項
  菜單選項(Loadable module support)的子菜單中包含一些內核模塊加載方式選項,如表4.2所示。若是對模塊的加載方式有特殊要求,如能夠強制卸載正在使用的模塊的要求,那麼能夠配置相關的模塊加載方式。
表4.2 內核模塊加載方式
選 項 名
說 明
  Forced module loading
 容許強制加載模塊驅動
  Module unloading
 容許卸載已經加載的模塊,建議選擇
  Forced module unloading
 容許強制卸載正在運行的模塊,該功能危險,建議不選
  Module versioning support
 容許使用其餘內核版本的模塊,建議不選
  Source checksum for all modules
 爲全部的模塊校驗源碼,能夠不選

4.2.3 系統調用、類型、特性、啓動相關選項
  菜單選項(Block layer)的子菜單中包含一些系統調用方式選項,如表4.3所示。在配置內核時能夠不選該菜單選項。
表4.3 系統調用方式
選 項 名
說 明
Support for Large Block Devices and files
使用大容量塊設備時選擇
Support for tracing block io actions
支持塊隊列I/O跟蹤
Block layer SG support v4
支持通用scsi塊設備第4版
Block layer data integrity support
支持塊設備數據完整性
IO Schedulers
I/O調度器

  菜單選項(System Type)的子菜單中包含一些系統類型選項,在配置內核時直接選擇對應的芯片類型便可。對特定的平臺選擇相應的支持類型。
  菜單選項(Kernel Features)的子菜單中包含一些系統特性選項,如表4.4所示。在嵌入式系統中,通常不對這些選項進行配置。
表4.4 系統特性
選 項 名
說 明
Preemptible Kernel
搶佔式內核。建議採用
Use the ARM EABI to compile the kernel
使用ARM EABI編寫內核
Allow old ABI binaries to run with this kernel
使內核支持舊版本的ABI程序
Memory model
只有Flat Memory供選擇
Add LRU list to track non-evictable pages
對沒有使用的頁採用最近最少使用算法,建議選擇

  菜單選項(Boot Options)的子菜單中包含一些系統啓動選項,如表4.5所示。
表4.5 系統啓動
選 項 名
說 明
(0)Compressed ROM boot loader base address
xImage存放的基地址
(0)Compressed ROM boot loader BSS address
BSS地址
()Default Kernel command string
內核啓動參數
Kernel Execute-In-Place from ROM
從ROM中直接運行內核,該內核使用make xipImage編譯
(0x00080000)XIP Kernel Physical Location
選擇XIP後,內核存放的物理地址
Kexec system call
Kexec系統呼叫
4.2.4 網絡協議支持相關選項
  菜單選項(Networking Support)的子菜單中包含一些網絡協議支持的選項,如表4.6所示。基本只須要在Networking options子菜單中選擇具體所需的網絡協議便可。
表4.6 網絡協議
選 項 名
說 明
Networking options
該菜單的子菜單包含支持的各類具體網絡協議,在開發中能夠根據須要進行配置
Amateur Radio support
業餘無線電支持,通常不選
CAN bus subsystem support
CAN總線子系統支持
IrDA (infrared) subsystem support
紅外線支持
Bluetooth subsystem support
藍牙支持
RxRPC session sockets
RxRPC會話套接字支持
Phonet protocols family
Phonet協議族支持
Wireless
無線電協議支持
WiMAX Wireless Broadband support
WiMAX無線寬帶支持
RF switch subsystem support
RF交換子系統支持
Plan 9 Resource Sharing Support (9P2000)
9計劃資源共享支持

4.2.5 設備驅動支持相關選項
  菜單選項(Device drivers)的子菜單中包含一些設備驅動的選項,如表4.7所示。重點說明了MTD設備相關的驅動。須要支持設備驅動時能夠配置相關的選項。
表4.7 設備驅動
選 項 名
說 明
Connector - unified userspace <-> kernelspace linker
用戶空間和內核空間的統一鏈接器
Memory Technology Devices (MTD) support
MTD設備支持,嵌入式系統使用
->Debugging
調試功能
->MTD concatenating support
鏈接多個MTD設備,例如使用JFFS2文件系統管理多片Flash的情形。只有一片Flash時不選
->MTD partitioning support
Flash分區支持,建議選擇
->MTD tests support
MTD測試支持
->RedBoot partition table parsing
使用RedBoot解析Flash分區表,若是須要讀取這個分區表的信息,選擇此項
->Command line partition table parsing
容許經過內核命令行傳遞MTD分區表信息
->ARM Firmware Suite partition parsing
使用AFS分區信息
->TI AR7 partitioning support
AR7分區支持
->Direct char device access to MTD devices
將系統中的MTD設備看做字符設備進行讀/寫
  續表
選 項 名
說 明
->Caching block device access to MTD devices
文件系統掛載後,模擬塊設備進行訪問。經常使用於只讀文件系統。若是是DiskOnChip使用NFTL方式
->FTL (Flash Translation Layer) support
提供對Flash翻譯層支持,能夠不選
?->NFTL (NAND Flash Translation Layer) support
NAND Flash翻譯層支持,能夠不選
-> INFTL (Inverse NAND Flash Translation Layer) support
提供INFTL支持,DiskOnChip使用
-> Resident Flash Disk (Flash Translation Layer)
support
提供RFD支持,爲嵌入式系統提供相似BIOS 功能
-> NAND SSFDC (SmartMedia) read only translation layer
NAND SSFDC只讀翻譯層
-> Log panic/oops to an MTD buffer
MTD緩衝區日誌
-> RAM/ROM/Flash chip drivers
RAM/ROM/Flash芯片驅動
->Mapping drivers for chip access
爲芯片的訪問方式選擇Mapping驅動
-> Self-contained MTD device drivers
自身包含MTD設備驅動,通常不選
->NAND Device Support
NAND Flash支持
->OneNAND Device Support
One NAND相關驅動
->LPDDR flash memory drivers
LPDDR Flash內存驅動
->UBI - Unsorted block images
只提供UBI支持
Parallel port support
並口支持
Block devices
紅外線支持
Bluetooth subsystem support
藍牙支持
RxRPC session sockets
RxRPC會話套接字支持
Phonet protocols family
Phonet協議族支持
Wireless
無線電協議支持
WiMAX Wireless Broadband support
WiMAX無線寬帶支持
RF switch subsystem support
RF交換子系統支持
Plan 9 Resource Sharing Support (9P2000)
9計劃資源共享支持

4.2.6 文件系統類型支持相關選項
  菜單選項(File Systems)的子菜單中包含一些文件系統配置的選項,如表4.8所示。內核移植完成後,一般須要製做文件系統,能夠在此部分選擇內核支持的文件系統格式。
表4.8 文件系統
選 項 名
說 明
Second extended fs support
Ext2文件系統支持
Ext3 journalling file system support
Ext3文件系統支持
The Extended 4 (ext4) filesystem
Ext4文件系統支持
Reiserfs support
Reiserfs文件系統支持
  續表
選 項 名
說 明
JFS filesystem support
JFS文件系統支持
XFS filesystem support
XFS文件系統支持
OCFS2 file system support
OCFS2文件系統支持
Btrfs filesystem (EXPERIMENTAL)
Unstable disk format
Btrfs文件系統,不穩定,建議不選擇
Dnotify support
文件系統變化通知機制支持
Inotify file change notification support
Inotify是Dnotify的替代者,在高版內核中默認支持
Quota support
磁盤限額支持
Kernel automounter support
自動掛載遠程文件系統,如NFS
Kernel automounter version 4 support
(also supports v3)
自動掛載遠程文件系統,對版本4和版本3都支持
FUSE (Filesystem in Userspace) support
在用戶空間掛載文件系統,建議選擇
CD-ROM/DVD Filesystems
ISO 9660,UDF等文件系統支持
DOS/FAT/NT Filesystems
FAT/NTFS文件系統支持。若是用於訪問存儲設備,而且包含像Windows文件時選上該選項
Pseudo filesystems
僞操做系統,多指內存中的操做系統
Miscellaneous filesystems
雜項文件系統,包括ADFS,BFS,BeFS,HPFS等,比較少用,建議不選
Network File Systems
網絡文件系統。其中只有NFS在產品開發過程當中用。在開發過程能夠選用
Partition Types
分區類型。該菜單下提供不少中類型,但在嵌入式產品中不多用,建議不選
Distributed Lock Manager (DLM)
分佈式鎖管理器

4.2.7 安全相關選項
  菜單選項(Security options)的子菜單中包含一些安全配置選項。不多用,建議不選。菜單選項(Kernel hacking)的子菜單中包含內核黑客配置選項。建議不選。菜單選項(Cryptographic API)的子菜單中包含內核加密算法配置選項。不多用,建議不選。
4.2.8 其餘選項
  菜單選項(Bus Support)的子菜單中包含一些總線接口支持,嵌入式系統能夠不選。菜單選項(CUP Power Management)的子菜單中包含電源管理選項,嵌入式系統能夠不選。菜單選項(Floating)的子菜單中包含一些總線接口支持,嵌入式系統能夠不選。菜單選項(Library routines)的子菜單中包含一些庫配置選項,主要提供CRC支持,在開發通訊類產品時能夠選擇對應的CRC。
4.3 內核裁剪及編譯
  通過對內核的認識和對裁剪配置項的瞭解,接下來實際操做。針對S3C2440開發板進行裁剪Linux內核。
4.3.1 安裝內核源代碼
  在前面章節中已經介紹了創建交叉編譯環境。若是尚未創建編譯環境,請參考相關章節。得到源碼能夠直接從網上下載開發板對應的源碼。該源碼相比Linux基本內核源碼增長了對應平臺相關的內容。將源代碼壓縮包複製到/usr/local/arm目錄下,使用tar命令解壓源碼。

tar –zxvf linux-2.6.29-HY2440.tgz

  tar命令帶上zxvf參數能夠看到詳細的解壓過程,如圖4.4所示。

圖4.4 內核解壓過程
4.3.2 檢查編譯環境設置
  源代碼解壓完成後,進入linux-2.6.29目錄下,而後使用VI命令編輯Mackfile。肯定編譯環境爲arm交叉編譯工具與本機安裝的路徑和一致。

ARCH = arm
CROSS_COMPILE = /usr/local/arm/4.3.2/bin/arm-linux-

4.3.3 配置內核
  使用make menuconfig命令進入內核配置界面,如圖4.3所示。注意在linux-2.6.29目錄下,執行make menuconfig命令才能正確進入配置界面。下面給出一個內核的基本配置。
  (1)在通常General setup配置項中選擇子項System V IPC。因爲要支持處理器在程序之間同步和交換信息,若是不選這項,不少程序將運行不起來,因此選擇General setup配置項中的子項System V IPC,其餘能夠不選,如圖4.5所示。在此配置界面中還有一個選項[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support在製做Ramdisk文件系統時,應該選上該選項,如圖4.6所示。

圖4.5 配置System V IPC

圖4.6 配置RAM disk支持
  (2)在模塊加載方式中,只選擇子項Module unloading,其餘能夠不選。由於Force module loading和Force module unloading會形成安全隱患,因此通常不選。Module unloading支持動態卸載模塊,減小內核佔用的資源。如圖4.7所示模塊加載方式選項配置。

圖4.7 模塊加載方式選項配置
  (3)若是系統沒有對磁盤調度方式有特殊的要求,對block layer能夠不做任何配置。
  (4)在系統類型中選擇S3C3410 DMA support和Force UART FIFO on during boot process,選DMA support選項是爲了支持2440直接內存訪問。選UART FIFO能夠支持通常的串口通訊協議。如圖4.8所示爲系統類型選項配置。

圖4.8 系統類型選項配置
  選擇S3C2440 Machines進入S3C2440 Machines的配置界面,選擇對應開發板類型的支持,筆者的開發板爲Mini2440,則對應的配置如圖4.9所示。
  (5)對於總線支持Bus support配置,通常狀況下該選項能夠不做配置,除非在開發對應的驅動時。

圖4.9 選擇對應的開發板類型
  (6)在對系統特性選項進行配置時,建議對選項Use the ARM EABI to compile the kernel和選項Allow old ABI binaries to run with this kernel(EXPERIMENTAL)(NEW)進行配置,如圖4.10所示。若是交叉編譯工具的版本爲arm-linux-gcc4.3.2時,沒有對這兩個選項進行配置,就會在燒寫完文件系統後出現系統沒法啓動的錯誤,錯誤提示爲Kernel panic - not syncing: Attempted to kill init!

圖4.10 系統類型選項配置
?注意:ARM EABI有許多革新之處,其中最突出的改進就是Float Point Performance,它使用Vector Float Point(矢量浮點),所以能夠極大提升涉及浮點運算程序的運算速度。若是編譯內核的編譯器支持EABI,則在內核中也應該選擇對該項的支持。
  (7)對啓動參數的配置,Bootloader啓動後會將板子的信息、Ramdisk大小、命令行字符串等信息傳遞給內核,而後開始啓動內核,文件系統爲Ramdisk時通常要配置該選項,對選項的具體地址和參數應該根據具體板子、內核大小、文件系統大小來定,該配置界面如圖4.11所示。

圖4.11 啓動參數配置
  (8)選項CPU Power Management通常不做配置。
  (9)選項Floating point emulation通常不做配置。
  (10)選項Userspace binary formats,配置Kernel support for ELF binaries,如圖4.12 所示。
  (11)對於電源管理選項通常不做配置。

圖4.12 配置Kernel support for ELF binaries選項
  (12)對於網絡選項的支持,配置Networking options中的TCP/IP networking和Unix domain sockets,配置如圖4.13所示。在Networking support下的其餘選項,在開發對應的驅動時將對應的選項選上。

圖4.13 配置Networking options
  (13)設備驅動選擇,設備驅動選項是最複雜也是用得最多的配置選項,特別是在開發驅動和系統移植的時候。
  在設備驅動選項中添加MTD支持,配置MTD partitioning support和Direct char device access to MTDdevices。配置MTD partitioning support是支持對Flash?分區的支持,配置Direct char device access to MTDdevices是支持將系統中的MTD設備看做字符設備進行讀/寫,如圖4.14所示爲驅動選項配置。

圖4.14 驅動選項配置
  在網路設備驅動配置窗口中,爲了使開發板支持網卡驅動選擇Ethernet(10 or 100Mbit),若是但願支持ppp撥號還能夠選擇對ppp協議的支持等,能夠根據具體的開發進行配置,如圖4.15所示,進入Ethernet(10 or 100Mbit)配置中選擇對應的網卡驅動,如圖4.16所示。

圖4.15 配置網絡協議的支持

圖4.16 配置對DM9000支持
  在音頻設備驅動時,應該配置Sound card support,在該配置窗口下有OSS驅動框架和ALSA驅動框架,其配置界面如圖4.17所示。

圖4.17 配置聲卡驅動的支持
  在對驅動框架Advanced Linux Sound Architecture進行配置時,若是音頻應用程序須要支持數字音頻接口、混音接口,則須要配置OSS Mixer API和OSS PCM(digital audio)API,如圖4.18所示。另外還要對開發板具體的芯片支持,如Mini2440採用的UDA134x,則還要對具體的芯片驅動進行配置,如圖4.19所示。固然在配置具體音頻驅動支持前應該先在內核代碼中添加相應的驅動。

圖4.18 對數字音頻接口和混音接口支持

圖4.19 對具體芯片和驅動的支持
  USB設備驅動,也是應該要用到的內核配置選項,在開發USB主機驅動時應該配置OHCI HCD support選項,在開發USB存儲設備驅動時配置USB Mass Storage support選項,如圖4.20所示。

圖4.20 USB設備驅動配置
  在開發鍵盤、鼠標等輸入設備驅動時,應該配置HID Devices選項。在開發SD卡驅動時應該配置MMC/SD/SDIO card support選項。
  (14)文件系統選擇也是比較重要的部分,在文件系統配置選項時,應該根據所用的文件系統來添加對應的文件系統支持。筆者用到了網絡文件系統和YAFFS2文件系統,在內核中添加對NFS和YAFFS2文件系統的支持,如圖4.21和圖4.22所示。

圖4.21 對NFS的支持

圖4.22 對YAFFS2的支持
  若是開發板在掛載其餘存儲設備時,這些存儲設備還包含中文時,爲了正確掛載這些設備,則應該在Native language support中添加對字符編碼的設置,如圖4.23所示爲支持簡體中文的配置。

圖4.23 對字符編碼的支持
  (15)剩下的內核選項通常不做配置,退出內核的配置界面並保存配置。
4.3.4 編譯內核
  若是是第一次編譯內核就不用清理之前的映像文件。不然可使用make clean命令清理之前編譯的結果。在linux-2.6.29目錄下使用make dep和make zImage命令生成內核映像文件,編譯的過程如圖4.24所示。

make clean
make dep
make zImage

?注意:make dep是當程序之間有依賴關係的時候,程序發生更新時,依賴的程序會自動更新。
  若是編譯成功,最後會打印生成內核映像文件zImage及其目錄。

OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/misc.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

圖4.24 編譯過程
4.4 內核映像文件移植到ARM板
  4.3節中,介紹了編譯內核映像文件。本節中介紹將映像文件下載到S3C2440開發板上。若是開發板沒有燒寫Bootloader,或者上位機沒有安裝下載映像文件工具DNW,請參考前面的相關章節。在這裏依然能夠暫時使用廠家自帶的文件系統。等後面講定製文件系統後,就可使用自制的文件系統。
4.4.1 移植準備
  將4.3節生成的映像文件複製到Windows目錄下,將要下載的文件系統放映像文件、內核映像文件放在一塊兒,便於下載。
  (1)將開發板與上位機正確鏈接,肯定開發板電源已經插上,且開發板處於關閉狀態;串口線已經正確鏈接;USB線未鏈接。運行DNW工具,此時DNW的COM和USB狀態如圖4.25所示。
  (2)肯定上位機與開發板相連的串口編號。這裏用的是筆記本,沒有串口,採用USB轉串口。在Windows設備管理器下能夠看到與開發板相連的串口爲COM4,如圖4.26 所示。
  (3)選擇Configuration | Options命令,進入串口配置界面,將波特率設置爲115200,COM Port爲設置COM4,下載地址設置爲0x32000000,如圖4.27所示。配置完成後單擊OK按鈕保存配置。

圖4.25 未鏈接前DNW狀態 圖4.26 肯定與開發板相連的串口
  (4)選擇Serial Port | connect命令,DNW狀態應該變成如圖4.28所示的狀態。

圖4.27 肯定與開發板相連的串口 圖4.28 串口配置正確後狀態
  (5)肯定以上步驟正確後,經過USB線將上位機和開發板鏈接起來。按住上位機的空格鍵,啓動開發板。若是是第一次採用USB下載系統將會提示安裝驅動。根據提示安裝完驅動以後,DNW將進入vivi模式。此時USB狀態爲OK,在DNW顯示正確的vivi信息,如圖4.29所示。

圖4.29 進入vivi模式
4.4.2 燒寫系統
  燒寫Linux系統的整個過程包括格式化Nand Flash、燒寫Bootloader、燒寫內核映像文件和燒寫文件系統映像文件。下面具體介紹每一個步驟的詳細過程。
  1.分區格式化Flash
  在vivi模式下輸入:bon part 0 192k 1216k,將Nand Flash分紅三個區。三個區的大小以下所示。
* 0~192k:大小爲192k;
* 192k~1216k:大小爲1M;
* 1216k~64M:大小爲63M。
  執行分區命令後,會在屏幕上打印下列信息:

FriendlyARM> bon part 0 192k 1216k
doing partition
size = 0
size = 196608
size = 1245184

  以上信息顯示分區的起始地址。

check bad block
part = 0 end = 196608
part = 1 end = 1245184
part = 2 end = 67108864
part0:
offset = 0
size = 196608
bad_block = 0
part1:
offset = 196608
size = 1048576
bad_block = 0
part2:
offset = 1245184
size = 65847296
bad_block = 0

  以上信息詳細打印了分區大小、壞區大小和分區的起始地址等信息。
?注意:分區後不能掉電或者關電,由於此時Nand Flash中已經被清空。不然須要按照第3章介紹的方法使用H-JTAG從新燒寫Bootloader。
  2.燒寫Bootloader
  在vivi模式下輸入load flash vivi u命令。DNW進入等待下載狀態後,選擇DNW菜單欄的USB Post | Transmit命令,選擇vivi.bin文件。燒寫完成後會打印以下信息。

FriendlyARM> load flash vivi u
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:105154]
RECEIVED FILE SIZE: 105154 (102KB/S, 1S)
Downloaded file at 0x30000000, size = 105144 bytes
Found block size = 0x0001c000
Erasing... ... done
Writing... ... done
Written 105144 bytes

  若是燒寫成功,就會打印Writing… …done。
?注意:在打印USB host is connected. Waiting a download信息後,單擊DNW菜單欄的USB Post|Transmit命令。出現選擇文件對話框,選擇文件後開始燒寫Bootloader。
  3.下載Linux內核文件
  在vivi模式下輸入load flash kernel u命令,DNW進入等待下載狀態後,單擊DNW菜單欄的USB Post | Transmit命令,選擇4.4.1節生成的內核文件zImage,如圖4.30所示。下載內核的過程如圖4.31所示。

圖4.30 選擇內核文件

圖4.31 下載內核過程
  正確下載內核完成信息以下:

FriendlyARM> load flash kernel u
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:1852554]
RECEIVED FILE SIZE: 1852554 (904KB/S, 2S)
Downloaded file at 0x30000000, size = 1852544 bytes
Found block size = 0x001c8000
Erasing... ... done
Writing... ... done
Written 1852544 bytes

?注意:在打印USB host is connected. Waiting a download信息後,單擊DNW菜單欄的USB Post | Transmit命令。
  4.安裝文件系統
  接上一步操做,輸入命令loadyaffs root u安裝文件系統,暫時使用開發板廠家提供的示例文件系統。選擇文件系統映像文件root_qtopia_dm9000A43.img,如圖4.32所示。安裝文件系統過程如圖4.33所示。

圖4.32 選擇文件系統映像文件
  正確安裝文件系統後顯示載入yaffs文件系統成功及文件系統的大小,打印以下信息。

Load yaffs OK:
Blocks scanned: 3947, Blocks erased: 3947, Blocks are bad: 0
RECEIVED and Writed FILE SIZE:45779722 (363KB/S, 123S)

  5.啓動系統
  在vivi模式下輸入boot啓動系統,正確進入系統後顯示如圖4.34所示。或者直接重啓開發板進入Linux系統。

圖4.33 安裝文件系統過程

圖4.34 正確進入系統信息
4.5 內 核 升 級
  系統移植還包括內核升級。當開發板提供的內核和編譯器版本過低,不能兼容不少新的驅動和功能時,此時就要着手考慮升級內核。本節將以at91rm9200爲例,介紹爲開發板移植高版本的內核。
4.5.1 準備升級內核文件
  開發板自帶的內核版本爲Linux-2.4.27,編譯器版本爲2.95.3。在開發一些新的應用程序和驅動時,編譯器和內核不支持新的功能。準備將內核升級到2.6版本,編譯器選擇的版本爲3.4.1。須要準備的資源文件列表以下所示。
* 內核:linux-2.6.10.tar.gz;
* 針對at91的內核補丁:2.6.10-at91.patch.gz;
* 交叉編譯器:cross-3.4.1.tar.bz2。
4.5.2 移植過程
  下面詳細介紹一下移植過程。
  (1)將全部文件複製到工做目錄下,而後解壓內核文件和編譯器文件。
  (2)爲內核打補丁。

#cd linu-2.6.10
#patch -p1< 2.6.10-at91.patch.gz

  (3)修改Makefile,修改編譯環境。

ARCH = arm
CROSS_COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-

  (4)修改machine ID。若是這一步省略,會在移植到開發板後Bootloader引導時出現機器ID錯誤的現象。出錯的ID號將以十六進制給出,將其轉化爲十進制,替換mach-types文件中的對應項。這裏移植後報的錯誤是0xFB,即對應十進制251。

#vi /usr/local/arm/linux-2.6.10/arch/arm/tools/mach-types

  找到

at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 262

  將其修改成:

at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 251

  (5)製做uImage文件。在內核目錄下建議一個名爲mkimage的文件,其內容以下:

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin
gzip -v9 linux.bin
./mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage

  (6)對內核進行配置。執行make at91rm9200dk_defconfig實際上就是完成對內核的 配置。

#make at91rm9200dk_defconfig

  其具體配置以下:

* Plug and Play support
* Block devices
RAM disk support (BLK_DEV_RAM) [Y/n/m/?] y
Default number of RAM disks (BLK_DEV_RAM_COUNT) [16] 16
Default RAM disk size (kbytes) (BLK_DEV_RAM_SIZE) [8192] 8192
Initial RAM disk (initrd) support (BLK_DEV_INITRD) [Y/n/?] y
Source directory of cpio_list (INITRAMFS_SOURCE) []
Packet writing on CD/DVD media (CDROM_PKTCDVD) [N/m/y/?] n
* IO Schedulers
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] y
* Multi-device support (RAID and LVM)
* Networking support
Networking support (NET) [Y/n/?] y
* Networking options
Packet socket (PACKET) [Y/n/m/?] y
Unix domain sockets (UNIX) [Y/n/m/?] y
TCP/IP networking (INET) [Y/n/?] y
IP: kernel level autoconfiguration (IP_PNP) [Y/n/?] y
IP: BOOTP support (IP_PNP_BOOTP) [Y/n/?] y
IP: TCP socket monitoring interface (IP_TCPDIAG) [Y/n/m/?] y
* Network packet filtering (replaces ipchains)
* SCTP Configuration (EXPERIMENTAL)
* QoS and/or fair queueing
* Network testing
* Amateur Radio support
* IrDA (infrared) subsystem support
* Bluetooth subsystem support
Network device support (NETDEVICES) [Y/n/?] y
* Ethernet (10 or 100Mbit)
Ethernet (10 or 100Mbit) (NET_ETHERNET) [Y/n/?] y
Generic Media Independent Interface device support (MII) [Y/?] y
AT91RM9200 Ethernet support (ARM_AT91_ETHER) [Y/n/m/?] y
RMII interface (ARM_AT91_ETHER_RMII) [Y/n/?] y
* Ethernet (1000 Mbit)
* Ethernet (10000 Mbit)
* Token Ring devices
* Wireless LAN (non-hamradio)
* Wan interfaces
* SCSI device support
* Fusion MPT device support
* IEEE 1394 (FireWire) support
* I2O device support
* ISDN subsystem
* Input device support
* Userland interfaces
Mouse interface (INPUT_MOUSEDEV) [Y/?] (NEW) y
Horizontal screen resolution (INPUT_MOUSEDEV_SCREEN_X) [1024] 1024
Vertical screen resolution (INPUT_MOUSEDEV_SCREEN_Y) [768] 768
* Input I/O drivers
* Input Device Drivers
* Character devices
* Serial drivers
* Non-8250 serial port support
AT91RM9200 serial port support (SERIAL_AT91) [Y/n/m/?] y
Support for console on AT91RM9200 serial port (SERIAL_AT91_CONSOLE) [Y/n/?] y
Legacy (BSD) PTY support (LEGACY_PTYS) [Y/n/?] y
Maximum number of legacy PTY in use (LEGACY_PTY_COUNT) [256] 256
* IPMI
* Watchdog Cards
Watchdog Timer Support (WATCHDOG) [Y/n/?] y
Disable watchdog shutdown on close (WATCHDOG_NOWAYOUT) [Y/n/?] y
* Watchdog Device Drivers
AT91RM9200 watchdog (AT91_WATCHDOG) [Y/n/m/?] y
* USB-based Watchdog Cards
* Ftape, the floppy tape device driver
SPI driver for AT91 processors (AT91_SPI) [Y/n/?] y
SPI device interface for AT91 processors (AT91_SPIDEV) [Y/n/?] y
* I2C support
I2C support (I2C) [Y/n/m/?] y
I2C device interface (I2C_CHARDEV) [Y/n/m/?] y
* I2C Algorithms
* I2C Hardware Bus support
Atmel AT91RM9200 I2C Two-Wire interface (TWI) (I2C_AT91) [Y/n/m/?] y
* Hardware Sensors Chip support
* Other I2C Chip support
* Multimedia devices
* Digital Video Broadcasting Devices
* File systems
Second extended fs support (EXT2_FS) [Y/n/m/?] y
* CD-ROM/DVD Filesystems
* Pseudo filesystems
/proc file system support (PROC_FS) [Y/n/?] y
/dev file system support (OBSOLETE) (DEVFS_FS) [Y/n/?] y
Automatically mount at boot (DEVFS_MOUNT) [Y/n/?] y
Debug devfs (DEVFS_DEBUG) [N/y/?] n
Virtual memory file system support (former shm fs) (TMPFS) [Y/n/?] y
* Miscellaneous filesystems
Compressed ROM file system support (cramfs) (CRAMFS) [Y/n/m/?] y
* Network File Systems
* Partition Types
* Native Language Support
* Profiling support
* Graphics support
* Console display driver support
* Sound
* Misc devices
* USB support
Support for Host-side USB (USB) [Y/n/m/?] y
USB verbose debug messages (USB_DEBUG) [Y/n/?] y
* Miscellaneous USB options
* USB Host Controller Drivers
SL811HS HCD support (USB_SL811_HCD) [N/m/y/?] n
* USB Device Class drivers
USB Mass Storage support (USB_STORAGE) [N/m/y/?] n
* USB Input Devices
* USB HID Boot Protocol drivers
* USB Imaging devices
* USB Multimedia devices
* Video4Linux support is needed for USB Multimedia device support
* USB Network Adapters
* USB port drivers
* USB Serial Converter support
* USB Miscellaneous drivers
* USB ATM/DSL drivers
* USB Gadget Support
* MMC/SD Card support
* Kernel hacking
Kernel debugging (DEBUG_KERNEL) [Y/n/?] y
* Security options
* Cryptographic options
* Library routines
CRC32 functions (CRC32) [Y/?] y
  上面已經對內核作了詳細的配置,考慮到內容比較多的狀況,省略了沒有配置的選項。能夠經過make menuconfig去查看對System Type(系統類型)的修改狀況以確認進行正確的配置,如圖4.35所示。

圖4.35 系統類型已經被設置爲AT91RM9200  (7)編譯內核生成映像文件。 #make clean#make dep.#/mkimage 4.6 小 結  本章主要講解Linux內核的目錄結構、Linux內核配置選項及裁剪內核、編譯內核。最後結合實例講解內核移植和內核升級的具體過程。在開始接觸內核移植時,不提倡初學者拿到源碼就直接進行裁剪配置,這樣常常會因爲忽略了某個選項致使移植的時候失敗。最好的辦法是首先導入內核自帶的配置,在這些配置的基礎上根據本身的須要進行裁剪。