最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

手把手教你Linux內(nèi)核編譯(三天吐血經(jīng)歷)

2022-01-12 20:53 作者:Linux遠航者  | 我要投稿

一、實驗前的準備:

Vmware + ubuntu10.10 (32位)+ linux-2.6.32.71.tar.xz

安裝虛擬機教程:jingyan.baidu.com/artic

說明:ubuntu 10.10是我試驗的最后一個,也是最后成功的那個。當然,更推薦ubuntu 10.04,因為這個支持sudo apt-update 少了一些麻煩。 而由于10.10不支持更新,故我另外新下了linux 2.6.32.71 先將這個文件拖入虛擬機桌面。

附: ubuntu10.10百度網(wǎng)盤分享:鏈接:pan.baidu.com/s/1bnNr8d?密碼:ybg3

linux-2.6.32.71.tar.xz 百度網(wǎng)盤分享:鏈接:pan.baidu.com/s/1c1cOOt?密碼:epu9(可能已經(jīng)失效,大家可以去某度上面進行下載。網(wǎng)上資源很多,造成的不便,很抱歉~)

二、解壓內(nèi)核

1、先打開安裝好的ubuntu 進入終端 :在桌面按ctrl+alt+T

2、輸入sudo su 獲取root權(quán)限:(會出現(xiàn)一個輸入密碼的一個命令行,在終端輸入密碼時,是不顯示星號的。你只管把密碼輸入回車就行了!用慣了window的小伙伴可能會有些不適應(yīng))最后如圖:

3、先把下載好的內(nèi)核復制到 /usr/src 文件夾中 :

終端輸入 cd Desktop(定位到桌面) 回車 ; cp linux-2.6.32.71.tar.xz /usr/src 回車

4、解壓內(nèi)核 依次輸入以下命令回車執(zhí)行

cd /usr/src ;

xz -d linux-2.6.32.71.tar.xz

tar xvf linux-2.6.32.71.tar

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【865977150】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。?!


三、增加系統(tǒng)調(diào)用

1、打開sys.c文件。

gedit /usr/src/linux-2.6.32.71/kernel/sys.c

2、在文件末尾增加系統(tǒng)調(diào)用。

asmlinkage intsys_mycall(int number){ printk("My Student No. is XXXXX,and My Name is XXXXX*** !"); return number;}

注:printk就是系統(tǒng)調(diào)用輸出一行文字,你可以自定義里面內(nèi)容,便于最終檢驗。

3、注冊系統(tǒng)調(diào)用:

gedit /usr/src/linux-2.6.32.71/arch/x86/kernel/syscall_table_32.S

在.long 類型文件末尾添加:.longsys_mycall并且按照順序記住它屬于第幾個系統(tǒng)調(diào)用,在本機中為337。

4、gedit /usr/src/linux-2.6.32.71/arch/x86/include/asm/unistd_32.h

在一系列#define __NR_之后添加:# define __NR_mycall 337

在這里就需要用到之前記住的數(shù)字了。

四、編譯內(nèi)核

ps:深吸一口氣,前面做的只是準備工作!下面才是真正的開始!打好精神,真正的挑戰(zhàn)在下面!

下面的記得一定要一步一步都要做!不要漏掉一步?。。。?/p>

進入解壓目錄:

cd /usr/src/linux-2.6.32.71

make mrproper

make clean

make oldconfig

make bzImage (這個過程和下面的過程非常非常非常長,親測,建議泡杯茶,或是看個電影,沒有兩個小時不行)

make modules

make modules_install

五、拷貝內(nèi)核

經(jīng)過了漫長的等待,我們終于到了這一步。

先檢驗一下我們的結(jié)果:

首先查看一下編譯好的內(nèi)核版本,以便命名 打開 /lib/modules 里面應(yīng)該多了一個 純數(shù)字不帶"generic"的文件夾,那就是新內(nèi)核版本號,我們的是2.62.32.71 如下所示:

有了這個就代表前面的沒有什么錯誤了。

接著,就在終端輸入:

cp /usr/src/linux-2.6.32.71/arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.71-mykernel

