• Linux内核分析实验三----跟踪分析Linux内核的启动过程


    一、Linux内核源代码介绍

    1、根目录

    arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码。

    init目录下包含内核启动相关的代码,如main.c(start_kernel函数相当于普通C程序的main函数,是Linux内核初始化的起点)。

    ipc:进程间通信

    kernel:Linux内核的核心代码

    关注readme文件

     

    二、构造一个简单的Linux系统MenuOS

    1、在实验楼环境下:

    cd LinuxKernel/

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

    即可启动内核,完成后进入menu程序,支持三个命令help、version和quit。

    2、使用自己的Linux系统环境搭建MenuOS的过程

    # 下载内核源代码编译内核

    cd ~/LinuxKernel/

    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz

    xz -d linux-3.18.6.tar.xz

    tar -xvf linux-3.18.6.tar(解压)

    cd linux-3.18.6

    make i386_defconfig

    make # 一般要编译很长时间,少则20分钟多则数小时

     

    # 制作根文件系统

    cd ~/LinuxKernel/

    mkdir rootfs

    git clone https://github.com/mengning/menu.git  # 如果被墙,可以使用附件menu.zip

    cd menu

    gcc -o init linktable.c menu.c test.c -m32 -static –lpthread(init是第一个用户态进程,是1号进程,采用的是静态编译的方式)

    cd ../rootfs

    cp ../menu/init ./

    find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img(img镜像文件)

     

    # 启动MenuOS系统

    cd ~/LinuxKernel/

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

    3、重新配置编译Linux使之携带调试信息

    (1)在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息

    kernel hacking—>

    [*] compile the kernel with debug info

    (2)make重新编译(时间较长)

     

    4、使用gdb跟踪调试内核

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:

    # -S freeze CPU at startup (use ’c’ to start execution)

    # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

    另开一个shell窗口

    gdb

    (gdb)file linux-3.18.6/vmlinux # 在gdb界面中target remote之前加载符号表    file home/shiyanlou/LinuxKernel/vmlinux

    (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行

    (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后

    三、跟踪调试Linux内核

     

  • 相关阅读:
    POJ 1061
    hihocoder 1330
    HDU 1525
    UVALive 3938
    POJ 2528
    HDU 1754
    《ACM-ICPC程序设计系列 数论及其应用》例题个人答案记录
    URAL 1277
    HDU 3746
    HDU 2087
  • 原文地址:https://www.cnblogs.com/20135207oneking/p/5272834.html
Copyright © 2020-2023  润新知