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后会弹出一个图形化界面,让你选择选项来配置具体的编译信息
- 选择Kernel hacking ,它可以让你接下来配置调试选项
- 选择Compile-time checks and compiler options
- 选择Compile the kernel with debug info,使内核映像包含调试信息
- 选择save和ok
- 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
函数