ubuntu12.04-增加系统调用再编译内核

一、实验内容

1、添加头文件及系统调用函数;

2、添加相应的系统调用函数声明;

3、添加一个没有使用的系统调用号;

4、编译内核,重启进入编译后的内核; 

5、编写测试程序测试系统调用。


二、实验步骤

1.进入中断,切换为root身份;

sudo -s -H     //按要求输入密码,切换为root身份

2.安装vim;

apt-get install vim  

//安装vim文本编辑器(在vim中,i进入编辑, esc退出编辑状态,G跳到末尾, gg进入开头, :wq保存退出, :q不保存退出)

3.打开sys.c文件,添加头文件及系统调用函数;

cd  /usr/src/linux-3.13.3/kernel   //进入sys.c的目录

vim  sys.c                        //利用vim打开sys.c

#include        //在开头加入头文件:

asmlinkage int sys_mycall(void)

{   

   printk(KERN_ALERT "My name is ***!!My studentid is *****!\n");

   return 1;

}                               //在末尾加入函数sys_mycall

4.打开syscalls.h文件,添加相应的系统调用函数声明;

cd  /usr/src/linux-3.13.3/arch/x86/include/asm   //进入syscalls.h目录级

vim  syscalls.h                       //利用vim打开syscalls.h

asmlinkage  int  sys_mycall(void);   //倒数第二行后插入函数声明

5.打开syscall_32.tbl,添加一个没有使用的系统调用号;

cd  /usr/src/linux-3.13.3/arch/x86/syscalls  //进入syscall_32.tbl目录级

vim  syscall_32.tbl           //利用vim打开syscall_32.tbl  

 

222  i386  mycall  sys_mycall//添加一个系统调用的id(我这里用的没有使用的222号)

6.进入内核文件目录级,开始编译;

cd  /usr/src/linux-3.13.3    //进入内核文件linux-3.13.3 的目录级

7.删除以前进行过的内核功能选择文件;

make  mrproper    

8.载入配置文件.config,注意不要修改;

make  menuconfig

9.编译内核(大概15-20分钟);

make  bzImage

10.编译模块(大概1-1个半小时);

make  modules

11.安装模块到正确目录;

make  modules_install

12.安装,当然这里可以手动使用命令复制、移动目标文件到指定目录;

make  install

13.更新开机启动项;

update-grub

14.重启;

reboot

15.查看内核版本是否跟新;

uname -a      //查看当前内核详细信息,可以看到内核更新时间,确定是否编译成功

16.写测试程序,编译运行测试自己添加的系统调用函数。

附测试函数mycall.c:

#include 

int main()

{

syscall(222);     //222号是我自己添加的系统调用函数的id号

return 0;
}

gcc -o mycall mycall.c  //gcc编译测试函数

./mycall               //运行测试函数

sudo dmesg -c          //查看日志文件里打印的信息(姓名、学号)


三、实验中遇到的问题

1.输入make bzImage报错;

*** Configuration file ".config"not found!

*** Please run some configurator (e.g."make oldconfig" or

*** "make menuconfig" or"make xconfig").

make[2]: *** [silentoldconfig] Error 1

make[1]: *** [silentoldconfig] Error 2 

解决方法:

先make menuconfig, 并设置对应64位的配置;安装后继续输入make menuconfig。

2.make menuconfig 报错;

Your display is too small to runMenuconfig!

It must be at least 19 lines by 80 columns.

make[1]: *** [menuconfig] Error 1

make: *** [menuconfig] Error 2

解决方法:窗口最大化。

3.make modules报错;

ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!

make[1]: *** [__modpost] Error 1

make: *** [modules] Error 2

解决方法:

修改usr/src/linux-3.13.3/.config文件,找到STAGING项,将其值改为n。

CONFIG_RTS5139=n   //修改CONFIG_RTS5139=n(在整个文件的80%-82%左右)




你可能感兴趣的:(Linux学习,linux,ubuntu,内核,终端,vim)