在Fedora12中添加系统调用的过程
在Fedora12中添加系统调用
--顺便升级内核到linux-2.6.33.1
ZYD
准备工作
• 安装内核所需的程序mkinitrd
• mkinitrd的功能是建立要载入的ramdisk的映像文件
initrd.img
– 进入终端,执行su,并输入root的密码,获得root的权
限(仅在此终端内有效)
– 执行命令yum install mkinitrd 从网络安装内核安装程
序mkinitrd
• 在Fedora 12 中打开浏览器,从网上
http://mirrors.163.com...
在Fedora12中添加系统调用
--顺便升级内核到linux-2.6.33.1
ZYD
准备工作
• 安装内核所需的程序mkinitrd
• mkinitrd的功能是建立要载入的ramdisk的映像文件
initrd.img
– 进入终端,执行su,并输入root的密码,获得root的权
限(仅在此终端内有效)
– 执行命令yum install mkinitrd 从网络安装内核安装程
序mkinitrd
• 在Fedora 12 中打开浏览器,从网上
http://mirrors.163.com/kernel/v2.6/下载内核源码
文件:linux-2.6.33.1.tar.gz
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
0)安装下面步骤12)用make install安装内核所需的程序mkinitrd。进入终端,运行命令su, 并输入root的密码,获得超级用户的操作权限(仅在此终端内有效),执行命令yum install mkinitrd 从网络安装内核安装程序mkinitrd。(这一步也可以在编译内核前做)
mkinitrd的功能是建立要载入的ramdisk的映像文件initrd.img。
1)在Fedora 12 中打开浏览器,从网上http://mirrors.163.com/kernel/v2.6/下载内核源码文件:linux-2.6.33.1.tar.gz
2)进入终端,运行命令su, 并输入root的密码,获得超级用户的操作权限(仅在此终端内有效);
3)将linux-2.6.33.1.tar.gz复制到/usr/src/。进入目录/usr/src/, 并解压linux-2.6.33.1.tar.gz到目录/usr/src/: 运行命令 tar -xzf linux-2.6.33.1.tar.gz
4)进入目录/usr/src/linux-2.6.33.1
5)修改linux-2.6.33.1/arch/x86/kernel 目录中的文件syscall_table_32.S:在最后一行添加:.long sys_helloworld /* 338 Zyd*/
6) 修改linux-2.6.33.1/arch/x86/include/asm目录下的unistd_32.h:
在宏命令 #define NR_syscalls 338 前面的#ifdef __KERNEL__ 前添加:#define __NR_helloworld 338,同时把NR_syscalls 改成339.
即改
#define __NR_recvmmsg 337
#ifdef __KERNEL__
#define NR_syscalls 338
为
#define __NR_recvmmsg 337
#define __NR_helloworld 338
#ifdef __KERNEL__
#define NR_syscalls 339
这里NR_syscalls相当于系统调用
结束标志,所有系统调用号都小于它。
7)修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数sys_helloworld。
8)系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用的函数的实现体。其实现程序如下:
SYSCALL_DEFINE0(helloworld)
{
printk("Hello World!\n");
return 1;
}
说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,SYSCALL_DEFINE3 表示函数的参数个数为3.
9*)安装下面步骤12)安装内核所需的程序mkinitrd。这一步如果前面做了,这里就不需要再做了。执行命令yum install mkinitrd 从网络安装内核安装程序mkinitrd。(这一步也可以在一开始就做)。 mkinitrd的功能是建立要载入的ramdisk的映像文件initrd.img。
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
解压源码到指定目录
• 进入终端,运行命令su, 并输入root的密码,获
得超级用户的操作权限(仅在此终端内有效)。
除特别声明外,后面的所有步骤都必须这样获得
root的权限条件下来做;
• 将linux-2.6.33.1.tar.gz复制到/usr/src/(也可放到
其他目录)
• 进入目录/usr/src/, 并解压linux-2.6.33.1.tar.gz到
目录/usr/src/:
– 运行命令 tar -xzf linux-2.6.33.1.tar.gz
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
2)进入终端,运行命令su, 并输入root的密码,获得超级用户的操作权限(仅在此终端内有效);
3)将linux-2.6.33.1.tar.gz复制到/usr/src/。进入目录/usr/src/并解压linux-2.6.33.1.tar.gz到目录/usr/src/: 运行命令 tar -xzf linux-2.6.33.1.tar.gz
4)进入目录/usr/src/linux-2.6.33.1
5)修改linux-2.6.33.1/arch/x86/kernel 目录中的文件syscall_table_32.S:在最后一行添加:.long sys_helloworld /* 338 Zyd*/
6) 修改linux-2.6.33.1/arch/x86/include/asm目录下的unistd_32.h:
在宏命令 #define NR_syscalls 338 前面的#ifdef __KERNEL__ 前添加:#define __NR_helloworld 338,同时把NR_syscalls 改成339.
即改
#define __NR_recvmmsg 337
#ifdef __KERNEL__
#define NR_syscalls 338
为
#define __NR_recvmmsg 337
#define __NR_helloworld 338
#ifdef __KERNEL__
#define NR_syscalls 339
这里NR_syscalls相当于系统调用表结束标志,所有系统调用号都小于它。
7)修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数sys_helloworld。
8)系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用的函数的实现体。其实现程序如下:
SYSCALL_DEFINE0(helloworld)
{
printk("Hello World!\n");
return 1;
}
说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,SYSCALL_DEFINE3 表示函数的参数为3.
9)安装下面步骤12)安装内核所需的程序mkinitrd。执行命令yum install mkinitrd 从网络安装内核安装程序mkinitrd。(这一步也可以在一开始就做)
mkinitrd的功能是建立要载入的ramdisk的映像文件initrd.img。
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
15) 编译test.c,gcc test.c –o test, 并执行 ./test.
16)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
修改文件添加系统调用入口
为要增加的系统调用,在入口地址表中添加
一行
• 进入目录/usr/src/linux-2.6.33.1
• 修改linux-2.6.33.1/arch/x86/kernel 目录中
的文件syscall_table_32.S:
– 在最后一行添加:
• .long sys_helloworld /* 338*/
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
4)进入目录/usr/src/linux-2.6.33.1
5)修改linux-2.6.33.1/arch/x86/kernel 目录中的文件syscall_table_32.S:在最后一行添加:.long sys_helloworld /* 338 Zyd*/
6) 修改linux-2.6.33.1/arch/x86/include/asm目录下的unistd_32.h:
在宏命令 #define NR_syscalls 338 前面的#ifdef __KERNEL__ 前添加:#define __NR_helloworld 338,同时把NR_syscalls 改成339.
即改
#define __NR_recvmmsg 337
#ifdef __KERNEL__
#define NR_syscalls 338
为
#define __NR_recvmmsg 337
#define __NR_helloworld 338
#ifdef __KERNEL__
#define NR_syscalls 339
这里NR_syscalls相当于系统调用表结束标志,所有系统调用号都小于它。
7)修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数sys_helloworld。
8)系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用的函数的实现体。其实现程序如下:
SYSCALL_DEFINE0(helloworld)
{
printk("Hello World!\n");
return 1;
}
说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,SYSCALL_DEFINE3 表示函数的参数为3.
9)安装下面步骤12)安装内核所需的程序mkinitrd。执行命令yum install mkinitrd 从网络安装内核安装程序mkinitrd。(这一步也可以在一开始就做)
mkinitrd的功能是建立要载入的ramdisk的映像文件initrd.img。
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
15) 编译test.c,gcc test.c –o test, 并执行 ./test.
16)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
添加系统调用号
• 修改linux-2.6.33.1/arch/x86/include/asm目录下的unistd_32.h:
• 在宏命令 #define NR_syscalls 338 前面的#ifdef __KERNEL__ 前添加:
#define __NR_helloworld 338,同时把NR_syscalls 改成339.
• 即将下面3行:
• #define __NR_recvmmsg 337
• #ifdef __KERNEL__
• #define NR_syscalls 338
• 改为下面4行:
• #define __NR_recvmmsg 337
• #define __NR_helloworld 338
• #ifdef __KERNEL__
• #define NR_syscalls 339
这里NR_syscalls相当于系统调用表结束标志,所有系统调用号都小于它。
演示者
演示文稿备注
6) 修改linux-2.6.33.1/arch/x86/include/asm目录下的unistd_32.h:
在宏命令 #define NR_syscalls 338 前面的#ifdef __KERNEL__ 前添加:#define __NR_helloworld 338,同时把NR_syscalls 改成339.
即改
#define __NR_recvmmsg 337
#ifdef __KERNEL__
#define NR_syscalls 338
为
#define __NR_recvmmsg 337
#define __NR_helloworld 338
#ifdef __KERNEL__
#define NR_syscalls 339
这里NR_syscalls相当于系统调用表结束标志,所有系统调用号都小于它。
7)修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数sys_helloworld。
8)系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用的函数的实现体。其实现程序如下:
SYSCALL_DEFINE0(helloworld)
{
printk("Hello World!\n");
return 1;
}
说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,SYSCALL_DEFINE3 表示函数的参数个数为3.
9)安装下面步骤12)安装内核所需的程序mkinitrd。执行命令yum install mkinitrd 从网络安装内核安装程序mkinitrd。(这一步也可以在一开始就做)
mkinitrd的功能是建立要载入的ramdisk的映像文件initrd.img。
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
声明并实现系统调用函数
• 修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
• asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数
sys_helloworld。
• 系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在
linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏
SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用
的函数的实现体。其实现程序如下:
• SYSCALL_DEFINE0(helloworld)
• {
• printk("Hello World!\n");
• return 1;
• }
• 说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,
SYSCALL_DEFINE3 表示函数的参数个数为3.
• 至此,系统调用函数helloworld已加进系统内核源码中,下一步就是编译内
核
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
7)修改linux-2.6.33.1/include/linux 目录中的syscalls.h, 在这个文件中添加:
asmlinkage long sys_helloworld(void); 如此,我们声明了系统调用函数sys_helloworld。
8)系统调用的实现函数要添加在linux-2.6.33.1/kernel目录中的sys.c里面。在linux-2.6.33.1里面,跟以前的2.4.X版本不一样,用到了宏SYSCALL_DEFINE0对系统调用进行了封装,因此我们就找不到了系统调用的函数的实现体。其实现程序如下:
SYSCALL_DEFINE0(helloworld)
{
printk("Hello World!\n");
return 1;
}
说明:宏 SYSCALL_DEFINE0 中的0表示函数的参数个数为0;同理,SYSCALL_DEFINE3 表示函数的参数个数为3.
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
编译新内核
• make mrproper
– (把源码包状态重置回编译之前,和新下载的一样)
• make clean
– (如果编译过,先将旧的编译时留下资料去掉)
• make menuconfig或 make oldconfig
– make menuconfig :图形化内核配置界面,用来配置内
核
– 如果只想在原来内核配置的基础上修改一些小地方用命
令:
• make oldconfig
• 作用是备份当前.config文件为.config.old,如若make
config/menuconfig设置不当可用于恢复先前的.config。
• 执行命令 make all
– 相当于执行了make;make bzImage和make modules
这三条指令
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
10)编译内核。
9.1) make mrproper;(把源码包状态重置回编译之前,和新下载的一样)
make clean; (如果编译过,先将旧的编译时留下资料去掉)
9.2)make menuconfig;(图形化内核配置界面,用来配置内核)
或 make oldconfig; (如果只想在原来内核配置的基础上修改一些小地方用这个命令。其作用是备份当前.config文件为.config.old,
如若make config/menuconfig设置不当可用于恢复先前的.config。)
9.3)make;
make bzImage;
make modules;
或者上面9.3)全部只需用一个命令 make all 完成;
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
安装内核模块和内核
• 安装内核模块:make modules_install;
• 安装内核。执行命令make install
– 把上面命令生成的vmlinuz和System.map复制
到/boot目录下
– 修改grub:
• 修改grub配置文件/boot/grub/grub.conf
• 修改开机菜单文件/boot/grub/menu.lst.
• 对grub.conf和menu.lst的修改由make
install命令自动完成的。
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
11) 安装内核模块:make modules_install;
12)安装内核。执行命令make install,把上面命令生成的vmlinuz和System.map复制到/boot目录下同时修改grub: 即修改grub配置文件/boot/grub/grub.conf和grub的开机菜单文件/boot/grub/menu.lst. 对grub.conf和menu.lst的修改由make install命令自动完成的。
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
修改Grub启动管理器
• 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
• 为了能够进入新内核,再次手动修改/boot/grub/grub.conf和
/boot/grub/menu.lst:
– 将其中的default=1改为default=0。
• 一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统。
• grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单
的默认选择。
• 为了能够显示启动时的内核选择菜单,做下面
– 将其中的timeout=0改为timeout=10,
– 用#注销或删除hiddenmenu
• 不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键
显示菜单。
至此,新内核安装完毕。重启系统,可以看到菜单显示,选择Fedora
(2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到
内核版本信息。
演示者
演示文稿备注
在Fedora12中添加系统调用的过程(用linux-2.6.33.1内核)
作者:zyd
13) 修改Grub启动管理器。在/boot目录下,执行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.33.1
14)为了能够进入新的内核,再次手动修改/boot/grub/grub.conf和/boot/grub/menu.lst:
14.1)将其中的default=1改为default=0(一般来说0表示grub.conf中的title所指示的第一个系统,通常是新系统)。grub.conf中的default表示启动时的默认系统;menu.lst中的default则表示菜单的默认选择。
14.2)为了能够显示启动时的内核选择菜单,将其中的timeout=0改为timeout=10,并用#注销或删除hiddenmenu(不然它就自动进入default所指示的系统,如果没改它,也在启动时按ESC键显示菜单)。
15) 重启系统,可以看到菜单显示,选择Fedora (2.6.33.1),进入新的系统。运行命令 cat /proc/version 可以看到内核版本信息。
16)测试系统调用。编写测试程序test.c来调用刚才添加的系统调用。由于我们所定义的系统调用helloworld的调用号是338. 因而,在程序调用helloworld的语句就是:syscall(338). 测试程序如下:
#include
int main()
{
syscall(338);
return 0;
}
17) 编译test.c,gcc test.c –o test, 并执行 ./test.
18)检查执行结果。内核函数printk的输出是记录在/var/log/messages里面,用命令cat /var/log/messages 可以看到输出结果几乎在最后(如果./test是最后执行的命令)。
测试系统调用helloworld
• 编写测试程序test.c来调用刚才添加的系统调用。这以后只
需普通用户权限即可。
• 由于我们所定义的系统调用helloworld的调用号是338. 因
而,在程序调用helloworld的语句就是:syscall(338). 测试
程序如下:
• #include
• int main()
• {
• syscall(338);
• return 0;
• }
• 编译test.c,gcc test.c –o test, 并执行 ./test.
• 检查执行结果。内核函数printk的输出是记录在
/var/log/mess
本文档为【在Fedora12中添加系统调用的过程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。