玩轉(zhuǎn)Linux內(nèi)核編譯配置(menuconfig)、文件系統(tǒng)制作
一、Linux內(nèi)核配置原理
Linux內(nèi)核的配置系統(tǒng)由三個部分組成,分別是:
Makefile:分布在 Linux 內(nèi)核源代碼根目錄及各層目錄中,定義 Linux 內(nèi)核的編譯規(guī)則;
配置文件(config.in):給用戶提供配置選擇的功能;
配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供基于字符界面、基于 Ncurses 圖形界面以及基于 Xwindows 圖形界面的用戶配置界面,各自對應(yīng)于 Make config、Make menuconfig 和 make xconfig)。
Linux 內(nèi)核的編譯菜單有3中方法:
make config:進入命令行,可以一行一行的配置,這不方便使用,但用命令執(zhí)行一遍會對編譯過程有更深了解,這里不具體介紹。
make menuconfig:進入我們熟悉的 menuconfig 菜單,圖形化界面選擇配置
make xconfig:在2.4.X 以及以前版本中 xconfig 菜單是基于 TCL/TK 的圖形庫的,沒有接觸過。。貌似淘汰了。
Menuconfig配置內(nèi)核原理:
在Linux里面我們所看到的menuconfig界面是通過配置內(nèi)核頂層的Kconfig產(chǎn)生的,而當輸入make menuconfig命令的時候系統(tǒng)會讀取Makefile來解析Kconfig。
通常會在Kconfig里面編寫以下四項:
模塊的名字,用module開頭;
選項,通常設(shè)為bool(二選一)或者trastate(三選一);
默認選項;
幫助說明。
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。?!前100名進群領(lǐng)取,額外贈送一份價值699的內(nèi)核資料包(含視頻教程、電子書、實戰(zhàn)項目及代碼)? ?

二、Menuconfig主要功能選項介紹:
1.在源碼目錄鍵入# make menuconfig ARCH=arm 后出現(xiàn)下面Menu:(Menuconfig主界面)

