1. 程式人生 > >Linux 核心編譯(三天吐血經歷!)

Linux 核心編譯(三天吐血經歷!)

將粘貼後欄位裡面的  linux    /boot/vmlinuz-2.6.35-22-generic      initrd    /boot/initrd.img-2.6.35-22-generic  改成你的核心檔案地址和initrd 地址:
 linux   /boot/vmlinuz-2.6.32.71-mykernel    initrd    /boot/initrd.img-2.6.32.71 這一步特別無聊但又必須認認真真做,要不然你就前功盡棄,別問我怎麼知道的,我要是牢記這句話,不會到四點才睡覺 ( ╯□╰ )!! 建議全部改完之後,檢查幾遍。筆者以及室友們都在這步出錯,以至於不得不重新開始。全部完成如圖所示:  紅框是改過之後的,籃框裡面的是你需要複製的內容 可以看到 ,兩者在同一個###BEGIN /etc/**** 裡面 黃色下劃線部分
(圖醜見諒)

八、收尾工作

好了,你若已經檢查完畢上面的一切工作,那麼,掃尾工作就開始了,這時候,也莫要放鬆 一步一步來,喝點開水,長呼口氣,一步一步來,下面的一步一步落實:

cd /boot

cp initrd.img-2.6.32.71 initrd-2.6.32.71.old

depmod–a

update-initramfs-k 2.6.32.71 –c

cd /tmp

gzip-dc /boot/initrd.img-2.6.32.71| cpio –id

touch lib/modules/2.6.32.71/modules.dep

find./ | cpio -H newc -o > /boot/initrd.img-2.6.32.71.new

gzip /boot/initrd.img-2.6.32.71.new

cd /boot

mvinitrd.img-2.6.32.71.new.gz initrd.img-2.6.32.71

九、重啟

終於到了驗證結果的一步了,此時你要剋制一下自己的激動心情,在終端鍵入 reboot 點選回車。慢慢等待一會,若是你重啟成功,那麼恭喜你,你已經要看到勝利的曙光啦! 重新進入終端,獲取許可權,過程前面有講,不再重複。在終端鍵入 uname -a 回車 此時若是看到

linux-2.6.32.71,說明已經成功!

如下:

若是看到這個,你就可以大叫一聲慶祝一下了,你已經成功啦!!!!

十、測試自定義系統呼叫

開啟終端,鍵入gedit,開啟gedit工具,繼續鍵入如下程式碼:

#include<stdio.h>

int main()

{

       syscall(337, 1);

       return 0;

}

儲存為mytest.c

再繼續在終端中鍵入

gcc-o mytest mytest.c(編譯C程式)

之後 ./mytest

點選執行編譯出來的程式,此時並不會顯示出效果,在終端中鍵入dmesg –c檢視系統呼叫資訊。

此時,你可以看到



說明之前寫的sys_mycall呼叫成功! 到這一步,算是全部成功啦!!慶祝一下,去裝個逼吧~~~~ 寫在最後的話:
由於筆者是新手,裡面的步驟有些顯得很笨重,希望大手們看到之後多多指教!謝謝!! 另外,做這個實驗一定要有耐心,若是你做的時候一直很小心,每一步都認真做,那麼你一次就可以成功!!別像筆者這樣做了不知多少遍。 最後,祝大家成功!!   有不足,也希望大家指出,謝謝@[email protected] ps: 參考文件:http://wenku.baidu.com/view/40af3b6727d3240c8447efd8.html?qq-pf-to=pcqq.c2c 第一篇博文,謝謝大家的瀏覽o(^▽^)o