Linux第三次实验-谢飞帆i

  • 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • Linux内核启动过程
  • 首先打开并冻结实验提供的Linux系统,并开启端口来调试。
  • cd LinuxKernel/
  • qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
  • 然后在另一个shell里打开gdb进行内核的跟踪
  • gdb
  • (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函数开始
  • 查看代码具体位置
  • (gdb)list
  • start_kernel函数创建了一个全局变量init_task,即创建了PCB,其中的0号进程为idle进程
  • 然后start_kernel函数继续进行硬件初始化
  • 然后在start_kernel函数尾部调用rest_init函数
  • 这里的rest_init就是0号进程(idle进程)
  • rest_init函数中执行了kernel_thread(kernel_init,NULL,CLONE_FS)
  • 其中的kernel_init中有run_init_progress,这里initi进程即1号进程被启动
  • 然后rest_init函数中执行了pid=kernel_thread(kthreadd,NULL,CLONE_FS | CLONE_FILES)
  • 这里的kthreadd为所有内核线程的祖先,可称为2号进程
  • 至此系统就完成启动

转载于:https://www.cnblogs.com/20135126xff/p/5269895.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值