1.下载Linux内核源代码
https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz 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
3.配置编译内核
make defconfig #按照默认值生成.config make 或 make -j* # *为cpu核心数
4. 升级当前系统内核
sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃 sudo make install sudo update-grub
5. 通过QEMU虚拟机加载内核
sudo apt install qemu qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage # make i386_defconfig
6. 构造MenuOS
git clone https://github.com/mengning/menu.git cd menu sudo apt-get install libc6-dev-i386 # 在64位环境下编译32位需安装 make rootfs cd .. qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img # make i386_defconfig
7.调试 在qemu中启动gdb serverqemu-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和-S选项的说明 -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的缩写
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2 make cd ../../menu/ make rootfs
cd ~/LinuxKernel cd linuxnet/lab3 make rootfs