[环境信息]
uname -a
查看系统信息)由于这是第一次内核编译,所以不是很清楚一些细节。比如说(下面的内容),在64位的系统上修改unistd_32.h
或者syscall_32.tbl
的话,那么在内核编译过后是否可以成功调用自己编写的mysyscall()
呢?为了不第二次编译内核,所以写了mysyscall32()和mysyscall64()
里面的内容一样,头文件和系统调用表的修改分别对应32和64的文件。下面只给出mysyscall64()
的配置过程,mysyscall32()
过程一样。
/usr/src
目录下。解压文件tar -zxvf linux-5.4.1.tar.gz
修改内核源代码添加一个简单的系统调用到内核。
linux-5.4的内核修改了系统调用的声明方式(可能)。(这是我到后面的步骤的时候看到的,现在反过来修改)
打开/usr/src/linux-5.4.1/kernel/sys.c
,在宏定义之后添加一个自己的系统调用sys_mysysycall64()
。
asmlink说明参数传递不是靠寄存器,而是靠栈来传递。
/usr/src/linux-5.4.1/arch/x86/include/asm/syscalls.h
。/usr/src/linux-5.4.1/arch/x86/entry/syscalls/syscall_64.tbl
cd /usr/src/linux-5.4.1
make mrproper
make clean
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
uname -r
cp /boot/config-5.8.0-53-generic ./.config
make menuconfig
,这里会弹出一个蓝色的界面,可以直接退出。make -j4
,编译时间有点长,