其中General setup中重要的選項包括:
Cross-compiler tool prefix 交叉編譯工具前綴(如arm-linux-);
Local version - append to kernel release 內(nèi)核顯示的版本信息;
System V IPC 表示系統(tǒng)的進程間通信Inter Process
Communication,它用于處理器在程序之間同步和交換信息
Enable eventpoll support:支持事件輪循的系統(tǒng)調(diào)用。
2、Enable loadable module support 重要的選項包括:(內(nèi)核模塊配置)
Module unloading 允許卸載已經(jīng)加載的模塊
Module versioning support 允許使用其他內(nèi)核版本的模塊(可能會出問題)
Source checksum for all modules 為所有的模塊校驗源碼,如果你不是自己編寫內(nèi)核模塊就不需要它這個功能。
3、Enable the block layer 塊設(shè)備支持,使用硬盤/USB/SCSI設(shè)備者必選這選項使得塊設(shè)備可以從內(nèi)核移除。。重要的選項包括:
Block layer bio throttling support 可用于限制設(shè)備的IO速度
IO Schedulers IO調(diào)度器I/O是輸入輸出帶寬控制,主要針對硬盤,是核心的必須的東西。這里提供了三個IO調(diào)度器。
4、Processor type and features (處理器類型及特點)
Processor family (Pentium-Pro)處理器系列, 請按照實際使用的CPU選擇,這里是處理器的類型
Generic x86 support 這一選項針對x86系列的CPU使用更多的常規(guī)優(yōu)化。如果你在上面一項選的是i386、i586之類的才選這個通用x86支持,
Multi-core scheduler support 針對多核CPU進行調(diào)度策略優(yōu)化多核調(diào)度機制支持,雙核的CPU要選
5、Power management and ACPI options (電源管理相關(guān))
6、Bus options(PCI 、ISA 等總線的支持和配置.)
7、Executable file formats / Emulations (沒用過,不大了解)
8、Networking support (網(wǎng)絡(luò)配置,重要)
Wireless 使用無線網(wǎng)卡支持 RF switch subsystem support RF 切換設(shè)備
9、Device Drivers (設(shè)備驅(qū)動)
Block devices 想要支持的塊設(shè)備,比如ramdisk , 磁盤陣列,CD/DVD 刻錄等
Misc devices 需要支持的雜項設(shè)備
SCSI device support SCSI 設(shè)備驅(qū)動
Serial ATA and Parallel ATA drivers SATA 設(shè)備驅(qū)動
IEEE 1394 (FireWire) support
Network device support 如Ethernet (1000 Mbit) 選擇自己對應(yīng)的硬件
Character devices 字符設(shè)備,一般自己寫的傳感器類驅(qū)動都是字符型,需要在里面配置,包括串口TTY等。
SPI/I2C support
Sound card support 聲卡
10、Firmware Drivers (BIOS相關(guān),部分系統(tǒng)管理工具可能會用到 )
11、File systems (文件系統(tǒng)支持,重要?。?/p>
Ext4 Security Labels <=== 取消 SELinux 支持
XFS filesystem support
ISO 9660 CDROM file system support
NTFS file system support
12、Kernel hacking (內(nèi)核調(diào)試相關(guān),木有用過)
13、Security options (安全相關(guān)選項)
三、編譯配置內(nèi)核步驟
以Linux3.5內(nèi)核版本為例,先解壓linux-3.5源碼, 然后cd到目錄中輸入:
make menuconfig ARCH=arm

根據(jù)硬件選擇處理器選型(配置):

網(wǎng)絡(luò)協(xié)議配置(可根據(jù)軟硬件需求對其進行裁剪):


設(shè)備驅(qū)動:圖是網(wǎng)卡驅(qū)動

根據(jù)自己的芯片選擇相應(yīng)的網(wǎng)卡驅(qū)動

文件系統(tǒng)選擇:比如系統(tǒng)想使用ex4文件系統(tǒng) 就空格勾選上

圖中取值方式:<>為不選擇, <*> 則壓縮到內(nèi)核映像zImage放到內(nèi)存中運行,< M>為編譯成moudule內(nèi)核模塊,存放在ROM中,使用時由zImage調(diào)用動態(tài)加載到內(nèi)存
在makemenuconfig里面選中的 都會在.config文件中查詢到:(相關(guān)Cofig配置成y,則編譯內(nèi)核代碼時會將此相關(guān)代碼編譯,此時為靜態(tài)編譯)


選擇好后就make進行編譯內(nèi)核,編譯完成會在arch/arm/boot目錄下生成zImage,這就是內(nèi)核映像文件,直接可以燒進板子(SD卡或者USB)
四、文件系統(tǒng)制作步驟
首先安裝工具包linux_tools.tgz
tar xvzf linux_tools.tgz -C /
然后生成文件系統(tǒng)鏡像文件(qtopia_qt4.img)
make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4
執(zhí)行make_ext4fs命令之后即會將rootfs_qtopia_qt4文件打包成 rootfs_qtopia_qt4.img 文件系統(tǒng)鏡像。
l314572800“是分區(qū)大小 -s就是生成ext4的S模式制作;
314572800/1024/1024 = 300M
-a root 是指這個img用于Linux系統(tǒng)(若為-a system即表示為android系統(tǒng),掛載點即是/system。
./rootfs_qtopia_qt4.img 表示在當前目錄下生成鏡像文件。
./rootfs_qtopia_qt4 指定根文件系統(tǒng)源路徑
可以把自己寫的應(yīng)用程序放到rootfs_qtopia_qt4這個里面,然后打包成ext4文件系統(tǒng)鏡像文件,這樣應(yīng)用程序就在固定在系統(tǒng)里,不用再二次安裝了。
重點解釋下:make_ext4fs 命令用來制作ext4文件系統(tǒng)的鏡像,首先要把工具包解壓到usr/bin 。使用方法參考:
make_ext4fs -s -l 512M -a system system_new.img system
512M表分區(qū)大小 第一個system表示掛載點為/system, 第二個system表示system目錄。
新生成的system_new.img就可以用來燒寫了。
五、文件系統(tǒng)和根文件系統(tǒng)區(qū)別聯(lián)系
很多人分不清文件系統(tǒng)和根文件系統(tǒng)的區(qū)別和聯(lián)系:
個人理解,所謂**根文件系統(tǒng)(Root Filesytem)**就是要包括linux啟動時所必須的目錄和關(guān)鍵性的文件、命令,所組成整個文件目錄結(jié)構(gòu),即為根文件系統(tǒng)。
例如linux啟動時所需要的init文件 linuxrc 掛載分區(qū)時linux去找的/etc/fstab 這個掛載文件等,根文件系統(tǒng)還包括許多應(yīng)用程序bin、sbin目錄等。
根文件系統(tǒng)可以用busybox直接生成
所謂文件系統(tǒng)(File System):指的是用來方便管理文件存儲和數(shù)據(jù)組織的一種方法。常見的linux文件系統(tǒng):NFS 網(wǎng)絡(luò)根文件系統(tǒng)、YAFFS2針對nandflash, EXT3,EXT4 等。還有如大家熟悉的Windows下FAT、FAT32、NTFS系統(tǒng)等
文件系統(tǒng)需要根據(jù)系統(tǒng)類型和硬件支持,使用打包工具(如Make_ext4)生成
