标签:lex hello 代码 menu root init 成功 with 通过
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 menuconfig之后会进入一个图形化界面,可能会遇到分辨率问题,可以通过调大虚拟机窗口大小,并安装VMWare Tools来解决。
进入图形化界面之后配置编译环境,依次选择:Kernel hacking => Compile-time checks and compiler options => 在Compile the kernel with debug info项选择Y,之后退出该图形化界面,即可进行编译。
make #时间会很久
根据情况大概等待十多分钟即可编译完成。
cd LinuxKernel sudo apt install qemu # 安装qemu命令 git clone https://github.com/mengning/menu.git #下载menu系统
mkdir rootfs #创建一个根目录,当做menuos的根目录
cd menu
sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立一个软链接 之后可以直接执行
qemu vim Makefile #修改一下Makefile文件
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #创建的根文件系统
make rootfs #初始化根目录
第一步首先打开gdb server。
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
打开之后是一个等待连接的状态
之后建立与geb server之间的连接。
gdb file ~/LinuxKernel/linux-5.0.1/vmlinux # # 在gdb界面中targe remote之前加载符号表 break start_kernel # 断点的设置可以在target remote之前,也可以在之后 target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行 c #按c 让qemu上的Linux继续运行 list #输入list指令可以查看断点处的代码。
之后即可看到gdb server已经连接成功
并且可以看到我们设置的断点处的代码:
cd ~/LinuxKernel git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/ vim Makefile #修改Makefile文件 make rootfs #将tcp服务端集成到menuos环境中 cd ~/LinuxKernel cd linuxnet/lab3 vim Makefile #修改Makefile文件 make rootfs #将tcp客户端集成到menuos环境中
之后我们可以看到集成了新功能的menuos,通过help可以看到当前有哪些功能可用,我们可以看到新增了replyhi和hello两个命令,当我们输入replyhi之后即与客户端进行了连接,当我们输入hello之后可以发现此时可以在服务端和客户端进行hello/hi的信息传递。
标签:lex hello 代码 menu root init 成功 with 通过
原文地址:https://www.cnblogs.com/zhang512/p/12019267.html