国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linux內(nèi)核裁剪與移植
第4章  Linux內(nèi)核裁剪與移植
  內(nèi)核,即操作系統(tǒng)。它為底層的可編程部件提供服務(wù),為上層應(yīng)用程序提供執(zhí)行環(huán)境。內(nèi)核裁剪就是對(duì)這些功能進(jìn)行裁剪,選取滿足特定平臺(tái)和需求的功能。不同的硬件平臺(tái)對(duì)內(nèi)核要求也不同,因此從一個(gè)平臺(tái)到另一個(gè)平臺(tái)需要對(duì)內(nèi)核進(jìn)行重新配置和編譯。操作系統(tǒng)從一個(gè)平臺(tái)過渡到另一個(gè)平臺(tái)稱為移植。Linux是一款平臺(tái)適應(yīng)性且容易裁剪的操作系統(tǒng),因此Linux在嵌入式系統(tǒng)得到了廣泛的應(yīng)用。本章將詳細(xì)講解內(nèi)核裁剪與移植的各項(xiàng)技術(shù)。
4.1 Linux內(nèi)核結(jié)構(gòu)
  Linux內(nèi)核采用模塊化設(shè)計(jì),并且各個(gè)模塊源碼以文件目錄的形式存放,在對(duì)內(nèi)核的裁剪和編譯時(shí)非常方便。下面介紹內(nèi)核的主要部分及其文件目錄。
4.1.1 內(nèi)核的主要組成部分
  在第1章中已經(jīng)介紹了Linux內(nèi)核主要的5個(gè)部分:進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口、進(jìn)程通信。在系統(tǒng)移植的時(shí)候,它們是內(nèi)核的基本元素,這5個(gè)部分之間的關(guān)系,如圖4.1所示。

圖4.1 Linux內(nèi)核子系統(tǒng)及其之間的關(guān)系
  進(jìn)程調(diào)度部分負(fù)責(zé)控制進(jìn)程對(duì)CPU的訪問。內(nèi)存管理允許多個(gè)進(jìn)程安全地共享主內(nèi)存區(qū)域。內(nèi)存管理從邏輯上分為硬件無關(guān)部分和硬件相關(guān)部分。硬件無關(guān)部分提供了進(jìn)程的映射和邏輯內(nèi)存的對(duì)換;硬件相關(guān)部分為內(nèi)存管理硬件提供了虛擬接口。虛擬文件系統(tǒng)隱藏了不同類型硬件的具體細(xì)節(jié),為所有的硬件設(shè)備提供了一個(gè)標(biāo)準(zhǔn)的接口,VFS提供了十多種不同類型的文件系統(tǒng)。網(wǎng)絡(luò)接口提供了對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。進(jìn)程通信部分用于支持進(jìn)程間各種不同的通信機(jī)制。進(jìn)程調(diào)度處于核心位置,內(nèi)核的其他子系統(tǒng)都要依賴它,因?yàn)槊總€(gè)子系統(tǒng)都存在進(jìn)程掛起或恢復(fù)過程。
* 進(jìn)程調(diào)度與內(nèi)存管理之間的關(guān)系:這兩個(gè)子系統(tǒng)為互相依賴關(guān)系。在多道程序環(huán)境下,程序要運(yùn)行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程首先就是要將程序和數(shù)據(jù)裝入內(nèi)存。另外,內(nèi)存管理子系統(tǒng)也存在進(jìn)程的掛起和恢復(fù)過程。
* 進(jìn)程間通信與內(nèi)存管理之間的關(guān)系:進(jìn)程間通信子系統(tǒng)要依賴內(nèi)存管理支持共享內(nèi)存通信機(jī)制,通過對(duì)共同的內(nèi)存區(qū)域進(jìn)行操作來達(dá)到通信的目的。
* 虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口之間的關(guān)系:虛擬文件系統(tǒng)通過依賴網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)(NFS),也通過依賴內(nèi)存管理支持RAMDISK設(shè)備。
* 內(nèi)存管理與虛擬文件系統(tǒng)之間的關(guān)系:內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程定期地由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。當(dāng)一個(gè)進(jìn)程存取的內(nèi)存映射被換出時(shí),內(nèi)存管理將會(huì)向文件系統(tǒng)發(fā)出請(qǐng)求,同時(shí),掛起當(dāng)前正在運(yùn)行的進(jìn)程。
  除了上面5個(gè)主要部分,下面將介紹Linux代碼的整體分區(qū)結(jié)構(gòu)。
4.1.2 內(nèi)核源碼目錄介紹
  Linux內(nèi)核代碼以源碼樹的形式存放,如果在安裝系統(tǒng)的時(shí)候已經(jīng)安裝了源碼樹,其源碼樹就在/usr/src/linux下,源碼樹結(jié)構(gòu)如圖4.2所示。

