美文网首页
跟踪分析Linux内核的启动过程

跟踪分析Linux内核的启动过程

作者: virealer | 来源:发表于2016-03-13 18:59 被阅读0次

    曹朋辉
    原创作品转载请注明出处
    《Linux内核分析》MOOC课程

    计算机有三个法宝:

    • 存储程序计算机
    • 函数调用堆栈
    • 中断

    操作系统两把宝剑:

    • 中断上下文的切换-保存现场、恢复现场
    • 进程上下文的切换

    Linux内核代码目录结构(部分)

    arch -CPU相关
      x86/ (关心 )
    fs -file system
    init -  (重要)
      -main.c
        -start_kernel()
    ipc -进程间通信
    kernel -  (关键)
    lib 
    mm -memery management 
    net
    
    

    先来看看menu os启动后的样子

    menuos启动

    这个字符menu os还是挺好看的,如果直接在显示器全屏显示效果应该更好

    好了接下来继续做实验,用GDB跟踪Linux启动过程,步骤如下
    0 搭建menu OS

    # 下载内核源代码编译内核
    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
    cd ../rootfs
    cp ../menu/init ./
    find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
     
    # 启动MenuOS系统
    cd ~/LinuxKernel/
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
    
    # 重新配置编译Linux使之携带调试信息
    1. 在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
    2. 
    kernel hacking—>
    [*] compile the kernel with debug info
    
    3. make重新编译(时间较长)
    

    1 启动Linux内核并冻结

    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选项
    

    2 打开一个新的终端对内核的启动过程进行跟踪分析

    (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表(gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行(gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后
    

    start_kernel分析:

    trap_init 中断相关
    mm_init 内存管理模块
    sched_init 调度模块

    rest_init 0号进程
    kernel_init1号进程

    在大概熟悉了start_kernel的代码之后,我们便可以使用gdb对其做进一步跟踪分析。

    GDB跟踪

    相关文章

      网友评论

          本文标题:跟踪分析Linux内核的启动过程

          本文链接:https://www.haomeiwen.com/subject/bkqflttx.html