Linuxカーネルとネットワーク、すなわち、Linuxカーネルに基づいてシステムを構築メニューOSいくつかのコマンドについてのすべての興味深い経験を持つ完全な、その後、C / S通信プログラム上のTCP、端末のメニューOSを完了最後に、内蔵の機能gdbデバッガのLinuxカーネルの下で追跡システムを介して自分の原則を確認してください。
実験目的:
- ローカルのLinuxシステムでのコードのデバッグ環境MenuOSシステムネットワーキングLinuxカーネルの構築が完了しました
- スクリーンショットは、ネットワークが正常に動作しているMenuOSである、MenuOSにHI /ハロー送受信するTCPクライアントとサーバーを完了することができました確認さ
- スクリーンショットは、カーネルコードGDB、例えばstart_kernel、例えばsys_socketcallカーネル関数によって追跡することが確認され
実験環境
カーネルコード:Linuxの5.0.1、
Ubuntuの仮想マシン:オペレーティング環境、この使用VM Ware15.5はUbuntu16.04をインストールし、
QEMU:シミュレータの使用、実行カーネルコード;
GDB:Linuxでのブレークポイントのデバッグツールを;
実験
まず、MenuOSを構築するシステム
1、カーネルディレクトリおよび抽出物にLinuxカーネルをダウンロードしてください:
MKDIR カーネル のwgetます。https:// mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar MV linux- 5.0。1。タール ./ カーネル CDのカーネル タールあるxvのlinux 5.0戻ります。1。tar.gz形式
2、カーネルのコンフィギュレーションを行う前に、まず必要なコンパイルツールをインストールします。
SUDOのapt インストールビルド不可欠フレックスバイソンののlibssl-devのlibelfを-devのをlibncursesライブラリ-devのを
3、カーネルとコンパイルを設定します。
メーク menuconfigを
GDBデバッガのデバッグ情報を生成するために、デバッグ情報をカーネルをコンパイル選択します。
[OK]を、生成の.config情報を保持して、カーネルをコンパイルし始めました。
メイク
コンパイル時間は本当に少し長いので、患者ああ、最終的に成功することです。
4、強力なシミュレータは、QEMUをインストール:
sudoの apt-getをインストール QEMUを
成功したシェルプレス]タブでQEMUを入力した後、あなたはQEMUサポートマシンアーキテクチャを見ることができます:
我々は、使用QEMU-システム-x86_64版に得られない心配を行い、ステップバイステップします。
5、ルートファイルシステムを作成します:
CD〜/カーネル/ MKDIR にrootfs gitのクローンます。https:// github.com/mengning/menu.git CDメニュー のgcc -pthread -oのinit linktable.c menu.c test.cの-m32 - 静的 cd ../rootfs cp ../menu/init ./ find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
现在已经制作好rootfs.img了,如下图:
6、用qemu启动MenuOS系统:
cd .. qemu-system-x86_64 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
出现以下界面:
好了,至此,大功告成,现在已经成功构建调试Linux内核网络代码的环境MenuOS系统,可以再往下走了。
顺便给大家提一点关于qemu常见启动和调试选项的解释:
Linux启动选项
当我们使用这些选项时,我们可以使用一个指定的内核,而没有将它安装在磁盘镜像中。这对于简单的测试各种内核是相当有用的。
- `-kernel bzImage'
- 使用bzImage作为内核映像。
- `-append cmdline'
- 使用cmdline作为内核的命令行。
- `-initrd file'
- 使用file作为初始的ram磁盘。
调试选项
- `-serial dev'
- 重定向虚拟串到主机的设备dev。可用的设备如下:
- vc
- 虚拟终端
- pty
- (Linux)伪TTY(自动分配一个新的TTY)
- null
- 空设备
- /dev/XXX"
- (Linux)使用主机的tty。例如,'/dev/ttyS0'。主机的串口参数通过模拟进行设置。
- /dev/parportN
- (Linux)使用主机的并口N。当前只可以使用SPP的并口特征。
- file:filename
- 将输出写入到文件filename中。没有字符可读。
- stdio
- (Unix)标准输入/输出
- pipe:filename
-
(Unix)有名管道filename
在图形模式下的默认设备为vc,而在非图形模式下为stdio.这个选项 可以被多次使用,最多可以模拟4个串口。
- '-parallel dev'
-
重定向虚拟并口到主机的设备dev(与串口相同的设备)。在Linux主 机上,`/dev/parportN'可以被用来使用与相应的并口相连的硬件设 备。这个选项可以使用多次,最多可以模拟3个并口。
- `-monitor dev'
-
重定向临视器到主机的设备dev(与串口相同的设备)。在图形模式 下的默认设备为vc,而在非图形模式下为stdio。
- '-s'
- 等待gdb连接到端口1234.
- `-p port'
- 改变gdb连接端口。
- `-S'
- 在启动时并不启动CPU(我们必须在监视器中输入'c')
'-d'
- 输出日志到/tmp/qemu.log
- `-hdachs c,h,s,[,t]'
- 强制硬盘0的物理参数(1 <= c <= 16383, 1 <= h <= 16, 1 <= s <=63),并且可以选择强制BIOS的转换模式(t=none, lba or auto).通 常QEMU可以检测这些参数.这个选项对于老的MS-DOS磁盘映像是相当 有用的.
- `-std-vga'
- 模拟一个Bochs VBE扩展的标准VGA显卡(默认情况下为Cirrus Logic GD5446 PCI VGA)
- `-loadvm file'
- 从一个保存状态启动.
- 当然还有很多其他的选项,这里就不写那么多,想知道更多可以直接去查看qemu的所有选项。
二、完成TCP客户端和服务器通信