Linux內核編譯配置(Menuconfig圖形化方式)、制作文件系統的步驟


Linux內核編譯(Menuconfig圖形化方式)、制作文件系統的步驟

  • Linux內核配置原理
  • Menuconfig主要功能選項介紹
  • 編譯配置內核步驟
  • 制作文件系統步驟
  • 文件系統和根文件系統區別聯系

Linux內核配置原理

Linux內核的配置系統由三個部分組成,分別是:

1、Makefile:分布在 Linux 內核源代碼根目錄及各層目錄中,定義 Linux 內核的編譯規則;
2、配置文件(config.in):給用戶提供配置選擇的功能;
3、配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋)和配置用戶界面(提供基於字符界面、基於 Ncurses 圖形界面以及基於 Xwindows 圖形界面的用戶配置界面,各自對應於 Make config、Make menuconfig 和 make xconfig)。

Linux 內核的編譯菜單有3中方法:

1)make config:進入命令行,可以一行一行的配置,這不方便使用,但用命令執行一遍會對編譯過程有更深了解,這里不具體介紹。
2)make menuconfig:進入我們熟悉的 menuconfig 菜單,圖形化界面選擇配置
3)make xconfig:在2.4.X 以及以前版本中 xconfig 菜單是基於 TCL/TK 的圖形庫的,沒有接觸過。。貌似淘汰了。

Menuconfig配置內核原理:

在Linux里面我們所看到的menuconfig界面是通過配置內核頂層的Kconfig產生的,而當輸入make menuconfig命令的時候系統會讀取Makefile來解析Kconfig。
  通常會在Kconfig里面編寫以下四項:
  1、模塊的名字,用module開頭;
  2、選項,通常設為bool(二選一)或者trastate(三選一);
  3、默認選項;
  4、幫助說明。
關於KConfig 詳細介紹可參考 http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.html

Menuconfig主要功能選項介紹:

在源碼目錄鍵入# make menuconfig ARCH=arm 后出現下面Menu:(Menuconfig主界面)

其中General setup 中重要的選項包括:

Cross-compiler tool prefix 交叉編譯工具前綴(如arm-linux-);
Local version - append to kernel release 內核顯示的版本信息;
System V IPC 表示系統的進程間通信Inter Process
Communication,它用於處理器在程序之間同步和交換信息
Enable eventpoll support:支持事件輪循的系統調用。

2、Enable loadable module support 重要的選項包括:(內核模塊配置)

Module unloading 允許卸載已經加載的模塊
Module versioning support 允許使用其他內核版本的模塊(可能會出問題)
Source checksum for all modules 為所有的模塊校驗源碼,如果你不是自己編寫內核模塊就不需要它這個功能。

3、Enable the block layer 塊設備支持,使用硬盤/USB/SCSI設備者必選這選項使得塊設備可以從內核移除。。重要的選項包括:

Support for large (2TB+) block devices and files 僅在使用大於2TB的塊設備時需要
Block layer bio throttling support 可用於限制設備的IO速度
IO Schedulers IO調度器I/O是輸入輸出帶寬控制,主要針對硬盤,是核心的必須的東西。這里提供了三個IO調度器。

4、Processor type and features (處理器類型及特點)

Symmetric multi-processing support 對稱多處理器支持,如果你有多個CPU或者使用的是多核CPU就選上
Processor family (Pentium-Pro)處理器系列, 請按照實際使用的CPU選擇,這里是處理器的類型
Generic x86 support 這一選項針對x86系列的CPU使用更多的常規優化。如果你在上面一項選的是i386、i586之類的才選這個通用x86支持,
Multi-core scheduler support 針對多核CPU進行調度策略優化多核調度機制支持,雙核的CPU要選

5、 Power management and ACPI options (電源管理相關)
6、Bus options(PCI 、ISA 等總線的支持和配置.)
7、Executable file formats / Emulations (沒用過,不大了解)
8、Networking support (網絡配置,重要)

Networking options 網絡協議和網絡包參數配置(其中TCP/IP相關協議必須打開)
Wireless 使用無線網卡支持
RF switch subsystem support RF 切換設備

9、Device Drivers (設備驅動)

