设为首页 收藏本站
查看: 994|回复: 0

[经验分享] 向linux内核增加一个系统调用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-11-18 10:04:38 | 显示全部楼层 |阅读模式
验证编辑编译内核的流程,并增加新的系统调用
  注意:需要/目录至少10GB空间,/boot目录500MB空间

下载内核并解压
  kernel下载
  
百度云搬运 密码: qc8b
  
进入 /usr/src目录
  
tar -xvf linux-4.13.10.tar.xz
  
cd linux-4.13.10

添加系统调用号
  vim ./arch/x86/entry/syscalls/syscall_64.tbl(32位系统是syscall_32.tbl)
  
DSC0000.png

声明系统调用函数原型
  vim ./include/linux/syscalls.h
  
DSC0001.png

  其中的asmlinkage用在大多数的系统调用中。在一些情况下是需要明确的告诉编译器使用stack来传递参数,X86中的系统调用是先将参数压入stack以后调用sys_函数的,所以所有的sys_函数都有asmlinkage来告诉编译器不要使用寄存器来编译。


添加系统调用函数的定义
  vim kernel/sys.c 末尾添加
  
DSC0002.png

编译
  make menuconfig

  (缺失ncurses,sudo apt-get install libncurses5-dev,)选择save 然后exit

  make clean
  
make -jn

  并行编译,加快编译速度,n=cpu核心数×2,双核即-j4
  
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: 没有那个文件或目录 sudo apt-get install libssl-dev
  
作为参考,i5-6200u 2.8GHZ需要40min左右


安装
  make modules
  
make modules_install 安装模块
  
make install 安装内核
  
update-grub

测试
  重启选择新的内核(grub引导界面选择ubuntu高级设置,选择linux-4.13.10)
  
进入后可uname -a确认内核版本
  

#include<stdio.h>  
#include<unistd.h>
  

  
int main()
  {
  int a=syscall(333,2);
  printf("system call return %d\n",a);
  return 0;
  
}
  

DSC0003.png

  编译后运行返回2,并在日志中打印hello world

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408167-1-1.html 上篇帖子: 《Linux命令行与shell脚本编程大全》 第四章 下篇帖子: 使用Compute Engine工具连接Linux VM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表