文章目录
编译运行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
-