cd /usr/src/linux-4.16.10/arch/x86/include/asm/vim syscalls.h(插入asmlinkage long sys_helloworld(void);)
第八步:加一个系统调用的id
cd/usr/src/linux-4.16.10/arch/x86/entry/syscallsvim syscall_64.tbla、进入/usr/src/linux-4.16.10/arch/x86/syscalls目录b、打开文件syscall_64.tbl(该文件有一个系统调用列表linux系统iso下载,最前面的属性是id)c、在里面添加自己的系统调用号(333 64 helloworld sys_helloworld)d、使用esc +:wq命令保存退出
第九步:配置内核
cd /usr/src/linux-4.16.10编译内核和安装内核.依次输入这四条语句sudo make mrpropersudo make cleansudo make menuconfig (并且在makenfig时,将那个General setup内的localversion修改成新的名称,比如我这里的myKernel)sudo make menuconfig出现的问题:
<pre data-lang="javascript@javascript@JavaScript" codecontent="scripts/Makefile.lib:194: recipe for target 'scripts/kconfig/lexer.lex.c' failed make[1]:
*** [scripts/kconfig/lexer.lex.c] Error 127 Makefile:552: recipe for target 'menuconfig' failed make:
*** [menuconfig] Error 2" class=" language-javascript">
解决办法:
根据自己处理器的最大线程数目来编译.sudo make -j4 (我的电脑是4核4线程)linux内核系统调用,线程越多编译越快!
此处可能报错:
解决办法:
第一反应耐心看报错信息linux内核系统调用linux 常用命令,缺什么包补什么包sudo apt-get install XXXX下面这个语句可以解决较多的问题。
第十步:安装内核
编译后安装内核到系统中.sudo makemodules_install sudomake install // 安装内核
这个地方也需要一定的时间,反正编译三个多小时,不差这一会哈哈哈
第十一步:重启虚拟机
第十二步:验证系统调用是否成功
a、登陆虚拟机b、打开终端c、输入下列指令:(1)gcc hello.c
(2)./a.out
返回值为1!!!!!
系统调用成功了!!!!