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

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

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

2022-09-15 20:58 作者:Linux遠(yuǎn)航者  | 我要投稿

一、實驗前的準(zhǔn)備:

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

安裝虛擬機(jī)教程:jingyan.baidu.com/artic

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

附: 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)失效,大家可以去某度上面進(jìn)行下載。網(wǎng)上資源很多,造成的不便,很抱歉~)

2022年嵌入式開發(fā)想進(jìn)互聯(lián)網(wǎng)大廠,你技術(shù)過硬嗎?

騰訊T6-9首發(fā)“Linux內(nèi)核源碼嵌入式開發(fā)進(jìn)階筆記”,差距不止一點點哦

二、解壓內(nèi)核

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

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

3、先把下載好的內(nèi)核復(fù)制到 /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】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。?/blockquote>

Linux內(nèi)核源碼技術(shù)學(xué)習(xí)路線+視頻教程代碼資料docs.qq.com/doc/DTkZRWXRFcWx1bWVx

三、增加系統(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)用,在本機(jī)中為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)備工作!下面才是真正的開始!打好精神,真正的挑戰(zhàn)在下面!

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

進(jìn)入解壓目錄:

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引導(dǎo)表

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

1.gedit /boot/grub/grub.cfg

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

但必須在同一個

### 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

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

紅框是改過之后的,籃框里面的是你需要復(fù)制的內(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)要看到勝利的曙光啦!

重新進(jìn)入終端,獲取權(quán)限,過程前面有講,不再重復(fù)。在終端鍵入 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)歷)的評論 (共 條)

分享到微博請遵守國家法律
满洲里市| 凤台县| 夏津县| 同江市| 体育| 百色市| 绥化市| 湛江市| 额尔古纳市| 连江县| 右玉县| 鄂温| 密云县| 太湖县| 斗六市| 大城县| 嘉黎县| 潢川县| 邢台市| 平定县| 专栏| 南溪县| 双峰县| 泰宁县| 雷山县| 六盘水市| 娄烦县| 天水市| 尉氏县| 利辛县| 蚌埠市| 新郑市| 玉环县| 罗平县| 广元市| 屏山县| 旺苍县| 河源市| 蓬莱市| 龙川县| 汉川市|