其他分享
首页 > 其他分享> > 深入理解系统调用

深入理解系统调用

作者:互联网

一、实验要求

笔者学号最后2位为43,查阅得知为accept()函数。

 

二、实验环境搭建

1. 配置内核选项并编译

sudo apt install axel
axel -n 20 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.34.tar.xz
xz -d linux-5.4.34.tar.xz
tar -xvf linux-5.4.34.tar
cd linux-5.4.34
make defconfig # Default configuration is based on 'x86_64_defconfig'
make menuconfig
make -j4
qemu-system-x86_64 -kernel arch/x86/boot/bzImage

2. 构造根文件并提供可执行程序

axel -n 20 https://busybox.net/downloads/busybox-1.31.1.tar.bz2
tar -jxvf busybox-1.31.1.tar.bz2
cd busybox-1.31.1
make menuconfig
make -j4 && make install
mkdir rootfs
cd rootfs
cp ../busybox-1.31.1/_install/* ./ -rf
mkdir dev proc sys home
sudo cp -a /dev/{null,console,tty,tty1,tty2,tty3,tty4} dev/

给init脚本添加权限

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "Wellcome MengningOS!"
echo "--------------------"
cd home
/bin/sh
chmod +x init

打包根文件并测试

find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../rootfs.cpio.gz
qemu-system-x86_64 -kernel linux-5.4.34/arch/x86/boot/bzImage-initrd rootfs.cpio.gz

 

三、编写系统调用程序

 编写程序 accept_43.c,代码如下:

int main() {
    asm volatile(
        "movl $0x2B,%eax\n\t"
        "syscall\n\t"
    );
    printf("Hello accept");
    return 0;
}

用gcc静态编译,生成可执行文件,重新执行

gcc -o test_mincore test_mincore.c -static
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../rootfs.cpio.gz
qemu-system-x86_64 -kernel linux-5.4.34/arch/x86/boot/bzImage -initrd rootfs.cpio.gz

启动qemu观察结果。

 

标签:调用,x86,tar,cpio,34,理解,深入,linux
来源: https://www.cnblogs.com/geekshawn/p/12973386.html