Linux內核編譯及添加系統(tǒng)調用

首先讓我們腦補一下什么是系統(tǒng)調用柏靶,個人理解系統(tǒng)調用就是調用系統(tǒng)函數(shù)(內核狀態(tài)下的函數(shù))。在linux系統(tǒng)中溃论,用戶通過執(zhí)行一條訪管指令(int$0x80)來實現(xiàn)系統(tǒng)調用屎蜓。(說白點就是你在自己的代碼中調用這個““syscall()”函數(shù))就會出發(fā)一個訪管中斷,系統(tǒng)就會去執(zhí)行你需要的系統(tǒng)函數(shù)钥勋。其實中間還有一些過程炬转,筆者為了便于大家理解控汉,在此忽略了。如需詳細了解系統(tǒng)調用過程返吻,請讀者自行百度吧姑子。

那么開始進入正題吧,內核編譯啊测僵,其實是一個很漫長的過程,一步弄錯街佑,哈哈哈,很酸爽....

首先我們需要一臺linux系統(tǒng)的電腦或者裝好了linux系統(tǒng)的虛擬機捍靠,大部分人還是用虛擬機的沐旨。筆者這里使用的是VMware12,虛擬機的安裝榨婆,筆者這里就不介紹了

要進行內核編譯磁携,我們得去http://www.kernel.org下載linux源代碼

image.png

這里注意下,開始編譯前良风,確保自己是root用戶(好處是可以省去添加sudo)

我編譯的時候是用的4.13.7的版本谊迄,大家可以和我的不一樣。
打開終端烟央,切換到Downloads目錄

image.png

接下來將源碼復制到/home/src(筆者之前已經(jīng)在home目錄下創(chuàng)建了src目錄统诺,其實在哪里都可以。)

image.png

這時使用 xz -d linux-4.13.7.tar.xz 后會生成linux-4.13.7.tar
再使用tar -xvf linux-4.13.7.tar 便可以得到解壓后的源碼linux-4.13.7

image.png

進入源碼目錄后疑俭,我所用過的linux系統(tǒng)基本上要安裝nurses
使用 apt-get install libncurses5-dev 安裝
筆者是用的是kalilinux(一款滲透測試系統(tǒng)的)在進行編譯時發(fā)現(xiàn) 還需要 安裝bc粮呢,使用 apt-get install bc就可以了

接下來就是編譯前的清理工作了,使用make mrproper或者是make clean 命令钞艇,第一次編譯的話是不需要執(zhí)行的啄寡,如果是失敗后再次編譯就要執(zhí)行清理工作了,make mrproper 會清理掉殘留的.config 和.o文件哩照,make clean 會保留 .config文件挺物,如果你不想再次配置.config文件 就是用make clean吧。

內核的配置工作:
使用make menuconfig命令
會出現(xiàn)一個界面

選擇Device Drivers 這項


image.png

進入scsi 配置界面葡秒,將下面幾項全部設成*

image.png
image.png

回退到上一個界面姻乓,設置Fusion MPT,設置為 *

image.png
image.png

選擇exit保存就好了

接下來就是激動人心的時候了
輸入以下命令make bzImage 生成映像文件

筆者大概用了30分鐘左右(沒辦法虛擬機就這樣)

開始編譯模塊 輸入以下命令make modules
大概4個多小時吧(可以玩好幾把lol了~)

安裝模塊:make modules_install,這個很快哦。 輸入mkinitramfs - o /boot/initrd-4.13.7.img -v 4.13.7 即可建立載入ramdisk的映像文件
安裝內核:make install

配置引導程序:update-grub2
最后:reboot
等待它重啟
開機后查看內核版本

image.png

內核編譯就到此為止了眯牧,接下來是添加系統(tǒng)調用蹋岩。

這里我添加一個系統(tǒng)函數(shù) int mysetnice(pid_t,int flag,int nicevalue,void __user *prio,void __user * nice);
實現(xiàn)對指定進程的nice值的修改讀取和prio值得讀取,并將值從內核態(tài)返回到用戶態(tài)

參數(shù)含義
pid:進程ID
flag:若flag為o功能是讀取nice值学少,是1的話就是修改nice值
nicevalue:要修改的nice值
void __user * 指針類型(其實就是用戶態(tài)的普通指針了剪个,例如int *p)

添加系統(tǒng)調用首先要分配系統(tǒng)調用號,切換到/home/serc/linux-4.13.7/arch/x86/entry/syscalls/使用 vim syscall_64.tbl
在332下面添加一條版确,如圖所示

image.png

切換到/usr/include/asm-generic/下 vim unistd.h
加入#define __NR_mysetnice 333
__SYSCALL(__NR_mysetnice,sys_mysetnice)


image.png

切換到/home/src/linux-4.13.7/kernel/
vim sys.c

寫入以下代碼

image.png

注意這里是不能直接&task_nice(p),個人的理解是task_nice(p)返回的是一個字面值扣囊,不能直接取地址乎折,通過另外的變量將這個值暫存起來,取變量的地址(這個坑侵歇,筆者踩了很久才跳出來)骂澄,copy_to_user 是將內核的值拷貝到用戶狀態(tài)

系統(tǒng)調用的函數(shù)已經(jīng)寫好了,接下就是編譯安裝了惕虑,步驟跟編譯是一樣的了坟冲,這里不再講述。

這里我寫了一個demo測試系統(tǒng)調用是否成功的溃蔫,代碼如下

image.png

這里我打開了火狐瀏覽器使用top命令可以看到該進程的pid是6252

image.png

gcc -o testsyscall testsyscall.c 生成可執(zhí)行文件后輸入
./testsyscall

筆者的測試如下圖

image.png

成功讀取nice 和 prio的值健提,并且也成功修改了nice值

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伟叛,隨后出現(xiàn)的幾起案子私痹,更是在濱河造成了極大的恐慌,老刑警劉巖统刮,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊遵,死亡現(xiàn)場離奇詭異,居然都是意外死亡网沾,警方通過查閱死者的電腦和手機癞蚕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門蕊爵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辉哥,“玉大人,你說我怎么就攤上這事攒射〈椎” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵会放,是天一觀的道長饲齐。 經(jīng)常有香客問我,道長咧最,這世上最難降的妖魔是什么捂人? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮矢沿,結果婚禮上滥搭,老公的妹妹穿的比我還像新娘。我一直安慰自己捣鲸,他們只是感情好瑟匆,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栽惶,像睡著了一般愁溜。 火紅的嫁衣襯著肌膚如雪疾嗅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天冕象,我揣著相機與錄音代承,去河邊找鬼。 笑死渐扮,一個胖子當著我的面吹牛次泽,可吹牛的內容都是我干的。 我是一名探鬼主播席爽,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼意荤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了只锻?” 一聲冷哼從身側響起玖像,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎齐饮,沒想到半個月后捐寥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡祖驱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年握恳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捺僻。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乡洼,死狀恐怖,靈堂內的尸體忽然破棺而出匕坯,到底是詐尸還是另有隱情束昵,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布葛峻,位于F島的核電站锹雏,受9級特大地震影響,放射性物質發(fā)生泄漏术奖。R本人自食惡果不足惜礁遵,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望采记。 院中可真熱鬧佣耐,春花似錦、人聲如沸挺庞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掖鱼,卻和暖如春然走,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戏挡。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工芍瑞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褐墅。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓拆檬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妥凳。 傳聞我的和親對象是個殘疾皇子竟贯,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容