kernel debug(内核调试)

逃离我推掉我的手 2022-05-22 08:23 356阅读 0赞

1.yum -y install ncurses-devel.x86_64 elfutils-libelf-devel.x86_64 elfutils-libelf-devel.x86_64

2.download kernel and busybox

  1. kernel compress:

    1. make ARCH=x86_64 CROSS_COMPILE=x86_64-none-linux- defconfig
    2. make ARCH=x86_64 CROSS_COMPILE=x86_64-none-linux- menuconfig
    3. make ARCH=x86_64 CROSS_COMPILE=x86_64-none-linux- -j8

4.Generate minimal initramfs

  1. #!/usr/bin/bash
  2. ROOTFS=rootfs
  3. BUSYBOX=$(find busybox* -maxdepth 0 -type d)
  4. SYSROOT=$(x86_64-linux-gnu-gcc --print-sysroot)
  5. GLIBC_VERSION=$(${SYSROOT}/usr/bin/ldd --version | head -1 | cut -d' ' -f4)
  6. DYNAMIC_LIB_PATH_32=${SYSROOT}/lib
  7. DYNAMIC_LIB_PATH_64=${SYSROOT}/lib64
  8. rm -rf $ROOTFS
  9. mkdir -p ${ROOTFS}/{proc,sys,dev,etc,etc/init.d,lib,lib64,mnt,tmp,go}
  10. cat > $ROOTFS/etc/init.d/rcS <<EOF
  11. #!/bin/sh
  12. mount -t proc none /proc
  13. mount -t sysfs none /sys
  14. /sbin/mdev -s
  15. ifconfig lo up
  16. EOF
  17. chmod +x $ROOTFS/etc/init.d/rcS
  18. cat > $ROOTFS/etc/inittab <<EOF
  19. # /etc/inittab
  20. ::sysinit:/etc/init.d/rcS
  21. ::askfirst:-/bin/sh
  22. ::ctrlaltdel:/sbin/reboot
  23. ::shutdown:/bin/umount -a -r
  24. EOF
  25. chmod +x $ROOTFS/etc/inittab
  26. cp -rP ${BUSYBOX}/_install/* ${ROOTFS}
  27. cp -rP ${DYNAMIC_LIB_PATH_64}/libc-${GLIBC_VERSION}.so ${ROOTFS}/lib64/
  28. cp -rP ${DYNAMIC_LIB_PATH_64}/libc.so.6 ${ROOTFS}/lib64/
  29. cp -rP ${DYNAMIC_LIB_PATH_64}/libm-${GLIBC_VERSION}.so ${ROOTFS}/lib64/
  30. cp -rP ${DYNAMIC_LIB_PATH_64}/libm.so.6 ${ROOTFS}/lib64/
  31. cp -rP ${DYNAMIC_LIB_PATH_64}/librt-${GLIBC_VERSION}.so ${ROOTFS}/lib64/
  32. cp -rP ${DYNAMIC_LIB_PATH_64}/librt.so.1 ${ROOTFS}/lib64/
  33. cp -rP ${DYNAMIC_LIB_PATH_64}/libpthread-${GLIBC_VERSION}.so ${ROOTFS}/lib64/
  34. cp -rP ${DYNAMIC_LIB_PATH_64}/libpthread.so.0 ${ROOTFS}/lib64/
  35. cp -rP ${DYNAMIC_LIB_PATH_64}/ld-${GLIBC_VERSION}.so ${ROOTFS}/lib64/
  36. cp -rP ${DYNAMIC_LIB_PATH_64}/ld-linux-x86-64.so.2 ${ROOTFS}/lib64/
  37. cd ${ROOTFS}
  38. ln -sf bin/busybox init
  39. find . | cpio -o --format=newc > ../initramfs
  40. $ cd ~/workspace
  41. $ gdb
  42. (gdb) file linux-3.10.107/vmlinux
  43. Reading symbols from /home/yeyuzhen/workspace/linux-3.10.107/vmlinux...done.
  44. (gdb) target remote:4321
  45. Remote debugging using :4321 kgdb_breakpoint () at kernel/debug/debug_core.c:1014 1014 wmb(); /* Sync point after breakpoint */
  46. (gdb) b sys_sendto Breakpoint 1 at 0xffffffff815b44d0: file net/socket.c, line 1754.
  47. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0xffffffff815b44d0 in SyS_sendto at net/socket.c:1754 (gdb) c Continuing.

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Lua 调试(Debug)

    Lua 提供了 debug 库用于提供创建我们自定义调速器的功能。Lua 本身并未有内置的调速器,但很多开发者共享了他们的 Lua 调速器代码。 Lua 中 debug

    相关 debug调试技巧

    还在断点调试?教你四种调试技巧让你快速定位错误! 原创   2017-01-07   令狐冲   [九章算法][Link 1] 在九章做老师的这段时间,许多同学经常把一

    相关 Debug调试

    Debug调试 1.调试是查找、解决软件中逻辑错误代码(称为bug:软件臭虫)的重要手段,是软件开发中必不可少的环节。 2.调试也是学习、研究其他人编写的代码的一