Linuxカーネルのネットワークコードのデバッグ環境MenuOSシステムの構築
インストール、Linuxカーネルのコンパイル
ステップ1:ダウンロードは、32をコンパイルするように設定
#如果想编译为64位,请直接从步骤二开始。
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-3.18.6.tar.xz #解压
tar -xvf linux-3.18.6.tar
cd linux-3.18.6 #生成32位x86的配置文件
make i386_defconfig
ステップ2:設定、コンパイルの必要性のデバッグ情報
#步骤二可以在这步做,也可以在后面做,如果不编译为32位的,想要编译为64位的,直接忽略步骤一,从步骤二开始,但是后面需要更改一些qemu命令的格式,要都按照64位来做,后面我大概提一下,但是具体细节我没做,所以有什么坑我也不知道。
make menuconfig
#执行make menuconfig之后,会跳出一个图形化界面,就在图形化界面中完成以下操作,如果没有跳出,或者报错,自行解决界面大小适应问题:安装vmware tool,或者在设置中调整分辨率。
1:选择 Kernel hacking
2:选择 Compile-time checks and compiler options
3:选择 【】Compile the kernel with debug info
4:按Y 前面就多了一个 [*] Compile the kernel with debug info
5:选择 save
6:按 esc,直到退出图形化界面
ステップ3:コンパイル
make
コンパイルが完了するまでには長い待ち時間を開始しました。
ステップ4:カーネルのアップグレード
#可以忽略此步骤!!!!因为这个步骤是老师上课讲的的,但是我做的时候,机子在reboot的时候总是错,所以后面就跳过了。
#欢迎大佬指出问题
uname -a
sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃
sudo make install
sudo update-grub
reboot
uname -a
生産ルートファイルシステム
ステップ1:QEMUの仮想マシンの負荷カーネル
cd ~/LinuxKernel/
sudo apt install qemu # 安装qemu命令
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage #这条命令可以不用执行,因为后面构造menuOS的makefile中是包含了这条命令的
ステップ2:建設MenuOS
下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录
git clone https://github.com/mengning/menu.git
mkdir rootfs
ステップ2.1:実装のlibc6-DEV-i386および修飾のMakefile
道
#修改menu目录下 Makefile的qemu 那条命令
cd menu
sudo apt-get install libc6-dev-i386
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 #修改后
説明:QEMU-システム-i386の-kernel ../linux-5.0.1/arch/x86/boot/bzImage QEMUの仮想マシンは、カーネルのlinux-5.0.1をロードされ、
第二の方法
#如果不想使用qemu-system-i386,仍然想使用qemu命令,就改为如下,然后执行一个软链接
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
私のアプローチは、方法2であります
ルートディレクトリの初期化ステップ2.2
後者は、コンテンツのルートにinitを提供する媒体を実行するとき⼀コンテンツのルートにアプリケーションのいずれかを見てLINUX開始する⼀選択⽅場合であります
#在menu目录下执行一下命令
make rootfs
その結果がこのようにする必要があります
入力して、[に建てられ、現在menuOSシステムを表示するには、コマンドhelpコマンドを実行し、他のコマンドをすることができますが、HH、コマンドが無効で終了します。
GDBのデバッグ
gdbデバッガを実行する前に、menuconfigのは、ステップが実行されていることを確認する、またはデバッグ情報をせずにシステムへのカーネル作ります。
ステップ1:GDBサーバーを起動します
1 关闭 之前打开的menuOS系统界面
2 执行 qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
なぜ、教師は同じではありませんか?EMは、私が唯一teacheマシンに対して、なぜコマンドに月の先生を知らない、とにかく、私は間違って杭でした。
ステップ2のgdb GDBサーバは、クライアントに接続されています
#打开另一个终端
gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux
break start_kernel
target remote:1234
c
list
フィギュア
研究の具体的な詳細、カーネルのブートプロセスを確認するために、いくつかのより多くのブレークポイントを再生して、勉強しています。
Linuxカーネルのネットワークコードのデバッグ環境MenuOSの構築
参考実験棟の先生:https://www.shiyanlou.com/courses/1198
ステップ1:システムMenuOSに統合サーバーのTCPネットワーク通信プログラム
cd ~/LinuxKernel
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
make rootfs #改一下Makefile
ステップ2:クライアントのTCPネットワーク通信プログラムは、システムMenuOSに統合します
cd ~/LinuxKernel
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab3
make rootfs #修改Makefile
結果が示されています。後でもっとreplyhi、およびハローコマンド、外観のディテールを持っているmenuOS下回ります。