ubuntu 14.04(32位)中使用qemu+gdb调试Linux内核

编译运行Linux内核并通过qemu+gdb调试

实验目的

  • 熟悉Linux系统运行环境
  • 制作根文件系统
  • 掌握Linux内核编译方法
  • 学习如何使用gdb调试内核
  • 熟悉Linux下常用的文件操作指令

实验环境

  • OS:Ubuntu 14.04 i386(32位)
  • 待调试的Linux内核版本:Kernel 2.6.26
  • 注意:本次实验必须在Ubuntu系统上实现,可直接在机房完成,或在个人PC上安装虚拟环境完成,请注意需要安装32位的Ubuntu镜像。

实验内容

一、制作根文件系统

1、下载并编译Linux内核
  • 下载linux-2.6.26.tar.gz,解压缩得到目录linux-2.6.26,不妨称之为Linux源代码根目录(以下简称源码根目录)

  • mkdir ~/oslab
    cd ~/oslab
    wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.gz
    tar -zvxf linux-2.6.26.tar.gz
    
  • 进入源代码根目录,并执行编译指令(32位缺省编译)

  • cd ~/oslab/linux-2.6.26
    make i386_defconfig
    make
    
  • make过程中若遇到问题,可参考以下方案解决:

    • # 问题1
      gcc: error: elf_x86_64: No such file or directory
      make[1]: *** [arch/x86/vdso/vdso.so.dbg] Error 1
      make: *** [arch/x86/vdso] Error 2
      
      # 问题1解决方案:
      将linux-2.6.26/arch/x86/vdso目录下的Makefile文件中的 ‘-m elf_x86_64’ 改成 ‘-m64’,’-m elf_i386’ 改成 ‘-m32’
      
      cd ~/oslab/linux-2.6.26
      make   # 进入源代码根目录,再次执行make指令
      
      # 问题2
      undefined reference to `__mutex_lock_slowpath'
      undefined reference to `__mutex_unlock_slowpath'
      # 问题2解决方案
      将linux-2.6.26/kernel目录下的mutex.c文件中的
      # 如下行
      static void noinline __sched
      __mutex_lock_slowpath(atomic_t *lock_count);
      # 改为:
      static __used void noinline __sched __mutex_lock_slowpath(atomic_t *lock_count
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值