ubuntu 環(huán)境下編譯驅(qū)動(dòng)模塊 (minix為例)

不希望編譯全部?jī)?nèi)核谭溉,只編譯內(nèi)核相應(yīng)驅(qū)動(dòng)模塊扮念,操作如下:
下文以系統(tǒng)4.9.87-linuxkit-aufs為例碧库,對(duì)應(yīng)源碼包linux-4.9.87.tar.xz

.官網(wǎng)下載與系統(tǒng)內(nèi)核版本對(duì)應(yīng)的源碼包 https://www.kernel.org (注意版本號(hào)一致)

.解壓內(nèi)核源碼包,注意為了減小壓縮包大小弄匕,源碼包使用了xz 壓縮沽瞭,先使用 xz 解壓源碼包 xz -d xxxx.tar.xz 秕脓, 再使用 tar 解壓 tar xvf xxx.tar .

ubuntu@one$ ls
linux-4.9.87.tar.xz
ubuntu@one$ sudo xz -d linux-4.9.87.tar.xz 
ubuntu@one$ tar xvf linux-4.9.87.tar 
ubuntu@one$ ls
linux-4.9.87  linux-4.9.87.tar

. 查看當(dāng)前系統(tǒng)的內(nèi)核版本信息uname -r , 注意Local信息芙贫,后面需要修改內(nèi)核源碼Makefile文件中的版本信息傍药,已確保與當(dāng)前的Local信息一致.

ubuntu@one$ uname -r
4.9.87-linuxkit-aufs
#-linuxkit-aufs 為L(zhǎng)ocal描述

.進(jìn)入源碼目錄,修改Makefile文件EXTRAVERSION = xxx為L(zhǎng)ocal信息.

ubuntu@one$ cd linux-4.9.87
ubuntu@one$ pwd
/usr/src/linux-4.9.87
ubuntu@one$ sudo vim Makefile
#內(nèi)核源碼包根目錄 Makefile 文件
VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 87
EXTRAVERSION =-linuxkit-aufs #這里修改為L(zhǎng)ocal信息
NAME = Roaring Lionus

.如需修改其他版本信息拣挪,進(jìn)入include/linux/vermagic.h 查看菠劝,此文件記錄的信息是通過(guò) sudo make menuconfig 開(kāi)關(guān)進(jìn)行設(shè)置(也可手動(dòng)修改-不推薦).

.開(kāi)始編譯前的準(zhǔn)備工作睁搭,進(jìn)入內(nèi)核源碼目錄园骆,加載默認(rèn)配置參數(shù)sudo make defconfig, 處理.config文件中缺失的源碼中的參數(shù)配置sudo make oldconfig锌唾,執(zhí)行編譯準(zhǔn)備工作sudo make prepare, 生成需要的腳本文件sudo make scripts.

ubuntu@one$ pwd
/usr/src/linux-4.9.87
ubuntu@one$ sudo make defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'x86_64_defconfig'
#
# configuration written to .config
#
ubuntu@one$
ubuntu@one$ sudo make oldconfig
scripts/kconfig/conf  --oldconfig Kconfig
#
# configuration written to .config
#
ubuntu@one$
ubuntu@one$ sudo make prepare
scripts/kconfig/conf  --silentoldconfig Kconfig
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      kernel/bounds.s
  CHK     include/generated/bounds.h
  CHK     include/generated/timeconst.h
  CC      arch/x86/kernel/asm-offsets.s
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
ubuntu@one$
ubuntu@one$ sudo make scripts
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/modpost.o
  CC      scripts/mod/devicetable-offsets.s
  GEN     scripts/mod/devicetable-offsets.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  HOSTCC  scripts/selinux/genheaders/genheaders
  HOSTCC  scripts/selinux/mdp/mdp
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/pnmtologo
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/sortextable

.開(kāi)始編譯驅(qū)動(dòng)模塊,進(jìn)入需要編譯的驅(qū)動(dòng)模塊源碼目錄(以minix文件系統(tǒng)驅(qū)動(dòng)為例)炬太,修改 Makefile.

ubuntu@one$ cd fs/minix/
ubuntu@one$ pwd
/usr/src/linux-4.9.87/fs/minix
ubuntu@tinylab/linux-0.11-lab$ ls
bitmap.c  inode.c         itree_v2.c  Makefile_       namei.c
dir.c     itree_common.c  Kconfig     minix.h
file.c    itree_v1.c      Makefile    Module.symvers
ubuntu@one$ 
ubuntu@one$ sudo vim Makefile

編輯目錄下的Makefile文件為:

#
# Makefile for the Linux minix filesystem routines.
# make minix fs as kernel module
obj-m += minix.o
minix-objs := bitmap.o itree_v1.o itree_v2.o namei.o inode.o file.o dir.o

