一、安装linux-5.0.1
1. 在home下创建menuOS目录,并下载 linux-5.0.1内核
2. 解压内核
xz -d linux-5.0.1.tar.xz tar -xvf linux-5.0.1.tar
3. 安装内核编译工具
sudo apt install build-essential sudo apt install flex sudo apt install bison sudo apt install libssl-dev sudo apt install libelf-dev sudo apt install libncurses-dev
4. 配置并编译内核
生成64位x86配置文件,然后配置编译内核,在出现的界面中依次选择 Kernel hacking,Compile-time checks and compiler options,[ ]Compile the kernel with debug info ,按Y,出现[*]Compile the kernel with debug info,然后依次 Save,最后 Exit。然后在执行make命令。完成后可使用虚拟机快照功能保存当前状态。
make x86_64_defconfig make menuconfig
sudo make
5. 在menuOS目录中下载并安装QEMU虚拟机,并用它来加载内核
sudo apt install qemu #下载QEMU qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage sudo apt install git #下载git mkdir roofs sudo git clone https://github.com/mengning/menu.git cd menu sudo apt-get install libc6-dev-i386 #安装
编辑menu目录下Makefile文件的内容(可用sudo chmod 777 改变读写权限),如下图所示:
在 menu 目录下 执行 make rootfs
二、在menuos中实现 Hello Hi 的网络程序
注意:先修改 lab3 文件夹下的makefile文件 如 上上图所示。
cd .. sudo git clone https://github.com/mengning/linuxnet.git cd ./linuxnet/lab2 sudo make cd ../../menu/ sudo make rootfs
在menuos中执行replyhi 和 hello 即可实现简单网络通信。
三、实现gdb调试
qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage -hda rootfs.img -append "root=/dev/sda init=/init nokaslr" -s -S #可以看到在新打开的qemu虚拟机上,整个是一个黑屏,此时qemu在等待gdb的连接 #-S freeze CPU at startup (use ’c’ to start execution) #-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项 #nokaslr KASLR是kernel address space layout randomization的缩写
在linux-5.0.1目录下新打开一个终端,执行以下命令,即可进行gdb调试:
gdb file vmlinux #加载vmlinux中的符号表 target remote:1234 #建立gdb和gdbserver之间的连接 b start_kernel #在start_kernel处设置断点