Linuxカーネルのネットワークコードのデバッグ環境MenuOSシステムの構築

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下回ります。

おすすめ

転載: www.cnblogs.com/Alexkk/p/11997737.html