圖4.2 Linux內(nèi)核源碼樹結(jié)構(gòu)
  下面分別針對(duì)圖4.2中各個(gè)部分進(jìn)行介紹,各個(gè)目錄的主要的功能分別如下。
  1.a(chǎn)rch目錄
  arch子目錄包括了所有和體系結(jié)構(gòu)相關(guān)的核心代碼。它的每一個(gè)子目錄都代表一種支持的體系結(jié)構(gòu),例如arm子目錄是關(guān)于ARM平臺(tái)下各種芯片兼容的代碼。
  2.include目錄
  include子目錄包括內(nèi)核編譯時(shí)所需要的大部分頭文件。與平臺(tái)無關(guān)的頭文件在include/linux子目錄下,include/scsi目錄則是有關(guān)scsi設(shè)備的頭文件目錄,與arm相關(guān)的頭文件在include/asm-arm子目錄下。
  3.drivers目錄
  drivers子目錄放置系統(tǒng)所有的設(shè)備驅(qū)動(dòng)程序。有些驅(qū)動(dòng)是與硬件無關(guān)的,而有些驅(qū)動(dòng)是與硬件平臺(tái)相關(guān)。例如,在USB驅(qū)動(dòng)中,主機(jī)控制器有3種規(guī)格:
* OHCI主要為非PC系統(tǒng)上及帶有SiShe ALi芯片組的PC主板上的USB芯片,嵌入式系統(tǒng)一般使用該驅(qū)動(dòng)。
* UHCI大多為Intel和Via主板上的USB控制器芯片。相對(duì)OHCI而言UHCI的硬件電路比較簡(jiǎn)單,同時(shí)其成本也比較低,但驅(qū)動(dòng)復(fù)雜,但它們都是在USB 1.1規(guī)范同時(shí)提出的。
* EHCI由USB 2.0規(guī)范所提出,它兼容OHCI和UHCI。
  4.fs目錄
  fs子目錄列出了Linux支持的所有文件系統(tǒng),目前Linux支持ext2、vfat、ntfs、yaffs2、ramfs、cramfs和romfs等多種文件系統(tǒng)。在嵌入式系統(tǒng)中常用的閃存設(shè)備的文件系統(tǒng)有cramfs、romfs、ramfs、jffs2、yaffs等文件系統(tǒng)。
  5.init目錄
  init子目錄包含核心的初始化代碼(注意,不是系統(tǒng)的引導(dǎo)代碼)。它包含兩個(gè)文件main.c和version.c,這是研究核心如何工作的一個(gè)非常好的起點(diǎn)。
  6.ipc目錄
  ipc子目錄包含核心進(jìn)程間的通信代碼。Linux下進(jìn)程間通信機(jī)制主要包括管道、信號(hào)、消息隊(duì)列、共享內(nèi)存、信號(hào)量、套接口。
  7.kernel目錄
  kernel子目錄包含內(nèi)核管理的核心代碼。與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下。
  8.net目錄
  net子目錄里是核心的網(wǎng)絡(luò)部分代碼,其每個(gè)子目錄存放一個(gè)具體的網(wǎng)絡(luò)協(xié)議或者網(wǎng)絡(luò)模型代碼。
  9.mm目錄
  mm子目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下。
  10.scripts目錄
  scripts子目錄包含用于配置核心的腳本文件。
  11.lib目錄
  lib子目錄包含了核心的庫(kù)代碼,與處理器結(jié)構(gòu)相關(guān)的庫(kù)代碼被放在arch/*/lib/目錄下。
4.2 內(nèi)核配置選項(xiàng)
  內(nèi)核配置通常是對(duì)內(nèi)核支持的各個(gè)功能進(jìn)行取舍配置,將配置的方案保存到configure文件中。在編譯內(nèi)核的時(shí)候,就會(huì)根據(jù)此配置對(duì)內(nèi)核進(jìn)行取舍編譯。在源碼目錄下通過make menuconfig命令進(jìn)入內(nèi)核的配置界面,如圖4.3所示。在對(duì)內(nèi)核功能進(jìn)行配置時(shí),使用鍵盤的方向鍵移動(dòng)光標(biāo)位置,使用Enter鍵選擇菜單,使用空格鍵修改配置選項(xiàng)。

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

4.2.2 內(nèi)核模塊加載方式支持選項(xiàng)
  菜單選項(xiàng)(Loadable module support)的子菜單中包含一些內(nèi)核模塊加載方式選項(xiàng),如表4.2所示。如果對(duì)模塊的加載方式有特殊要求,如可以強(qiáng)制卸載正在使用的模塊的要求,那么可以配置相關(guān)的模塊加載方式。
表4.2 內(nèi)核模塊加載方式
選 項(xiàng) 名
說 明
  Forced module loading
 允許強(qiáng)制加載模塊驅(qū)動(dòng)
  Module unloading
 允許卸載已經(jīng)加載的模塊,建議選擇
  Forced module unloading
 允許強(qiáng)制卸載正在運(yùn)行的模塊,該功能危險(xiǎn),建議不選
  Module versioning support
 允許使用其他內(nèi)核版本的模塊,建議不選
  Source checksum for all modules
 為所有的模塊校驗(yàn)源碼,可以不選

4.2.3 系統(tǒng)調(diào)用、類型、特性、啟動(dòng)相關(guān)選項(xiàng)
  菜單選項(xiàng)(Block layer)的子菜單中包含一些系統(tǒng)調(diào)用方式選項(xiàng),如表4.3所示。在配置內(nèi)核時(shí)可以不選該菜單選項(xiàng)。
表4.3 系統(tǒng)調(diào)用方式
選 項(xiàng) 名
說 明
Support for Large Block Devices and files
使用大容量塊設(shè)備時(shí)選擇
Support for tracing block io actions
支持塊隊(duì)列I/O跟蹤
Block layer SG support v4
支持通用scsi塊設(shè)備第4版
Block layer data integrity support
支持塊設(shè)備數(shù)據(jù)完整性
IO Schedulers
I/O調(diào)度器

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

  菜單選項(xiàng)(Boot Options)的子菜單中包含一些系統(tǒng)啟動(dòng)選項(xiàng),如表4.5所示。
表4.5 系統(tǒng)啟動(dòng)
選 項(xiàng) 名
說 明
(0)Compressed ROM boot loader base address
xImage存放的基地址
(0)Compressed ROM boot loader BSS address
BSS地址
()Default Kernel command string
內(nèi)核啟動(dòng)參數(shù)
Kernel Execute-In-Place from ROM
從ROM中直接運(yùn)行內(nèi)核,該內(nèi)核使用make xipImage編譯
(0x00080000)XIP Kernel Physical Location
選擇XIP后,內(nèi)核存放的物理地址
Kexec system call
Kexec系統(tǒng)呼叫
4.2.4 網(wǎng)絡(luò)協(xié)議支持相關(guān)選項(xiàng)
  菜單選項(xiàng)(Networking Support)的子菜單中包含一些網(wǎng)絡(luò)協(xié)議支持的選項(xiàng),如表4.6所示?;局恍枰贜etworking options子菜單中選擇具體所需的網(wǎng)絡(luò)協(xié)議即可。
表4.6 網(wǎng)絡(luò)協(xié)議
選 項(xiàng) 名
說 明
Networking options
該菜單的子菜單包含支持的各種具體網(wǎng)絡(luò)協(xié)議,在開發(fā)中可以根據(jù)需要進(jìn)行配置
Amateur Radio support
業(yè)余無線電支持,一般不選
CAN bus subsystem support
CAN總線子系統(tǒng)支持
IrDA (infrared) subsystem support
紅外線支持
Bluetooth subsystem support
藍(lán)牙支持
RxRPC session sockets
RxRPC會(huì)話套接字支持
Phonet protocols family
Phonet協(xié)議族支持
Wireless
無線電協(xié)議支持
WiMAX Wireless Broadband support
WiMAX無線寬帶支持
RF switch subsystem support
RF交換子系統(tǒng)支持
Plan 9 Resource Sharing Support (9P2000)
9計(jì)劃資源共享支持

4.2.5 設(shè)備驅(qū)動(dòng)支持相關(guān)選項(xiàng)
  菜單選項(xiàng)(Device drivers)的子菜單中包含一些設(shè)備驅(qū)動(dòng)的選項(xiàng),如表4.7所示。重點(diǎn)說明了MTD設(shè)備相關(guān)的驅(qū)動(dòng)。需要支持設(shè)備驅(qū)動(dòng)時(shí)可以配置相關(guān)的選項(xiàng)。
表4.7 設(shè)備驅(qū)動(dòng)
選 項(xiàng) 名
說 明
Connector - unified userspace <-> kernelspace linker
用戶空間和內(nèi)核空間的統(tǒng)一連接器
Memory Technology Devices (MTD) support
MTD設(shè)備支持,嵌入式系統(tǒng)使用
->Debugging
調(diào)試功能
->MTD concatenating support
連接多個(gè)MTD設(shè)備,例如使用JFFS2文件系統(tǒng)管理多片F(xiàn)lash的情形。只有一片F(xiàn)lash時(shí)不選
->MTD partitioning support
Flash分區(qū)支持,建議選擇
->MTD tests support
MTD測(cè)試支持
->RedBoot partition table parsing
使用RedBoot解析Flash分區(qū)表,如果需要讀取這個(gè)分區(qū)表的信息,選擇此項(xiàng)
->Command line partition table parsing
允許通過內(nèi)核命令行傳遞MTD分區(qū)表信息
->ARM Firmware Suite partition parsing
使用AFS分區(qū)信息
->TI AR7 partitioning support
AR7分區(qū)支持
->Direct char device access to MTD devices
將系統(tǒng)中的MTD設(shè)備看作字符設(shè)備進(jìn)行讀/寫
  續(xù)表
選 項(xiàng) 名
說 明
->Caching block device access to MTD devices
文件系統(tǒng)掛載后,模擬塊設(shè)備進(jìn)行訪問。常用于只讀文件系統(tǒng)。如果是DiskOnChip使用NFTL方式
->FTL (Flash Translation Layer) support
提供對(duì)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支持,為嵌入式系統(tǒng)提供類似BIOS 功能
-> NAND SSFDC (SmartMedia) read only translation layer
NAND SSFDC只讀翻譯層
-> Log panic/oops to an MTD buffer
MTD緩沖區(qū)日志
-> RAM/ROM/Flash chip drivers
RAM/ROM/Flash芯片驅(qū)動(dòng)
->Mapping drivers for chip access
為芯片的訪問方式選擇Mapping驅(qū)動(dòng)
-> Self-contained MTD device drivers
自身包含MTD設(shè)備驅(qū)動(dòng),一般不選
->NAND Device Support
NAND Flash支持
->OneNAND Device Support
One NAND相關(guān)驅(qū)動(dòng)
->LPDDR flash memory drivers
LPDDR Flash內(nèi)存驅(qū)動(dòng)
->UBI - Unsorted block images
只提供UBI支持
Parallel port support
并口支持
Block devices
紅外線支持
Bluetooth subsystem support
藍(lán)牙支持
RxRPC session sockets
RxRPC會(huì)話套接字支持
Phonet protocols family
Phonet協(xié)議族支持
Wireless
無線電協(xié)議支持
WiMAX Wireless Broadband support
WiMAX無線寬帶支持
RF switch subsystem support
RF交換子系統(tǒng)支持
Plan 9 Resource Sharing Support (9P2000)
9計(jì)劃資源共享支持

4.2.6 文件系統(tǒng)類型支持相關(guān)選項(xiàng)
  菜單選項(xiàng)(File Systems)的子菜單中包含一些文件系統(tǒng)配置的選項(xiàng),如表4.8所示。內(nèi)核移植完成后,通常需要制作文件系統(tǒng),可以在此部分選擇內(nèi)核支持的文件系統(tǒng)格式。
表4.8 文件系統(tǒng)
選 項(xiàng) 名
說 明
Second extended fs support
Ext2文件系統(tǒng)支持
Ext3 journalling file system support
Ext3文件系統(tǒng)支持
The Extended 4 (ext4) filesystem
Ext4文件系統(tǒng)支持
Reiserfs support
Reiserfs文件系統(tǒng)支持
  續(xù)表
選 項(xiàng) 名
說 明
JFS filesystem support
JFS文件系統(tǒng)支持
XFS filesystem support
XFS文件系統(tǒng)支持
OCFS2 file system support
OCFS2文件系統(tǒng)支持
Btrfs filesystem (EXPERIMENTAL)
Unstable disk format
Btrfs文件系統(tǒng),不穩(wěn)定,建議不選擇
Dnotify support
文件系統(tǒng)變化通知機(jī)制支持
Inotify file change notification support
Inotify是Dnotify的替代者,在高版內(nèi)核中默認(rèn)支持
Quota support
磁盤限額支持
Kernel automounter support
自動(dòng)掛載遠(yuǎn)程文件系統(tǒng),如NFS
Kernel automounter version 4 support
(also supports v3)
自動(dòng)掛載遠(yuǎn)程文件系統(tǒng),對(duì)版本4和版本3都支持
FUSE (Filesystem in Userspace) support
在用戶空間掛載文件系統(tǒng),建議選擇
CD-ROM/DVD Filesystems
ISO 9660,UDF等文件系統(tǒng)支持
DOS/FAT/NT Filesystems
FAT/NTFS文件系統(tǒng)支持。如果用于訪問存儲(chǔ)設(shè)備,并且包含像Windows文件時(shí)選上該選項(xiàng)
Pseudo filesystems
偽操作系統(tǒng),多指內(nèi)存中的操作系統(tǒng)
Miscellaneous filesystems
雜項(xiàng)文件系統(tǒng),包括ADFS,BFS,BeFS,HPFS等,比較少用,建議不選
Network File Systems
網(wǎng)絡(luò)文件系統(tǒng)。其中只有NFS在產(chǎn)品開發(fā)過程中用。在開發(fā)過程可以選用
Partition Types
分區(qū)類型。該菜單下提供很多中類型,但在嵌入式產(chǎn)品中很少用,建議不選
Distributed Lock Manager (DLM)
分布式鎖管理器

4.2.7 安全相關(guān)選項(xiàng)
  菜單選項(xiàng)(Security options)的子菜單中包含一些安全配置選項(xiàng)。很少用,建議不選。菜單選項(xiàng)(Kernel hacking)的子菜單中包含內(nèi)核黑客配置選項(xiàng)。建議不選。菜單選項(xiàng)(Cryptographic API)的子菜單中包含內(nèi)核加密算法配置選項(xiàng)。很少用,建議不選。
4.2.8 其他選項(xiàng)
  菜單選項(xiàng)(Bus Support)的子菜單中包含一些總線接口支持,嵌入式系統(tǒng)可以不選。菜單選項(xiàng)(CUP Power Management)的子菜單中包含電源管理選項(xiàng),嵌入式系統(tǒng)可以不選。菜單選項(xiàng)(Floating)的子菜單中包含一些總線接口支持,嵌入式系統(tǒng)可以不選。菜單選項(xiàng)(Library routines)的子菜單中包含一些庫(kù)配置選項(xiàng),主要提供CRC支持,在開發(fā)通信類產(chǎn)品時(shí)可以選擇對(duì)應(yīng)的CRC。
4.3 內(nèi)核裁剪及編譯
  經(jīng)過對(duì)內(nèi)核的認(rèn)識(shí)和對(duì)裁剪配置項(xiàng)的了解,接下來實(shí)際操作。針對(duì)S3C2440開發(fā)板進(jìn)行裁剪Linux內(nèi)核。
4.3.1 安裝內(nèi)核源代碼
  在前面章節(jié)中已經(jīng)介紹了建立交叉編譯環(huán)境。如果還沒有建立編譯環(huán)境,請(qǐng)參考相關(guān)章節(jié)。獲得源碼可以直接從網(wǎng)上下載開發(fā)板對(duì)應(yīng)的源碼。該源碼相比Linux基本內(nèi)核源碼增加了對(duì)應(yīng)平臺(tái)相關(guān)的內(nèi)容。將源代碼壓縮包復(fù)制到/usr/local/arm目錄下,使用tar命令解壓源碼。

tar –zxvf linux-2.6.29-HY2440.tgz

  tar命令帶上zxvf參數(shù)可以看到詳細(xì)的解壓過程,如圖4.4所示。

圖4.4 內(nèi)核解壓過程
4.3.2 檢查編譯環(huán)境設(shè)置
  源代碼解壓完成后,進(jìn)入linux-2.6.29目錄下,然后使用VI命令編輯Mackfile。確定編譯環(huán)境為arm交叉編譯工具與本機(jī)安裝的路徑和一致。

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

4.3.3 配置內(nèi)核
  使用make menuconfig命令進(jìn)入內(nèi)核配置界面,如圖4.3所示。注意在linux-2.6.29目錄下,執(zhí)行make menuconfig命令才能正確進(jìn)入配置界面。下面給出一個(gè)內(nèi)核的基本配置。
  (1)在一般General setup配置項(xiàng)中選擇子項(xiàng)System V IPC。由于要支持處理器在程序之間同步和交換信息,如果不選這項(xiàng),很多程序?qū)⑦\(yùn)行不起來,所以選擇General setup配置項(xiàng)中的子項(xiàng)System V IPC,其他可以不選,如圖4.5所示。在此配置界面中還有一個(gè)選項(xiàng)[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support在制作Ramdisk文件系統(tǒng)時(shí),應(yīng)該選上該選項(xiàng),如圖4.6所示。

圖4.5 配置System V IPC

圖4.6 配置RAM disk支持
 ?。?)在模塊加載方式中,只選擇子項(xiàng)Module unloading,其他可以不選。因?yàn)镕orce module loading和Force module unloading會(huì)造成安全隱患,所以一般不選。Module unloading支持動(dòng)態(tài)卸載模塊,減少內(nèi)核占用的資源。如圖4.7所示模塊加載方式選項(xiàng)配置。

圖4.7 模塊加載方式選項(xiàng)配置
 ?。?)如果系統(tǒng)沒有對(duì)磁盤調(diào)度方式有特殊的要求,對(duì)block layer可以不作任何配置。
  (4)在系統(tǒng)類型中選擇S3C3410 DMA support和Force UART FIFO on during boot process,選DMA support選項(xiàng)是為了支持2440直接內(nèi)存訪問。選UART FIFO可以支持一般的串口通信協(xié)議。如圖4.8所示為系統(tǒng)類型選項(xiàng)配置。

圖4.8 系統(tǒng)類型選項(xiàng)配置
  選擇S3C2440 Machines進(jìn)入S3C2440 Machines的配置界面,選擇對(duì)應(yīng)開發(fā)板類型的支持,筆者的開發(fā)板為Mini2440,則對(duì)應(yīng)的配置如圖4.9所示。
 ?。?)對(duì)于總線支持Bus support配置,一般情況下該選項(xiàng)可以不作配置,除非在開發(fā)對(duì)應(yīng)的驅(qū)動(dòng)時(shí)。

圖4.9 選擇對(duì)應(yīng)的開發(fā)板類型
 ?。?)在對(duì)系統(tǒng)特性選項(xiàng)進(jìn)行配置時(shí),建議對(duì)選項(xiàng)Use the ARM EABI to compile the kernel和選項(xiàng)Allow old ABI binaries to run with this kernel(EXPERIMENTAL)(NEW)進(jìn)行配置,如圖4.10所示。如果交叉編譯工具的版本為arm-linux-gcc4.3.2時(shí),沒有對(duì)這兩個(gè)選項(xiàng)進(jìn)行配置,就會(huì)在燒寫完文件系統(tǒng)后出現(xiàn)系統(tǒng)無法啟動(dòng)的錯(cuò)誤,錯(cuò)誤提示為Kernel panic - not syncing: Attempted to kill init!

圖4.10 系統(tǒng)類型選項(xiàng)配置
注意:ARM EABI有許多革新之處,其中最突出的改進(jìn)就是Float Point Performance,它使用Vector Float Point(矢量浮點(diǎn)),因此可以極大提高涉及浮點(diǎn)運(yùn)算程序的運(yùn)算速度。如果編譯內(nèi)核的編譯器支持EABI,則在內(nèi)核中也應(yīng)該選擇對(duì)該項(xiàng)的支持。
  (7)對(duì)啟動(dòng)參數(shù)的配置,Bootloader啟動(dòng)后會(huì)將板子的信息、Ramdisk大小、命令行字符串等信息傳遞給內(nèi)核,然后開始啟動(dòng)內(nèi)核,文件系統(tǒng)為Ramdisk時(shí)一般要配置該選項(xiàng),對(duì)選項(xiàng)的具體地址和參數(shù)應(yīng)該根據(jù)具體板子、內(nèi)核大小、文件系統(tǒng)大小來定,該配置界面如圖4.11所示。

圖4.11 啟動(dòng)參數(shù)配置
 ?。?)選項(xiàng)CPU Power Management一般不作配置。
 ?。?)選項(xiàng)Floating point emulation一般不作配置。
 ?。?0)選項(xiàng)Userspace binary formats,配置Kernel support for ELF binaries,如圖4.12 所示。
 ?。?1)對(duì)于電源管理選項(xiàng)一般不作配置。

圖4.12 配置Kernel support for ELF binaries選項(xiàng)
  (12)對(duì)于網(wǎng)絡(luò)選項(xiàng)的支持,配置Networking options中的TCP/IP networking和Unix domain sockets,配置如圖4.13所示。在Networking support下的其他選項(xiàng),在開發(fā)對(duì)應(yīng)的驅(qū)動(dòng)時(shí)將對(duì)應(yīng)的選項(xiàng)選上。

圖4.13 配置Networking options
 ?。?3)設(shè)備驅(qū)動(dòng)選擇,設(shè)備驅(qū)動(dòng)選項(xiàng)是最復(fù)雜也是用得最多的配置選項(xiàng),特別是在開發(fā)驅(qū)動(dòng)和系統(tǒng)移植的時(shí)候。
  在設(shè)備驅(qū)動(dòng)選項(xiàng)中添加MTD支持,配置MTD partitioning support和Direct char device access to MTDdevices。配置MTD partitioning support是支持對(duì)Flash?分區(qū)的支持,配置Direct char device access to MTDdevices是支持將系統(tǒng)中的MTD設(shè)備看作字符設(shè)備進(jìn)行讀/寫,如圖4.14所示為驅(qū)動(dòng)選項(xiàng)配置。

圖4.14 驅(qū)動(dòng)選項(xiàng)配置
  在網(wǎng)路設(shè)備驅(qū)動(dòng)配置窗口中,為了使開發(fā)板支持網(wǎng)卡驅(qū)動(dòng)選擇Ethernet(10 or 100Mbit),如果希望支持ppp撥號(hào)還可以選擇對(duì)ppp協(xié)議的支持等,可以根據(jù)具體的開發(fā)進(jìn)行配置,如圖4.15所示,進(jìn)入Ethernet(10 or 100Mbit)配置中選擇對(duì)應(yīng)的網(wǎng)卡驅(qū)動(dòng),如圖4.16所示。

圖4.15 配置網(wǎng)絡(luò)協(xié)議的支持

圖4.16 配置對(duì)DM9000支持
  在音頻設(shè)備驅(qū)動(dòng)時(shí),應(yīng)該配置Sound card support,在該配置窗口下有OSS驅(qū)動(dòng)框架和ALSA驅(qū)動(dòng)框架,其配置界面如圖4.17所示。

圖4.17 配置聲卡驅(qū)動(dòng)的支持
  在對(duì)驅(qū)動(dòng)框架Advanced Linux Sound Architecture進(jìn)行配置時(shí),如果音頻應(yīng)用程序需要支持?jǐn)?shù)字音頻接口、混音接口,則需要配置OSS Mixer API和OSS PCM(digital audio)API,如圖4.18所示。另外還要對(duì)開發(fā)板具體的芯片支持,如Mini2440采用的UDA134x,則還要對(duì)具體的芯片驅(qū)動(dòng)進(jìn)行配置,如圖4.19所示。當(dāng)然在配置具體音頻驅(qū)動(dòng)支持前應(yīng)該先在內(nèi)核代碼中添加相應(yīng)的驅(qū)動(dòng)。

圖4.18 對(duì)數(shù)字音頻接口和混音接口支持

圖4.19 對(duì)具體芯片和驅(qū)動(dòng)的支持
  USB設(shè)備驅(qū)動(dòng),也是應(yīng)該要用到的內(nèi)核配置選項(xiàng),在開發(fā)USB主機(jī)驅(qū)動(dòng)時(shí)應(yīng)該配置OHCI HCD support選項(xiàng),在開發(fā)USB存儲(chǔ)設(shè)備驅(qū)動(dòng)時(shí)配置USB Mass Storage support選項(xiàng),如圖4.20所示。

圖4.20 USB設(shè)備驅(qū)動(dòng)配置
  在開發(fā)鍵盤、鼠標(biāo)等輸入設(shè)備驅(qū)動(dòng)時(shí),應(yīng)該配置HID Devices選項(xiàng)。在開發(fā)SD卡驅(qū)動(dòng)時(shí)應(yīng)該配置MMC/SD/SDIO card support選項(xiàng)。
 ?。?4)文件系統(tǒng)選擇也是比較重要的部分,在文件系統(tǒng)配置選項(xiàng)時(shí),應(yīng)該根據(jù)所用的文件系統(tǒng)來添加對(duì)應(yīng)的文件系統(tǒng)支持。筆者用到了網(wǎng)絡(luò)文件系統(tǒng)和YAFFS2文件系統(tǒng),在內(nèi)核中添加對(duì)NFS和YAFFS2文件系統(tǒng)的支持,如圖4.21和圖4.22所示。

圖4.21 對(duì)NFS的支持

圖4.22 對(duì)YAFFS2的支持
  如果開發(fā)板在掛載其他存儲(chǔ)設(shè)備時(shí),這些存儲(chǔ)設(shè)備還包含中文時(shí),為了正確掛載這些設(shè)備,則應(yīng)該在Native language support中添加對(duì)字符編碼的設(shè)置,如圖4.23所示為支持簡(jiǎn)體中文的配置。

圖4.23 對(duì)字符編碼的支持
  (15)剩下的內(nèi)核選項(xiàng)一般不作配置,退出內(nèi)核的配置界面并保存配置。
4.3.4 編譯內(nèi)核
  如果是第一次編譯內(nèi)核就不用清理以前的映像文件。否則可以使用make clean命令清理以前編譯的結(jié)果。在linux-2.6.29目錄下使用make dep和make zImage命令生成內(nèi)核映像文件,編譯的過程如圖4.24所示。

make clean
make dep
make zImage

注意:make dep是當(dāng)程序之間有依賴關(guān)系的時(shí)候,程序發(fā)生更新時(shí),依賴的程序會(huì)自動(dòng)更新。
  如果編譯成功,最后會(huì)打印生成內(nèi)核映像文件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 內(nèi)核映像文件移植到ARM板
  4.3節(jié)中,介紹了編譯內(nèi)核映像文件。本節(jié)中介紹將映像文件下載到S3C2440開發(fā)板上。如果開發(fā)板沒有燒寫B(tài)ootloader,或者上位機(jī)沒有安裝下載映像文件工具DNW,請(qǐng)參考前面的相關(guān)章節(jié)。在這里依然可以暫時(shí)使用廠家自帶的文件系統(tǒng)。等后面講定制文件系統(tǒng)后,就可以使用自制的文件系統(tǒng)。
4.4.1 移植準(zhǔn)備
  將4.3節(jié)生成的映像文件復(fù)制到Windows目錄下,將要下載的文件系統(tǒng)放映像文件、內(nèi)核映像文件放在一起,便于下載。
 ?。?)將開發(fā)板與上位機(jī)正確連接,確定開發(fā)板電源已經(jīng)插上,且開發(fā)板處于關(guān)閉狀態(tài);串口線已經(jīng)正確連接;USB線未連接。運(yùn)行DNW工具,此時(shí)DNW的COM和USB狀態(tài)如圖4.25所示。
 ?。?)確定上位機(jī)與開發(fā)板相連的串口編號(hào)。這里用的是筆記本,沒有串口,采用USB轉(zhuǎn)串口。在Windows設(shè)備管理器下可以看到與開發(fā)板相連的串口為COM4,如圖4.26 所示。
 ?。?)選擇Configuration | Options命令,進(jìn)入串口配置界面,將波特率設(shè)置為115200,COM Port為設(shè)置COM4,下載地址設(shè)置為0x32000000,如圖4.27所示。配置完成后單擊OK按鈕保存配置。

圖4.25 未連接前DNW狀態(tài) 圖4.26 確定與開發(fā)板相連的串口
  (4)選擇Serial Port | connect命令,DNW狀態(tài)應(yīng)該變成如圖4.28所示的狀態(tài)。

圖4.27 確定與開發(fā)板相連的串口 圖4.28 串口配置正確后狀態(tài)
 ?。?)確定以上步驟正確后,通過USB線將上位機(jī)和開發(fā)板連接起來。按住上位機(jī)的空格鍵,啟動(dòng)開發(fā)板。如果是第一次采用USB下載系統(tǒng)將會(huì)提示安裝驅(qū)動(dòng)。根據(jù)提示安裝完驅(qū)動(dòng)之后,DNW將進(jìn)入vivi模式。此時(shí)USB狀態(tài)為OK,在DNW顯示正確的vivi信息,如圖4.29所示。

圖4.29 進(jìn)入vivi模式
4.4.2 燒寫系統(tǒng)
  燒寫Linux系統(tǒng)的整個(gè)過程包括格式化Nand Flash、燒寫B(tài)ootloader、燒寫內(nèi)核映像文件和燒寫文件系統(tǒng)映像文件。下面具體介紹每個(gè)步驟的詳細(xì)過程。
  1.分區(qū)格式化Flash
  在vivi模式下輸入:bon part 0 192k 1216k,將Nand Flash分成三個(gè)區(qū)。三個(gè)區(qū)的大小如下所示。
* 0~192k:大小為192k;
* 192k~1216k:大小為1M;
* 1216k~64M:大小為63M。
  執(zhí)行分區(qū)命令后,會(huì)在屏幕上打印下列信息:

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

  以上信息顯示分區(qū)的起始地址。

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

  以上信息詳細(xì)打印了分區(qū)大小、壞區(qū)大小和分區(qū)的起始地址等信息。
注意:分區(qū)后不能掉電或者關(guān)電,因?yàn)榇藭r(shí)Nand Flash中已經(jīng)被清空。否則需要按照第3章介紹的方法使用H-JTAG重新燒寫B(tài)ootloader。
  2.燒寫B(tài)ootloader
  在vivi模式下輸入load flash vivi u命令。DNW進(jìn)入等待下載狀態(tài)后,選擇DNW菜單欄的USB Post | Transmit命令,選擇vivi.bin文件。燒寫完成后會(huì)打印如下信息。

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

  如果燒寫成功,就會(huì)打印Writing… …done。
注意:在打印USB host is connected. Waiting a download信息后,單擊DNW菜單欄的USB Post|Transmit命令。出現(xiàn)選擇文件對(duì)話框,選擇文件后開始燒寫B(tài)ootloader。
  3.下載Linux內(nèi)核文件
  在vivi模式下輸入load flash kernel u命令,DNW進(jìn)入等待下載狀態(tài)后,單擊DNW菜單欄的USB Post | Transmit命令,選擇4.4.1節(jié)生成的內(nèi)核文件zImage,如圖4.30所示。下載內(nèi)核的過程如圖4.31所示。

圖4.30 選擇內(nèi)核文件

圖4.31 下載內(nèi)核過程
  正確下載內(nèi)核完成信息如下:

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.安裝文件系統(tǒng)
  接上一步操作,輸入命令loadyaffs root u安裝文件系統(tǒng),暫時(shí)使用開發(fā)板廠家提供的示例文件系統(tǒng)。選擇文件系統(tǒng)映像文件root_qtopia_dm9000A43.img,如圖4.32所示。安裝文件系統(tǒng)過程如圖4.33所示。

圖4.32 選擇文件系統(tǒng)映像文件
  正確安裝文件系統(tǒng)后顯示載入yaffs文件系統(tǒng)成功及文件系統(tǒng)的大小,打印如下信息。

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

  5.啟動(dòng)系統(tǒng)
  在vivi模式下輸入boot啟動(dòng)系統(tǒng),正確進(jìn)入系統(tǒng)后顯示如圖4.34所示?;蛘咧苯又貑㈤_發(fā)板進(jìn)入Linux系統(tǒng)。

圖4.33 安裝文件系統(tǒng)過程

圖4.34 正確進(jìn)入系統(tǒng)信息
4.5 內(nèi) 核 升 級(jí)
  系統(tǒng)移植還包括內(nèi)核升級(jí)。當(dāng)開發(fā)板提供的內(nèi)核和編譯器版本太低,不能兼容很多新的驅(qū)動(dòng)和功能時(shí),此時(shí)就要著手考慮升級(jí)內(nèi)核。本節(jié)將以at91rm9200為例,介紹為開發(fā)板移植高版本的內(nèi)核。
4.5.1 準(zhǔn)備升級(jí)內(nèi)核文件
  開發(fā)板自帶的內(nèi)核版本為L(zhǎng)inux-2.4.27,編譯器版本為2.95.3。在開發(fā)一些新的應(yīng)用程序和驅(qū)動(dòng)時(shí),編譯器和內(nèi)核不支持新的功能。準(zhǔn)備將內(nèi)核升級(jí)到2.6版本,編譯器選擇的版本為3.4.1。需要準(zhǔn)備的資源文件列表如下所示。
* 內(nèi)核:linux-2.6.10.tar.gz;
* 針對(duì)at91的內(nèi)核補(bǔ)丁:2.6.10-at91.patch.gz;
* 交叉編譯器:cross-3.4.1.tar.bz2。
4.5.2 移植過程
  下面詳細(xì)介紹一下移植過程。
 ?。?)將所有文件復(fù)制到工作目錄下,然后解壓內(nèi)核文件和編譯器文件。
 ?。?)為內(nèi)核打補(bǔ)丁。

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

 ?。?)修改Makefile,修改編譯環(huán)境。

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

 ?。?)修改machine ID。如果這一步省略,會(huì)在移植到開發(fā)板后Bootloader引導(dǎo)時(shí)出現(xiàn)機(jī)器ID錯(cuò)誤的現(xiàn)象。出錯(cuò)的ID號(hào)將以十六進(jìn)制給出,將其轉(zhuǎn)化為十進(jìn)制,替換mach-types文件中的對(duì)應(yīng)項(xiàng)。這里移植后報(bào)的錯(cuò)誤是0xFB,即對(duì)應(yīng)十進(jìn)制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文件。在內(nèi)核目錄下建議一個(gè)名為mkimage的文件,其內(nèi)容如下:

/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

 ?。?)對(duì)內(nèi)核進(jìn)行配置。執(zhí)行make at91rm9200dk_defconfig實(shí)際上就是完成對(duì)內(nèi)核的 配置。

#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
  上面已經(jīng)對(duì)內(nèi)核做了詳細(xì)的配置,考慮到內(nèi)容比較多的情況,省略了沒有配置的選項(xiàng)??梢酝ㄟ^make menuconfig去查看對(duì)System Type(系統(tǒng)類型)的修改情況以確認(rèn)進(jìn)行正確的配置,如圖4.35所示。

圖4.35 系統(tǒng)類型已經(jīng)被設(shè)置為AT91RM9200
 ?。?)編譯內(nèi)核生成映像文件。

#make clean
#make dep
.#/mkimage

4.6 小 結(jié)
  本章主要講解Linux內(nèi)核的目錄結(jié)構(gòu)、Linux內(nèi)核配置選項(xiàng)及裁剪內(nèi)核、編譯內(nèi)核。最后結(jié)合實(shí)例講解內(nèi)核移植和內(nèi)核升級(jí)的具體過程。在開始接觸內(nèi)核移植時(shí),不提倡初學(xué)者拿到源碼就直接進(jìn)行裁剪配置,這樣經(jīng)常會(huì)由于忽略了某個(gè)選項(xiàng)導(dǎo)致移植的時(shí)候失敗。最好的辦法是首先導(dǎo)入內(nèi)核自帶的配置,在這些配置的基礎(chǔ)上根據(jù)自己的需要進(jìn)行裁剪。
第2篇 系統(tǒng)移植技術(shù)篇
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
4.3.3 配置內(nèi)核(4)
【轉(zhuǎn)】Linux內(nèi)核裁剪的具體步驟 - 沉默 - ChinaUnix個(gè)人空間 - Powe...
redhat as 3.0 上精簡(jiǎn)并編譯系統(tǒng)內(nèi)核
linux menuconfig配置
一種創(chuàng)建小型化Linux系統(tǒng)的方法
S3C2440移植linux3.4.2內(nèi)核之內(nèi)核裁剪
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服