1.下载、编译linux-5.0.1内核

下载内核

mkdir experiment #为实验创建一个工作区
cd experiment
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #不知为何我在Ubuntu上下载的特别慢,需要挂vpn 
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar #解包解压缩
cd linux-5.0.1

下载编译工具

sudo apt-get install build-essential #感觉一步一步装好一些...
sudo apt-get install flex
sudo apt-get install libncurses-dev
sudo apt-get install libelf-dev
sudo apt-get install bison
sudo apt-get install libssl-dev

配置编译信息

make i386_defconfig  #获取32位x86的配置文件,也可以使用其他的配置信息
make menuconfig

在执行完make menuconfig后会弹出一个图形化界面,让你选择选项来配置具体的编译信息

  1. 选择Kernel hacking ,它可以让你接下来配置调试选项
  2. 选择Compile-time checks and compiler options
  3. 选择Compile the kernel with debug info,使内核映像包含调试信息
  4. 选择save和ok
  5. esc退出图形化界面

配置结束后就可以开始编译内核了

make #编译内核

2.QEMU加载内核

下载QEMU和MenuOS

cd .. #回到~/experiment/
sudo apt install qemu  # 安装qemu
git clone https://github.com/mengning/menu.git #下载MenuOS
mkdir rootfs #为MenuOS创建根目录

下载32位系统需要的库

sudo apt-get install libc6-dev-i386

初始化根目录

cd menu
#初始化根目录前,需要修改老师给的Makefile文件,因为老师使用的内核版本不一样

make
rootfs

成功启动MenuOS,可以查看到MenuOS支持的命令

 

3.验证MenuOS的网络功能是否正常

下载老师给的测试程序

cd ~/experiment/
git clone https://github.com/mengning/linuxnet.git #下载测试程序
cd linuxnet/lab2
make
cd ../../menu/
make rootfs 
cd ~/experiment/
cd linuxnet/lab3 #在此处修改Makefile文件,理由同上
make rootfs #另起一个终端

现在输入replyhi,输入hello,可以收到hi

 

4.验证MenuOS能否进行gdb调试

cd ~/experiment/menu #在此处修改Makefile,在qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img末尾加上-append nokaslr -s -S
make rootfs

可以观察到QEMU启动MenuOS的过程中停止了

另起一个终端,打开gdb

gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux
target remote:1234
break start_kernel #设置断点在start_kernel函数
c #继续运行
list #查看上下文

可以看到gdb可以追踪到start_kernel函数

12-26 06:27
查看更多