1. Linux内核源码下载
本实验采用linux-5.0.1源码,下载网址为 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
下载完成后放入用户文件夹中,一般为home/用户名,
这里我创建了新的工作文件夹,将其解压在该文件夹中,
mkdir LinuxKernel
cd LinuxKernel
xz -d linux-5.0.1.tar.xz tar -xvf linux-5.0.1.tar
cd linux-5.0.1
2.安装内核编译工具
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
可能会出现如下情况:
这里只需
sudo apt-get update
进行软件源更新即可,继续执行:
配置编译内核:
make menuconfig
接下来需要进行简单的配置,依次选择
Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info
Save后一直Exit到命令行界面即可,之后进行编译:
make #时间较长 可选择make -j* (*为线程数)命令加快编译速度
可以选择升级当前系统内核,注意该升级过程可能会导致系统崩溃,如果要升级记得提前系统备份。
sudo make modules_install sudo make install sudo update-grub reboot uname -a
3. 构建MenuOS
QEMU虚拟机加载内核:
cd ~/LinuxKernel
sudo apt install qemu
构造MenuOS系统:
git clone https://github.com/mengning/menu.git
mkdir rootfs
cd menu
sudo apt-get install libc6-dev-i386
这里需要编辑一下menu目录下Makefile文件夹内容,
然后在~/LinnuxKernel/menu路径下执行
make rootfs
成功后可以看到如下界面:
4. MenuOS完成TCP客户端和服务器端发送和接受hello/hi
1)把程序集成到MenuOS:
cd ~/LinuxKernel
git clone https://github.com/mengning/linuxnet.git
服务器端:
cd linuxnet/lab2
make
cd ../../menu
make rootfs
客户端同上,集成lab3即可,这里需要修改一下lab3下Makefile的内容,修改内容同上:
2)测试:
在MenuOS中输入以下命令:
replyhi
hello
结果如图:
5. 构造gdb调试环境
关闭qemu虚拟机,修改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会出现黑屏,等待gdb连接
接下来建立gdb与gdbserver之间的连接:
打开一个新的命令窗口,执行gdb命令,进入调试:
file ~/LinuxKernel/linux-5.0.1/vmlinux break start_kernel target remote:1234 c list
可以看到断点处的代码,如下: