linux内核编译2.6.36&系统调用添加的实验

参考说明

本贴主要参考了:

https://blog.youkuaiyun.com/weibo1230123/article/details/82716763

https://www.cnblogs.com/wanyuanchun/p/4048359.html

实验目的

学习linux内核的编译,期望掌握内核编译方法后,通过对内核代码的修改来学习linux内核。

工具、系统、源码准备

一、在使用的虚拟机版本号如下:VMware® Workstation 15 Pro 15.5.1 build-15018445,有点老古董了,哈哈

二、linux版本使用的是:ubuntu-10.10-desktop-i386.iso ,内核版本是 2.6.35

三、重新编译内核,在 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 下载了 linux-2.6.36.tar.gz 源码

内核编译

以上是准备工作,下面是操作步骤
1、创建虚拟机,安装 ubuntu-10.10-desktop-i386.iso
2、使用sudo su 切换到root用户,mv linux-2.6.36.tar.gz  /usr/src,目的是把下载的内核源代码文件移到/usr/src目录
3、cd到/usr/src目录,解压源代码 tar zxvf linux-2.6.36.tar.gz,目的是解压内核包,生成的源代码放在linux-2.6.36目录下
4、cd linux-2.6.36 后,cp /boot/config-2.6.35-22-generic .config 目的是拷贝一份原有的config,改名为.config
5、配置内核,有几种方法(实际上我没有配置) 
#make menuconfig  //基于ncurse库编制的图形工具界面
#make config  //基于文本命令行工具,不推荐使用
#make xconfig  //基于X11图形工具界面
#make gconfig  //基于gtk+的图形工具界面
6、在linux-2.6.36目录,编译内核,命令为 make,或者 make -j4
7、在linux-2.6.36目录,编译和安装内核模块,命令为 make modules_install
8、在linux-2.6.36目录,安装内核,命令为 make install
9、在linux-2.6.36目录,sudo mkinitramfs -o /boot/initrd.img-2.6.36
10、在linux-2.6.36目录,sudo update-initramfs -c -k 2.6.36
11、在linux-2.6.36目录,sudo update-grub2  //自动修改系统引导配置,产生grub.cfg启动文件。
       这个改的是 /boot/grub/grub.cfg , 系统会自动搜索 img 文件,并更新 grub.cfg 文件
12、reboot 

启动OK后,查看版本号 uname -a,可以看到内核是新编译的,说明实验成功了

内核修改(增加系统调用)

编译内核的目的还是期望能够自己修改内核,典型的实验是添加系统调用,下面是添加系统调用的步骤,主要参考 https://www.cnblogs.com/wanyuanchun/p/4048359.html
1、修改源码 /usr/src/linux-2.6.36/arch/x86/include/asm/unistd_32.h 中增加系统调用

   #define __NR_mycall 341

   #define __NR_mycallext 342

   同时要把
   #define NR_syscalls 修改为343

3、在 /arch/x86/kernel/syscall_table_32.S 中添加系统调用表项


4、在 /usr/src/linux-2.6.36/kernel/sys.c 中增加了实现,输出信息到printk


5、编写包含系统调用的程序,执行后,dmesg 进行查看

编写调用新增的系统调用的用户态可执行程序

#include <stdio.h>

int main()
{
    syscall(341, 1);

    syscall(342, 1);
    return 0;
}

gcc -g -O2 -o syscallext syscallext.c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值