Linux内核分析

实验楼学习链接

patch -p1 < ../mykernel_for_linux3.9.4sc.patch

patch命令用于为特定软件包打补丁,diff命令可以生成补丁文件

1
2
3
4
5
6
// 在当前路径下打当前路径的补丁(当前路径的补丁就是当时在制作补丁的时候在该路径下做的)
$ patch-p0< xxx.patch
//在当前路径打上级路径的补丁(这里需要忽略上一级路径使用-p1)
$ patch -p1 < xx.patch
//在当前路径打上上级路径的补丁(这里需要忽略上上一级路径使用-p2)
$ patch -p2 < x.patch

编译前

编译后

$ qemu -kernel arch/x86/boot/bzImage arch/x86/boot/下生成bzImage编译好的大内核镜像,运行内核代码,调试内核镜像,其实两个c文件中就是一个print函数,包含中断机制。

QUME模拟出了一个完整的个人电脑,它里面的CPU啊什么的都是模拟出来的,它甚至可以模拟不同架构的CPU,比如说在使用Intel X86的CPU的电脑中模拟出一个ARM的电脑或MIPS的电脑。如果想定制这个虚拟机的配置,比如用什么样的CPU啊、什么样的显卡啊、什么样的网络配置啊,指定相应的命令行参数就可以了。


qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 调试另一个内核

-initrd file参数表示使用“file”作为初始化的RAM磁盘

1
2
3
4
5
6
# 关于-s和-S选项的说明:
# 1. -S
# -S freeze CPU at startup (use ’c’ to start execution)
# 2. -s
# -s shorthand for -gdb tcp::1234
# 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

结合gdb进行调试,在gdb界面中targe remote之前加载符号表,建立gdb和gdbserver之间的连接,设置断点

gdb中按c,进行断点调试