[TOC]
Linux內(nèi)核裁剪及編譯可加載模塊
Linux基礎(chǔ)知識(shí)
linux內(nèi)核組要由五個(gè)子系統(tǒng)組成:
- 進(jìn)程調(diào)度
- 內(nèi)存管理
- 文件系統(tǒng)
- 網(wǎng)絡(luò)接口
- 進(jìn)程間通信
arch | 目錄中包含于體系結(jié)構(gòu)有關(guān)的子目錄和文件弦聂,arm的相關(guān)平臺(tái)信息在arch/arm目錄下辣往。 |
---|---|
scripts | 目錄中存放著對(duì)核心配置的腳本文件棠众。 |
crypto | 目錄中包含著常見的加密算法。 |
drivers | 目錄包含各種各樣的驅(qū)動(dòng)碧浊,包括字符型,快型,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序退唠。 |
fs | 目錄中包括了linux系統(tǒng)所支持的文件系統(tǒng)類型,比如ext4 nfs |
init | 目錄中存放著與linux內(nèi)核相關(guān)的啟動(dòng)代碼荤胁。 |
kernel | 目錄中包含許多l(xiāng)inux進(jìn)程調(diào)度子系統(tǒng)相關(guān)的源代碼瞧预。 |
lib | 目錄存放linux內(nèi)核所用的庫文件。 |
mm | 目錄存放linux內(nèi)存管理的源代碼。 |
net | 目錄存放有關(guān)網(wǎng)絡(luò)協(xié)議的源代碼垢油。 |
Linux源碼編譯
- 在編譯之前首先使用make clean盆驹, make distclean清除原編譯和配置文件
- 找到運(yùn)行平臺(tái)(arm)下面的配置文件拷貝到源碼目錄一命名為 .config,.config文件是在進(jìn)行內(nèi)核配置的時(shí)候,經(jīng)過配置后生成的內(nèi)核編譯參考文件秸苗,命令如下
cp arch/arm/configs/exynos4_defconfig .config
- 拷貝完成之后就可以運(yùn)行
make
命令召娜,這個(gè)過程要等很久. - 編譯完成之后就會(huì)在arch/armboot目錄下生成zImage,生成的這個(gè)文件就是linux鏡像,之后我們就可以使用linux的鏡像文件了.
Linux內(nèi)核裁剪
以上編譯的是沒有裁剪過linux源碼惊楼,如果我們不想使用源碼里面的部分功能玖瘸,我們就可以通過裁剪的方式阻止它編譯:在linux源碼包中我們可以使用make menuconfig
,圖形化界面很容易操作檀咙;如果不想使用它的某些功能雅倒,取消前面*即可,按空格鍵來控制選擇. 就可以進(jìn)行l(wèi)inux源碼的裁剪. 選擇完成之后就可以保存退出,執(zhí)行make
.
編譯可加載模塊
內(nèi)核模塊是Linux內(nèi)核向外部提供的一個(gè)插口弧可,其全稱為動(dòng)態(tài)可加載內(nèi)核模塊(Loadable Kernel Module蔑匣,LKM), 我們簡(jiǎn)稱為模塊,模塊是具有獨(dú)立功能的程序棕诵,它可以被單獨(dú)編譯裁良,但不能獨(dú)立運(yùn)行。它在運(yùn)行時(shí)被鏈接到內(nèi)核作為內(nèi)核的一部分在內(nèi)核空間運(yùn)行校套,這與運(yùn)行在用戶空間的進(jìn)程是不同的价脾。模塊通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成,用來實(shí)現(xiàn)一種文件系統(tǒng)笛匙、一個(gè)驅(qū)動(dòng)程序或其他內(nèi)核上層的功能侨把。
總之,模塊是一個(gè)為內(nèi)核(從某種意義上來說妹孙,內(nèi)核也是一個(gè)模塊)或其他內(nèi)核模塊提供使用功能的代碼塊.
Linux內(nèi)核模塊是一種可被動(dòng)態(tài)加載和卸載的可執(zhí)行程序秋柄。通過內(nèi)核模塊可以擴(kuò)展內(nèi)核功能,內(nèi)核模塊通常用于設(shè)備驅(qū)動(dòng)蠢正、文件系統(tǒng)等骇笔。如果沒有內(nèi)核模塊,需要向內(nèi)核添加功能就需要自發(fā)代碼嚣崭、重新編譯內(nèi)核笨触、安裝新內(nèi)核等步驟;