2015年10月26日 星期一

Linux Kernel

Kernel modules path: /lib/modules/$(kernel_name)/kernel/

Kernel download: http://www.kernel.org/
(解壓縮指令: $tar zxvf filename.tar)

Kernel source code 目錄意義
  • arch:與硬體平台有關的項目,大部分指的是 CPU 的類別(例:x86, x86_64)
  • block:與區塊裝置較相關的設定資料,區塊資料通常指的是大量儲存媒體,包括類似 ext3 等檔案系統的支援是否允許等
  • crypto:核心所支援的加密的技術,例如 md5 或者是 des 等等
  • Documentation:與核心有關的說明文件
  • drivers:一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等
  • firmware:一些舊式硬體的微指令碼(韌體)資料
  • fs:核心所支援的 filesystems,例如vfat, reiserfs, nfs等等
  • include:一些可讓其他程序呼叫的標頭(header)定義資料
  • init:一些核心初始化的定義功能,包括掛載與init程式的呼叫等
  • ipc:定義Linux作業系統內各程序的溝通
  • kernel:定義核心的程序、核心狀態、執行緒、程序的排程(schedule)、程序的訊號(signle) 等
  • lib:函式庫
  • mm:與記憶體單元有關的各項資料,包括swap與虛擬記憶體等
  • net:與網路有關的各項協定資料,還有防火牆模組(net/ipv4/netfilter/*)等等
  • security:包括selinux等在內的安全性設定
  • sound:與音效有關的各項模組
  • virt:與虛擬化機器有關的資訊,目前核心支援的是KVM (Kernel base Virtual Machine)
觀看make可用指令
$ make help
刪除目標檔與設定檔,適合第一次執行編譯前使用
$ make mrproper
刪除上一次編譯的目標檔,但不會刪除設定檔
$ make clean
核心功能列表檔
/boot/config-xxx

產生核心功能列表檔的方法,產生的檔案為.config
$ make menuconfig
在文字模式下顯示類圖形介面的選擇方法
$ make oldconfig
使用已經存在的config檔案
$ make config
每個項目用條列式的選擇,較不方便

編譯核心
$ make all –j16
(make all = make vmlinux, make modules, make bzImage)
安裝模組到/lib/modules/
$ make modules_install