为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

在Fedora12中添加系统调用的过程

2011-03-10 10页 pdf 103KB 45阅读

用户头像

is_179638

暂无简介

举报
在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中添加系统调用的过程
在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,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索