Generic Driver Options
Block devices 想要支持的塊設備,比如ramdisk , 磁盤陣列,CD/DVD 刻錄等
Misc devices 需要支持的雜項設備
SCSI device support SCSI 設備驅動
Serial ATA and Parallel ATA drivers SATA 設備驅動
IEEE 1394 (FireWire) support
Network device support 如Ethernet (1000 Mbit) 選擇自己對應的硬件
Character devices 字符設備,一般自己寫的傳感器類驅動都是字符型,需要在里面配置,包括串口TTY等。
SPI/I2C support
Sound card support 聲卡

10、Firmware Drivers (BIOS相關,部分系統管理工具可能會用到 )
11、File systems (文件系統支持,重要!)

The Extended 4 (ext4) filesystem
Ext4 Security Labels <=== 取消 SELinux 支持
XFS filesystem support
ISO 9660 CDROM file system support
NTFS file system support

12、Kernel hacking (內核調試相關,木有用過)
13、Security options (安全相關選項)

Cryptographic API —> // 加密API ,這部分選項會根據此前的優化自動調整

編譯配置內核步驟

以Linux3.5內核版本為例,先解壓linux-3.5源碼,
然后cd到目錄中輸入:

make menuconfig ARCH=arm

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

網絡協議配置(可根據軟硬件需求對其進行裁剪):

設備驅動:圖是網卡驅動

根據自己的芯片選擇相應的網卡驅動

文件系統選擇:比如系統想使用ex4文件系統 就空格勾選上

圖中取值方式:<>為不選擇, <*> 則壓縮到內核映像zImage放到內存中運行,< M>為編譯成moudule內核模塊,存放在ROM中,使用時由zImage調用動態加載到內存

在makemenuconfig里面選中的 都會在.config文件中查詢到:(相關Cofig配置成y,則編譯內核代碼時會將此相關代碼編譯,此時為靜態編譯)

選擇好后就make進行編譯內核,編譯完成會在arch/arm/boot目錄下生成zImage,這就是內核映像文件,直接可以燒進板子(SD卡或者USB)

制作文件系統步驟

首先安裝工具包linux_tools.tgz

tar xvzf linux_tools.tgz -C /

然后生成文件系統鏡像文件(qtopia_qt4.img)

make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4

執行make_ext4fs命令之后即會將rootfs_qtopia_qt4文件打包成 rootfs_qtopia_qt4.img 文件系統鏡像。

  • l314572800“是分區大小 -s就是生成ext4的S模式制作;
  • 314572800/1024/1024 = 300M
  • -a root 是指這個img用於Linux系統(若為-a system即表示為android系統,掛載點即是/system。
  • ./rootfs_qtopia_qt4.img 表示在當前目錄下生成鏡像文件。
  • ./rootfs_qtopia_qt4 指定根文件系統源路徑

可以把自己寫的應用程序放到rootfs_qtopia_qt4這個里面,然后打包成ext4文件系統鏡像文件,這樣應用程序就在固定在系統里,不用再二次安裝了。

重點解釋下:make_ext4fs 命令用來制作ext4文件系統的鏡像,首先要把工具包解壓到usr/bin 。使用方法參考:

make_ext4fs -s -l 512M -a system system_new.img system

512M表分區大小 第一個system表示掛載點為/system, 第二個system表示system目錄。
新生成的system_new.img就可以用來燒寫了。

文件系統和根文件系統區別聯系

很多人分不清文件系統和根文件系統的區別和聯系:

個人理解,所謂根文件系統(Root Filesytem)就是要包括linux啟動時所必須的目錄和關鍵性的文件、命令,所組成整個文件目錄結構,即為根文件系統。
例如linux啟動時所需要的init文件 linuxrc 掛載分區時linux去找的/etc/fstab 這個掛載文件等,根文件系統還包括許多應用程序bin、sbin目錄等。
根文件系統可以用busybox直接生成

所謂文件系統(File System):指的是用來方便管理文件存儲和數據組織的一種方法。常見的linux文件系統:NFS 網絡根文件系統、YAFFS2針對nandflash, EXT3,EXT4 等。還有如大家熟悉的Windows下FAT、FAT32、NTFS系統等
文件系統需要根據系統類型和硬件支持,使用打包工具(如Make_ext4)生成

參考鏈接:
http://blog.csdn.net/HowieXue/article/details/76696631


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM