Centos下的Linux系统调用

学习Makefile基本使用方法

1 Makefile简介

linux环境下,当用户编译文件过多的时候,使用makefile可以帮助模块化编译文件,makefile是一个脚本文件,根据规则,来执行相应的脚本文件,实现自动化编译。

2 语法:

Makefile会去执行所有定义的命令,和直接输入命令行是一样的效果

(1)目标即要生成的文件。如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。

(2)默认情况下Makefile的第一个目标为终极目标。

(3)依赖:即目标文件由哪些文件生成。

(4)命令:即通过执行命令由依赖文件生成目标文件。注意每条命令之前必须有一个tab保持缩进,这是语法要求(会有一些编辑工具默认tab为4个空格,会造成Makefile语法错误)。

(5)all:Makefile文件默认只生成第一个目标文件即完成编译,但是我们可以通过all 指定所需要生成的目标文件。

3 变量:
(1)“:=” 表示直接赋值,赋予当前位置的值。
(2)使用 “=”进行赋值,变量的值是整个Makefile中最后被指定的值。
(3)“?=” 表示如果该变量没有被赋值,赋值予等号后面的值。
(4)"+="表示将符号后面的值添加到前面的变量上

 下载Linux源代码,尝试在Linux源程序中增加一个系统调用

1下载Linux源代码:

(1)查看CentOS的版本号:

cat /etc/centos-release

查看内核版本:

uname -r

 

 

(2)访问centos官网: Index of /,下kernel-3.10.0-1160.el7.src.rpm 的rpm包并安装:

rpm -ivh kernel-3.10.0-1160.el7.src.rpm

 

安装完rpm会在目录 /root/rpmbuild/SOURCES有一个 linux-3.10.0-1160.el7.tar.xz 的压缩包,使用归档管理器打开并解压,得到linux-3.10.0-1160.el7文件夹,目录下即为源代码。

Centos下的Linux系统调用_第1张图片

 

2在Linux源程序中增加一个系统调用:

修改源程序

进入linux解压包cd linux-4.16.1

 

使用vim编辑arch/x86/entry/syscalls/syscall_64.tbl文件,添加系统调用号:

vim arch/x86/syscalls/syscall_64.tbl

Centos下的Linux系统调用_第2张图片

 

添加一个没有使用的系统调用号(id):

 

使用vim编辑include/linux/syscalls.h文件,添加原型声明:

vim include/linux/syscalls.h

 

使用vim编辑kernel/sys.c文件,实现具体的系统调用:

vim kernel/sys.c

Centos下的Linux系统调用_第3张图片

 

代码:

asmlinkage long sys_helloworld(void)

{

printk( "helloworld!");

return 1;

}

 编译一次Linux内核检查新增系统调用的效果

1编译内核

(1)配置内核

Centos下的Linux系统调用_第4张图片

 

直接点击保存(save)退出即可。

Centos下的Linux系统调用_第5张图片

 

(2)编译内核

编译需要elfutils-libelf-devel 和 openssl-devel 的支持,安装命令:

yum install elfutils-libelf-devel openssl-devel

使用make命令开始编译内核,可以使用多核线程提高编译速度:

make -j4

等待编译结束。

(3)安装内核

执行 make modules_install 开始安装模块,并执行make install 开始安装内核。

安装结束后重启虚拟机。

2检查新增系统调用的效果

使用vim命令创建测试文件helloworld.c:

vim helloworld.c

Centos下的Linux系统调用_第6张图片

 

使用gcc编译文件:

gcc -o helloworld helloworld.c

运行可执行文件:

./helloworld

Centos下的Linux系统调用_第7张图片

返回值为1,系统调用成功。

 

你可能感兴趣的:(Linux,linux,centos,服务器)