Kmemleak 커널 옵션 설정
커널 메모리 누수 활성화.
초기 로그 항목 최대값 지정, 값이 너무 낮으면 부팅시 비활성화 됨.
-> Memory Debugging
[*]Enable kernel memory leak detector.
(2000) Maximum kmemleak early log entries
주기적 커널 메모리 누수 감지. 메모리 누출이 감지되면, dmesg에 log를 남긴다.
수동 트리거 설정
$ echo scan >> /sys/kernel/debug/kmemleak
$ cat /sys/kernel/debug/kmemleak
메몰리 누수 검사는 일정한 시간동안 탐지 한므로, 메모리 누수를 바로 확인 할 수 없다.
누수가 감지되지 않으면 log를 남기지 않는다.
누수가 감지되면, 누출이 된 곳에서 여러 차례 수동 검사를 해야함.
자세한 내용
https://www.kernel.org/doc/Documentation/kmemleak.txt
네트워크 설정
ssh 접근해 잡업을 위해 설정
auto eth0
iface eth0 inet dhcp
$ apt-get install openssh-server
$ adduser user
ssh 게스트 접근.
host port -net nic -net user,hostfwd=tcp::5555-:22.
$ qemu-system-x86_64 -kernel bzImage
-append "root=/dev/sda console=ttyS0 single"
-drive file=toto.img,index=0,media=disk,format=raw
--enable-kvm --nographic
-net nic -net user,hostfwd=tcp::5555-:22
호스트 컴퓨터 접근
$ ssh -p 5555 user@localhost
QEMU에서 USB 장치 브리짓
$ lsusb
-usb -usbdevice host:050d:016a. 공급 업체 확인.
GDB 부팅
커널 디버깅, Kernel hacking” 옵션에서 들어간다.
[*] KGDB: kernel debugger --->
<*> KGDB: use kgdb over the serial console
-> Compile-time checks and compiler options
[*] Compile the kernel with debug info
-s 옵션 추가
게스트 사용자 커널 디버깅을 위해 포트 생성.
호스트 TCP 소켓으로 gdb와 연결.
$ qemu-system-x86_64 -kernel arch/x86/boot/bzImage
-hda toto.img
-append "root=/dev/sda" -s
동일한 부팅 같지만, gdb로 커널 디버깅 가능하게 설정한 상태이다.
vmlinux는 비압축 bzImage이며 심볼은 바이너리에 포함된다.
이러한 이유 때문에 gdb를 사용할 수 있데 된다.
$ gdb vmlinux
gdb 시스템 연결.
(gdb) target remote localhost:1234
가상 컴퓨터 중지, gdb 명령을 사용 역 추적 검사.
(gdb) breakpoint spin_lock
(gdb) continue
커널 디버깅 옵션 추가
동적 디버그 사용.
-> printk and dmesg options
[*] Enable dynamic printk() support
유용할 수 있으므로 추가.
-> Tracers (FTRACE [=y])
-s 옵션으로 2대의 시스템을 디버깅 할 때, 프로세스마다 전용 통신포트를 생성해야 함.
동일한 디스크의에서 다른 이미지 두개를 사용해 디버깅시 정의하지 않은 결과가 생성될 수 있으며, 이러한 이유 때문에 이미지가 손살될 수 있다.
이미지를 새로운 이름으로 복사해 작업.
qemu에서 지원하는 copy-to-write 를 사용해 원본 파일 시스템 변경 사항을 별도의 파일로 작성해 관리하므로 해당 문제 해결.
댓글 없음:
댓글 쓰기