linux 内核 启用中断,跟踪分析Linux内核的启动过程

计算机有三个法宝:

存储程序计算机

函数调用堆栈

中断

操作系统两把宝剑:

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

进程上下文的切换

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

arch -CPU相关

x86/ (关心 )

fs -file system

init - (重要)

-main.c

-start_kernel()

ipc -进程间通信

kernel - (关键)

lib

mm -memery management

net

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

6f436dbf1be8

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对其做进一步跟踪分析。

6f436dbf1be8

GDB跟踪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值