20233810《Linux内核原理与分析》第八周作业

Linux内核如何装载和启动一个可执行程序

  1. BIOS/UEFI阶段:

    • BIOS(Basic Input/Output System): 在传统的 BIOS 系统中,计算机开机后首先加载 BIOS,然后 BIOS 将控制权传递给引导设备上的引导扇区(boot sector)。
    • UEFI(Unified Extensible Firmware Interface): 在现代系统中,通常使用 UEFI 替代 BIOS。UEFI启动的过程与BIOS类似,但有一些关键的不同之处。
  2. 引导加载程序阶段:

    • GRUB(GRand Unified Bootloader): 在许多 Linux 系统中,GRUB 是常用的引导加载程序。它的任务是加载操作系统内核。GRUB 被安装在引导分区的引导扇区上,它能够理解文件系统并定位并加载内核。
  3. Linux内核启动:

    • 内核镜像: GRUB 会加载操作系统内核的镜像,通常是位于文件系统中的 /boot 目录下的 vmlinuz 文件。
    • 初始化内核: 内核开始执行,并初始化硬件、文件系统等必要的组件。
    • 启动初始化进程: 内核在启动时会启动一个用户空间的初始化进程,通常是 init 或者现代系统中的 systemd
  4. 用户空间初始化:

    • 系统初始化: 初始化进程负责启动系统中的其他进程和服务。
    • 用户登录: 一旦系统初始化完成,用户登录界面就会出现,用户可以登录到系统中。

程序编译

程序从源代码到可执行文件的步骤:预处理、编译、汇编、衔接--以hello.c为例。

预处理: gcc -E hello.c -o hello.i  -m32
编译:gcc -S hello.i  -o hello.s -m32
汇编:gcc -c hello.s -o hello.o -m32
默认衔接(动态库):gcc hello.o -o hello -m32 
衔接静态库:gcc hello.o -o hello.static -m32 -static

实验内容

首先更新linux/kernel下的menu,并将test_exec变成test.c

进入内核,查看exec命令是否添加进入内核

退出内核,新建terminal进行gdb调试查看

内核中对sys_execve,load_elf_binary,start_thread进行断点调试,c执行,list列出代码,并进行单步调试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值