在Fedora 13裡編譯內核(linux-2.6.36)+添加系統調用
首先說明:我系統本來內核是2.6.33版本,我編譯的是2.6.36版本
第一步:下載內核源代碼。我下載的是linux-2.6.36。然後解壓到/usr/src下。
第二步:修改三個文件。因為是最新的2.6.36版本,很多文件名有細微差別。
1、在arch/x86/kernel/syscall_table_32.S中添加:.long sys_mysyscall(當然也可以在syscall_table_64.S中修改
但是在2.6.27版本裡不能在entry.S中改)
2、在arch/x86/include/asm/unistd_32.h中添加:#define __NR_mysyscall 341(這個和上面一樣,它同時有unistd.h )
unistd_32.h , unistd_64.h三個文件)
3、在/kernel/sys.c中添加該系統調用實現的功能:
asmlinkage int sys_mycall(int argc){
return argc;
}
第三步:准備工作做好後,就可以開始編譯過程了。
1.進入內核文件下
cd linux-2.6.36
2.配置
make mrproper
make config
make menuconfig
make xconfig
make oldconfig
四選一,我編譯的時候選的oldconfig, 內核配置還是比較麻煩的,www.linuxidc.com自己又不是太懂, 就直接使用舊配置。
3.編譯。2.6.36已經是非常高的版本了,所以執行make all,就相當於:make dep(建立相依的屬性關系),make clean
(將舊的資料去除掉),make bzImage(開始編譯核心),make modules(開始編譯模塊)
make all
make dep。
make clear。
make bzImage。然後就是開始漫長的編譯過程了,最後終於生成bzImage。所在文件的路徑會有提示,如我的是
linux-2.6.36/arch/x86/boot/bzImage。
make modules
4.安裝模塊。安裝模塊到/lib/modules/,以後程序運行時從這個目錄加載模塊。
make modules_install
5.安裝內核。把make all 生成的vmlinuz和System.map復制到/boot目錄下同時修改grub /boot/grub/menu.lst.
修改menu.lst是自動完成的哦!!不用手動修改。
make install
6:重啟,進入新內核,寫測試程序。