在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, 内核配置还是比较麻烦的,自己又不是太懂, 就直接使用旧配置。
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:重启,进入新内核,写测试程序。