《linux内核与分析》第三周
2016-03-13 13:23
459 查看
20135130王川东
实验:构造一个简单的Linux系统的MenuOS
命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img、
命令含义:kernel启动一个内核,其后为内核位置。
initrd指定一个根文件系统。
使用gdb调试和跟踪:
重新配置和编译Linux使之携带调试信息
命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
注:-S freeze CPU at startup (use ’c’ to start execution) CPU初始化之前冻结
-s shorthand for -gdb tcp::1234 在端口1234上创建gdb server (不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项)
另开一个shell窗口:
(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函数中有全局变量init_task,即手工创建的PCB,0号进程即最终的idle进程。0号进程一直存在。当系统没有进程需要执行时就调度idle进程。
rest_init()中的run_init_process是linux中的一号进程,第一个用户态进程。
实验过程:
进入LinuxKernel,输入指令:
得到结果:
重新配置和编译Linux使之携带调试信息;输入命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
此时QEMU为Stopped状态:
另开窗口,输入指令:
linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
break start_kernel # 设置断点:
输入C,回车,QEMU开始执行:
输入list,可看到程序执行到此:
同样的方法,设置rest_init断点“
实验:构造一个简单的Linux系统的MenuOS
命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img、
命令含义:kernel启动一个内核,其后为内核位置。
initrd指定一个根文件系统。
使用gdb调试和跟踪:
重新配置和编译Linux使之携带调试信息
命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
注:-S freeze CPU at startup (use ’c’ to start execution) CPU初始化之前冻结
-s shorthand for -gdb tcp::1234 在端口1234上创建gdb server (不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项)
另开一个shell窗口:
(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函数中有全局变量init_task,即手工创建的PCB,0号进程即最终的idle进程。0号进程一直存在。当系统没有进程需要执行时就调度idle进程。
rest_init()中的run_init_process是linux中的一号进程,第一个用户态进程。
实验过程:
进入LinuxKernel,输入指令:
得到结果:
重新配置和编译Linux使之携带调试信息;输入命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
此时QEMU为Stopped状态:
另开窗口,输入指令:
linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
break start_kernel # 设置断点:
输入C,回车,QEMU开始执行:
输入list,可看到程序执行到此:
同样的方法,设置rest_init断点“
相关文章推荐
- TLS线程局部存储
- linux使用dhclient自动获取IP
- linux常用命令
- 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源
- linux下gdb调试器使用学习-03
- Linux内核分析第三周学习总结
- 第三节 构造一个简单的Linux系统MenuOS
- FILE的缓冲模式
- TLPI--->Linux趣事之一
- linux下gdb调试器使用学习-02
- Linux 设备驱动开发 —— Tasklets 机制浅析
- linux文本处理-grep
- centos7关闭防火墙(转)
- 共享库查找顺序
- Linux/UNIX套接字连接
- linux系统下的软件管理(转)
- linux 第三周
- 【翻译自mos文章】Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的
- CentOS6.5 64位下源码安装PostgreSQL9.5.1
- linux的用户、组和权限管理