리눅스 커널 네트워킹 코드 디버깅 환경 MenuOS 시스템 구축

리눅스 커널 네트워킹 코드 디버깅 환경 MenuOS 시스템 구축

설치, 컴파일 리눅스 커널

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 및 변형 메이크

#修改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 가상 머신은로드 된 커널 리눅스 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 초기화 루트 디렉토리

내용의 루트입니다 ⼀ 선택 ⽅ 경우에 init을 제공하는 매체를 실행할 때 후자는 내용의 루트에있는 응용 프로그램의 ⼀ 하나를 찾고 리눅스 시작합니다

#在menu目录下执行一下命令
make rootfs

결과는 다음과 같이해야

입력 한 다음, 다른 명령이 될 수 내장 현재 menuOS 시스템을 볼 수있는 명령 도움말 명령을 실행하지만, 명령이 무효 인 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 나는 명령에 5 월 교사는 teache 기계, 어쨌든, 내가 잘못 더미 이유를 모르겠어요.

2 단계 gdb를 GDB 서버는 클라이언트에 연결

#打开另一个终端

gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux
break start_kernel
target remote:1234
c
list

그림

몇 가지 더 커널 부팅 과정을 볼 수있는 중단 점, 연구의 구체적인 세부 사항을 재생하고 연구한다.

리눅스 커널 네트워킹 코드 디버깅 환경 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