六、創(chuàng)建initrd文件

mkinitramfs-o /boot/initrd.img-2.6.32.71

七、更新grub引導表

進行到這一步,也許你感覺到自己差不多了,畢竟都這么久了,你也許有些困了,有些疲憊, 但是, 我告訴你,最難最容易出錯的,就在當前這一步!建議你先休息一下,下面需要你投入百分之百的注意力去做,若是出錯,你可是要全部重新開始的!

1.gedit /boot/grub/grub.cfg

2.在打開的文件中找到類似如下的字段,并復制并粘貼在前面:

但必須在同一個

### BEGIN /etc/grub.d/10_linux ###

……

### END /etc/grub.d/10_linux ###

里面:

字段如下:

menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {recordfailinsmod part_msdosinsmod ext2set root='(hd0,msdos1)'search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro ? quiet splashinitrd ?/boot/initrd.img-2.6.35-22-generic}menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {recordfailinsmod part_msdosinsmod ext2set root='(hd0,msdos1)'search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9echo 'Loading Linux 2.6.35-22-generic ...'linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro single echo 'Loading initial ramdisk ...'initrd ?/boot/initrd.img-2.6.35-22-generic}

將粘貼后字段里面的

linux /boot/vmlinuz-2.6.35-22-generic initrd /boot/initrd.img-2.6.35-22-generic 改成你的內(nèi)核文件地址和initrd 地址:

linux /boot/vmlinuz-2.6.32.71-mykernel initrd /boot/ initrd.img-2.6.32.71

這一步特別無聊但又必須認認真真做,要不然你就前功盡棄,別問我怎么知道的,我要是牢記這句話,不會到四點才睡覺 ( ╯□╰ )??! 建議全部改完之后,檢查幾遍。筆者以及室友們都在這步出錯,以至于不得不重新開始。全部完成如圖所示:

紅框是改過之后的,籃框里面的是你需要復制的內(nèi)容 可以看到 ,兩者在同一個###BEGIN /etc/**** 里面 黃色下劃線部分

八、收尾工作

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

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

九、重啟

終于到了驗證結(jié)果的一步了,此時你要克制一下自己的激動心情,在終端鍵入 reboot 點擊回車。慢慢等待一會,若是你重啟成功,那么恭喜你,你已經(jīng)要看到勝利的曙光啦!

重新進入終端,獲取權(quán)限,過程前面有講,不再重復。在終端鍵入 uname -a 回車

此時若是看到

linux-2.6.32.71,說明已經(jīng)成功!

如下:

若是看到這個,你就可以大叫一聲慶祝一下了,你已經(jīng)成功啦?。。?!

十、測試自定義系統(tǒng)調(diào)用

打開終端,鍵入gedit,打開gedit工具,繼續(xù)鍵入如下代碼:

#include<stdio.h>int main(){ ? ? ? syscall(337, 1); ? ? ? return 0;}

保存為mytest.c

再繼續(xù)在終端中鍵入

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

之后 ./mytest 。

點擊運行編譯出來的程序,此時并不會顯示出效果,在終端中鍵入dmesg –c查看系統(tǒng)調(diào)用信息。

此時,你可以看到

說明之前寫的sys_mycall調(diào)用成功!

到這一步,算是全部成功啦?。c祝一下,去裝個逼吧~~~~



手把手教你Linux內(nèi)核編譯(三天吐血經(jīng)歷)的評論 (共 條)

分享到微博請遵守國家法律
揭西县| 眉山市| 磐石市| 馆陶县| 平定县| 盐山县| 屯门区| 黄陵县| 福贡县| 黄冈市| 婺源县| 阿拉善左旗| 沁源县| 通渭县| 珠海市| 鄂托克旗| 贵德县| 桂东县| 瓦房店市| 大姚县| 象山县| 盱眙县| 泰来县| 楚雄市| 长子县| 射阳县| 龙南县| 墨玉县| 诏安县| 谢通门县| 林口县| 石棉县| 诸城市| 易门县| 乐亭县| 丰宁| 焦作市| 大港区| 济南市| 芜湖县| 手机|