ARMv8 Linux内核错误处理过程分析怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARMv8 Linux内核错误处理过程分析怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A 使用 crash 的先决条件 1. kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。 2. 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转...

分析Linux内核5.0系统调用处理过程

学号: 363

本实验来源 https://github.com/mengning/linuxkernel/

 

一、实验要求

1.编译内核5.0
2.qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
3.选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析https://github.com/mengning/menu
4.给出相关关键源代码及实验截图,撰写一篇博客(署真实姓名或学号最后3位编号),并在博客文章中注明“原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ ”,博客内容的具体 如下:

  题目自拟,内容围绕系统调用进行;
  博客中需要使用实验截图
  博客内容中需要仔细分析系统调用、保护现场与恢复现场、系统调用号及参数传递过程
  总结部分需要阐明自己对系统调用工作机制的理解。

编译环境: Ubuntu 18         gcc 4.8

 

二、编译内核:

mkdir kernel
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar
cd linux-5.0.1
make menuconfig 
make

 

技术图片

 

三、制作根文件系统

cd ..
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
sudo apt install gcc-multilib
gcc -pthread -o init linktable.c menu.c test.c -m32 -static
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img

 

四、 启动MenuOS

qemu-system-i386 -kernel bzImage -initrd rootfs.img

技术图片

 

五、 系统调用(学号后两位:63)

技术图片

在test.c中增加pipe函数,再重新编译rootfs.img.

int Pipe(int argc, char *argv[])
{
    int result=-1;
    int fd[2];
    result = pipe(fd);
    if(-1 == result)
    {
        printf("fail to create pipe
");
    }
    else
    {
        printf("successfully create pipe
");
    }
    return 0;
}

技术图片

 

六、实验总结
本实验让我了解了系统调用的工作机制,作为程序员的我们通常只跟用户空间实现的API打交道,内核只跟系统调用打交道,内核不关心应用程序是如何系统调用的。内核中大多数系统函数调用名称以sys_为前缀,每个系统调用有唯一的系统调用号。应用程序通过软中断来通知内核,进入系统调用入口system_call,从而执行对应的系统调用函数。


以上是关于ARMv8 Linux内核错误处理过程分析怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

[笨叔点滴14] ARMv8里异常处理哪些蛇神牛鬼

linux内核分析第五周-分析system_call中断处理过程

2019-举例跟踪分析Linux内核5.0系统调用处理过程

分析Linux内核5.0系统调用处理过程

ARMv8架构的沿革

实验六:分析Linux内核创建一个新进程的过程