linux内核添加系统调用(详细)

linux内核添加系统调用(详细)

说在前面:

这是我第五次编译内核,分别踩了很多坑。中途问过wz佬,佬让我用qemu。我还是最后换ubuntu虚拟机跑了。现在已经有点emo了。

这篇博客是我第五次的时候回滚快照重开的写的。

注意事项(必看)

  1. 如果服务器够好就放服务器,如果是学生机子1核2G还是别放服务器了。出锅概率很大,比如内存不够,前台运行断网,后台编译出问题了看不见。已经被坑三次了。
  2. 打快照很重要!!!!打快照很重要!!!!打快照很重要!!!!
  3. 建议使用ubuntu版本,看别人博客的时候注意人家的系统版本号,如果你不想注意的话请使用qemu模拟器。
  4. 虚拟机的话磁盘打快照前给足50G!!不然后期编译磁盘满了就开始gg了。
  5. 虚拟机建议多个几个核,编译的时候开核数*2的线程。
  6. 如果可以的话建议上一个ccache,不然之后想添加东西的话就编译很久了。
  7. 没事别用百度搜索,垃圾!google搜的csdn博客都比百度靠谱!

1.查看适合自己Ubuntu版本的内核版本

4.10    Warty Warthog       2.6.8
5.04    Hoary Hedgehog      2.6.10
5.10    Breezy Badger       2.6.12
6.06    Dapper Drake        2.6.15
6.10    Edgy Eft            2.6.17
7.04    Feisty Fawn         2.6.20
7.10    Gutsy Gibbon        2.6.22
8.04    Hardy Heron         2.6.24
8.10    Intrepid Ibex       2.6.27
9.04    Jaunty Jackalope    2.6.28
9.10    Karmic Koala        2.6.31
10.04   Lucid Lynx          2.6.32
10.10   Maverick Meerkat    2.6.35
11.04   Natty Narwhal       2.6.38
11.10   Oneiric Ocelot      3.0
12.04   Precise Pangolin    3.2 or newer
12.10   Quantal Quetzal     3.5
13.04   Raring Ringtail     3.8
13.10   Saucy Salamander    3.11
14.04   Trusty Tahr         3.13 or newer
14.10   Utopic Unicorn      3.16
15.04   Vivid Vervet        3.19
15.10   Wily Werewolf       4.2
16.04   Xenial Xerus        4.4 or newer
16.10   Yakkety Yak         4.8
17.04   Zesty Zapus         4.10
17.10   Artful Aardvark     4.13
18.04   Bionic Beaver       4.15 or newer
18.10   Cosmic Cuttlefish   4.18
19.04   Disco Dingo         5.0
19.10   Eoan Ermine         5.3

Ubuntu18.04可以支持4.15及以上。

image-20211206184332128

这里干脆更新自己的内核

https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.1.tar.gz

 wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.1.tar.gz
tar -xvf linux-5.4.1.tar.gz #解压

linux内核添加系统调用(详细)_第1张图片

2.配置虚拟机参数

linux内核添加系统调用(详细)_第2张图片

  1. 开机进入Ubuntu系统,安装gparted软件。
  2. 打开软件
  3. linux内核添加系统调用(详细)_第3张图片
  4. 直接拉满
  5. linux内核添加系统调用(详细)_第4张图片
  6. 确定后点左上角的✔等待操作完成

linux内核添加系统调用(详细)_第5张图片

这时候可以打个快照了。因为我之前的文件还有用,怕之后出问题。

3.配置ccache

这个操作主要是为了之后如果还想额外加系统调用设置的。这个能把之前编译过的文件做缓存从而加快速度。所以单纯做一次也没必要。

摘自1

摘自2

