編譯linux核心
一、實驗前的準備:
二、解壓核心
tar xvf linux-2.6.32.71.tar
三、增加系統呼叫
開啟sys.c檔案。
gedit /usr/src/linux-2.6.32.71/kernel/sys.c
2、
在檔案末尾增加系統呼叫。
asmlinkage intsys_mycall(int number)
{
printk("My Student No. is XXXXX,and My Name is XXXXX*** !");
return number;
}
注:printk就是系統呼叫輸出一行文字,你可以自定義裡面內容,便於最終檢驗。3、
註冊系統呼叫:
gedit /usr/src/linux-2.6.32.71/arch/x86/kernel/syscall_table_32.S
在.long 型別檔案末尾新增:
.longsys_mycall
並且按照順序記住它屬於第幾個系統呼叫,在本機中為337。
4、
gedit /usr/src/linux-2.6.32.71/arch/x86/include/asm/unistd_32.h
在一系列#define __NR_之後新增:
# define __NR_mycall 337
在這裡就需要用到之前記住的數字了。
四、編譯核心
進入解壓目錄:
cd /usr/src/linux-2.6.32.71
make mrproper
make clean
make oldconfig
make bzImage (這個過程和下面的過程非常非常非常長,親測,建議泡杯茶,或是看個電影,沒有兩個小時不行)
make modules
make modules_install
五、拷貝核心
cp /usr/src/linux-2.6.32.71/arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.71-mykernel
六、建立initrd檔案
mkinitramfs-o /boot/initrd.img-2.6.32.71
七、更新grub引導表
gedit /boot/grub/grub.cfg
但必須在同一個
### BEGIN /etc/grub.d/10_linux ###
……
### END /etc/grub.d/10_linux ###
裡面:
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro quiet splash
initrd /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 {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
echo '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
}
八、收尾工作
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
九、重啟
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檢視系統呼叫資訊。
此時,你可以看到
相關文章
- Linux核心模組編譯Linux編譯
- linux核心修改編譯Linux編譯
- 如何編譯 Linux 核心編譯Linux
- 附錄A Linux 編譯核心Linux編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- Vmware下成功編譯linux核心2.6(轉)編譯Linux
- 編譯安裝最新的Linux系統核心編譯Linux
- 編譯系統核心編譯
- 編譯核心過程編譯
- 在 21 世紀該怎樣編譯 Linux 核心編譯Linux
- 04_Linux下把驅動編譯進核心Linux編譯
- A40i &T3 全原始碼編譯-ARM Linux核心在PC Linux的編譯方法原始碼編譯Linux
- 核心編譯part5編譯
- 核心編譯part4編譯
- 核心編譯part3編譯
- 核心編譯part2編譯
- Linux作業系統核心編譯詳解(2)(轉)Linux作業系統編譯
- 香橙派編譯linux核心支援ebpf和虛擬WIFI編譯LinuxeBPFWiFi
- hi3520d核心編譯編譯方法編譯
- 如何編譯樹莓派核心編譯樹莓派
- <摘錄>Linux 環境下編譯 0.11版本核心 kernelLinux編譯
- Linux核心重編譯常見故障及其解決方法(轉)Linux編譯
- Centos8編譯安裝核心CentOS編譯
- Android核心的編譯與裁剪Android編譯
- 編譯核心make dep 的意思(轉)編譯
- Linux編譯核心 Ubuntu18.04 -2020.11.04Linux編譯Ubuntu
- 一個Linux愛好者的2.6.11核心編譯過程(轉)Linux編譯
- 用Make編輯linux核心Linux
- Ubuntu20.04linux核心(5.4.0版本)編譯準備與實現過程-編譯過程(2)UbuntuLinux編譯
- nanoPI編譯核心的一些recordNaN編譯
- win7 64位編譯WebKit核心Win7編譯WebKit
- centos5.1編譯2.6.24.5核心總結CentOS編譯
- 核心編譯2.6.13.4(原創)part1編譯
- OpenBSD核心編譯和最佳化(轉)編譯
- FreeBSD編譯安裝新核心(轉)編譯
- OpenBSD 核心編譯和最佳化(轉)編譯
- Exynos4412 核心移植(二)—— 核心編譯過程分析編譯
- linux-編譯koLinux編譯