一、下载内核源码,并配置编译
下载linux内核,解压至net_ws目录下
内核官网:https://www.kernel.org/
安装编译Linux内核所需的依赖:
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
下载并解压内核
mkdir net_ws
cd net_ws
tar xvJf linux-5.4.2.tar.xz #解压内核文件
cd linux-5.4.2/ #进入linux-5.0.1目录
make i386_defconfig
make menuconfig
出现一个配置界面,按下面操作步骤进行:(使用上下左右按键进行选择和切换)
Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info 按空格键勾选/取消该选项。
最后,执行make操作,内核编译完成
make
二、下载qemu,编译运行menuOS
首先安装qemu
sudo apt install qemu #如果提示未找到请先执行sudo apt update
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立链接,相当去windows下的快捷方式
cd net_ws
git clone https://github.com/mengning/menu.git
sudo apt install libc6-dev-i386 #为了支持在64位系统中编译32位程序
mkdir rootfs
cd menu
vim Makefile
修改Makefile中的内容,改为
qemu -kernel /home/netlinux/net_ws/linux-5.4.2/arch/x86/boot/bzImage -initrd ../rootfs.img
make rootfs #初始化根目录
三、gdb调试内核
关闭所有终端和刚才的启动界面,进行下面的操作:
通过下面的命令在qemu中启动gdb server:
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
打开另一个终端进入工作目录menuLab并执行下面的命令:
gdb
file net_ws/linux-5.4.2/vmlinux
break start_kernel
target remote:1234
c
list
可以看到下面的输出信息:
可以看到,程序启动到start_kernel()处暂定执行了
四、menuOS之网络通信
下载测试通信代码:
cd net_ws
git clone https://github.com/mengning/linuxnet.git
修改lab3下的Makefile的qemu为自己电脑的绝对路径
qemu -kernel /home/netlinux/net_ws/linux-5.4.2/arch/x86/boot/bzImage -initrd ../rootfs.img
然后进入menu目录执行如下代码:
make rootfs