KERNELDIR:=/usr/src/linux-4.9.87/

default:
    make -C $(KERNELDIR) M=$(PWD) modules
#注意有的系統(tǒng) $(PWD) 為空  可以直接替換為當(dāng)前目錄亲族,
#如:M=/usr/src/linux-4.9.87/fs/minix/
clean:
    rm -rf *.o *.mod.c *.ko *.symvers

. 執(zhí)行編譯命令sudo make生成驅(qū)動(dòng)模塊

ubuntu@one$ sudo make
make -C /usr/src/linux-4.9.87/ M=/usr/src/linux-4.9.87/fs/minix/ modules
make[1]: Entering directory `/usr/src/linux-4.9.87'
  CC [M]  /usr/src/linux-4.9.87/fs/minix/bitmap.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/itree_v1.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/itree_v2.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/namei.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/inode.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/file.o
  CC [M]  /usr/src/linux-4.9.87/fs/minix/dir.o
  LD [M]  /usr/src/linux-4.9.87/fs/minix/minix.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/src/linux-4.9.87/fs/minix/minix.mod.o
  LD [M]  /usr/src/linux-4.9.87/fs/minix/minix.ko
make[1]: Leaving directory `/usr/src/linux-4.9.87'
ubuntu@one$ 

.查看生成模塊信息modinfo minix.ko.

ubuntu@one$ modinfo minix.ko 
filename:       /usr/src/linux-4.9.87/fs/minix/minix.ko
license:        GPL
alias:          fs-minix
depends:        
vermagic:       4.9.87-linuxkit-aufs SMP mod_unload  
##注意 vermagic 字符串

加載模塊sudo insmod minix.ko霎迫,查看是否加載成功lsmod.

ubuntu@one$ sudo insmod minix.ko 
ubuntu@one$ lsmod 
Module                  Size  Used by
minix                  32768  0  

.查看加載信息dmesg | tail, 如果失敗知给,并出現(xiàn) Invalid module format 則需要修改相關(guān)版本信息.

###加載成功的消息:
ubuntu@one$ sudo dmesg | tail
[10770.402514] minix: loading out-of-tree module taints kernel.
ubuntu@one$
###加載失敗的消息:
ubuntu@one$  sudo insmod minix.ko 
insmod: ERROR: could not insert module minix.ko: Invalid module format
ubuntu@one$  sudo dmesg | tail
[  921.312628] minix: version magic '4.9.87-linuxkit-aufs  SMP mod_unload ' 
should be '4.9.87-linuxkit-aufs SMP mod_unload '
ubuntu@one$ 
##-linuxkit-aufs 后面多出了一個(gè)空格(由于修改內(nèi)核源碼包根目錄Makefile時(shí)描姚,字符串后多出一個(gè)空格造成)

一些其他命令:

#查看內(nèi)核編譯版本信息
ubuntu@one$ sudo make kernelrelease
4.9.87-linuxkit-aufs
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轩勘,一起剝皮案震驚了整個(gè)濱河市绊寻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冰蘑,老刑警劉巖村缸,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仇箱,居然都是意外死亡索烹,警方通過(guò)查閱死者的電腦和手機(jī)百姓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旬迹,“玉大人,你說(shuō)我怎么就攤上這事屹耐〈涣裕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)筐咧。 經(jīng)常有香客問(wèn)我量蕊,道長(zhǎng),這世上最難降的妖魔是什么残炮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任吉殃,我火速辦了婚禮蛋勺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抱完。我一直安慰自己,他們只是感情好碉怔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布撮胧。 她就那樣靜靜地躺著老翘,像睡著了一般锻离。 火紅的嫁衣襯著肌膚如雪墓怀。 梳的紋絲不亂的頭發(fā)上傀履,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音钓账,去河邊找鬼碴犬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛官扣,可吹牛的內(nèi)容都是我干的翅敌。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惕蹄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了治专?” 一聲冷哼從身側(cè)響起卖陵,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎张峰,沒(méi)想到半個(gè)月后泪蔫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喘批,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撩荣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饶深。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐曹。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敌厘,靈堂內(nèi)的尸體忽然破棺而出台猴,到底是詐尸還是另有隱情,我是刑警寧澤俱两,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布饱狂,位于F島的核電站,受9級(jí)特大地震影響宪彩,放射性物質(zhì)發(fā)生泄漏休讳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一尿孔、第九天 我趴在偏房一處隱蔽的房頂上張望俊柔。 院中可真熱鬧磺樱,春花似錦、人聲如沸婆咸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尚骄。三九已至块差,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倔丈,已是汗流浹背憨闰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工墓塌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暇韧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓爪喘,卻偏偏與公主長(zhǎng)得像宏邮,于是被迫代替她去往敵國(guó)和親泽示。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容