mkdir linuxkernel #创建一个项目目录
cd linuxkernel
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载linux-5.0.1的内核。
xz -d linux-5.0.1.tar.xz #解压
tar -xvf linux-5.0.1.tar
cd linux-5.0.1
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev #安装内核编译所需的库
make i386_defconfig #生成32位x86的配置文件
make menuconfig
make
QEMU虚拟机加载内核
cd ~/LinuxKernel/
sudo apt install qemu # 安装qemu命令
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage #qemu
构造MenuOS
#下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录
git clone https://github.com/mengning/menu.git
mkdir rootfs
安装libc6-dev-i386和修改Makefile
安装libc6-dev-i386
sudo apt-get install libc6-dev-i386
修改makefile,
cd menu
vim Makefile
qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img #修改前
qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #修改后
64为的就修改为 qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img
初始化根目录
linux启动后期会在根⽬录中寻找⼀个应⽤程序来运⾏,在根⽬录下提供init是⼀种可选⽅案
#在menu目录下执行一下命令
make rootf
gdb 调试
启动gdb server
1 关闭 之前打开的menuOS系统界面
2 执行 qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
gdb客户端连接gdb server
#打开另一个终端
gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux
break start_kernel
target remote:1234
c
list
构建MenuOS的网络功能
将 TCP 服务端集成到 MenuOS 系统中
cd ~/LinuxKernel
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
make rootfs #改一下Makefile
将 TCP 客户端集成到 MenuOS 系统中
cd ~/linuxkernel
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab3
make rootfs #报错之后,修改Makefile
结果如图:menuOS下面已经多了replyhi,和 hello命令。