1. 安装ccache	sudo apt-get install ccache
2. 修改ccache环境变量
    vim ~/.bashrc
    添加如下语句:
    # ccache
    #user是用户目录,这个目录是用来保存编译信息,可以使用其它目录。
    export CCACHE_DIR="/home/user/.ccache" 
    export CC="ccache gcc"
    export CXX="ccache g++"
    export PATH="/usr/lib/ccache:$PATH"
3. 更新环境变量使之立即生效
    source ~/.bashrc
4. 修改ccache使用的缓存大小,根据你自己的需要配置
    ccache -M 6G
5. 检查情况
    使用which g++,若输出的为/usr/lib/ccache则成功
		注意:  
		内核态和用户态下的ccache并不相通
		用户态下看到的是/usr/lib/ccache/g++
		内核态下看到的是/usr/bin/g++
6.使用方法:
		编译普通c文件:输入ccache gcc xxx(gcc xxx为正常gcc编译命令)
		编译内核: 切换到root,进入到你的Linux源码包
				  使用make语句时加上CC='ccache gcc' 
				  即make CC='ccache gcc' 
		(末尾可以加上 -j4 以更快的速度编译,前提cpu为二核)
         初次使用时编译时间还没有改变,但是以后再编译时时间就会快很多
    	(若更改了虚拟机的配置,可能会要重新配置ccache)
          对于内存偏小的朋友需要谨慎使用ccache,否则可能会造成物理机无法正常使用。
6.查看ccache信息
     ccache -s    

4.更新系统调用表,添加系统调用id。

修改syscall_64.tbl

cd arch/x86/entry/syscalls/

linux内核添加系统调用(详细)_第6张图片

linux内核添加系统调用(详细)_第7张图片

注意写在注释上面别写在最后!

linux内核添加系统调用(详细)_第8张图片

5.添加系统调用函数声明

修改arch/x86/include/asm/syscalls.h

linux内核添加系统调用(详细)_第9张图片

6.在内核源代码添加函数定义

vim kernel/sys.c

linux内核添加系统调用(详细)_第10张图片

7.编译内核

  • 安装编译所需工具
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev 
sudo apt-get install build-essential 
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev

需要的话可以考虑在这里来个快照了

make menuconfig

make menuconfig之后选择save并退出。

linux内核添加系统调用(详细)_第11张图片

之后还要修改一些东西,不然编译途中会出错。

  • vim ./.config
  • CONFIG_SYSTEM_TRUSTED_KEYS=""。(使用shift+":",输入?CONFIG_SYSTEM_TRUSTED_KEYS回车后查询)
  • linux内核添加系统调用(详细)_第12张图片
make CC='ccache gcc' -j8 (我开了4个核,所以*2=8) ,编译的时候就可以学其他东西去了。
如果没有ccahe的就直接make -j2,后面的数字取决你的核数*2.

实测4个核1小时跑完。编译完花了36G。

linux内核添加系统调用(详细)_第13张图片

linux内核添加系统调用(详细)_第14张图片

8.安装模块

sudo make modules_install

linux内核添加系统调用(详细)_第15张图片

sudo make install

linux内核添加系统调用(详细)_第16张图片

9.切换内核

reboot重启虚拟机,按住shift选择进入高级选项。看到linux-5.4.1说明内核。

这里我直接按住shift就直接重启进来了。

linux内核添加系统调用(详细)_第17张图片

10.测试系统调用

#include
#include
#include
int main(){
	syscall(335);
	return 0;
}
yan@ubuntu:~$ vim test.c
yan@ubuntu:~$ gcc -o test test.c
yan@ubuntu:~$ ./test.out
yan@ubuntu:~$ dmesg

linux内核添加系统调用(详细)_第18张图片

参考文章

https://blog.csdn.net/weixin_43434136/article/details/117394874

https://blog.csdn.net/zyf2333/article/details/80043152

https://blog.csdn.net/fuyuande/article/details/90485882

https://blog.csdn.net/weixin_48299611/article/details/115563624

你可能感兴趣的:(操作系统,linux,服务器,ubuntu)