SlideShare a Scribd company logo
1 of 27
Linux Kernel Debugging



 Dongdong Deng <LibFetion@gmail.com>




                              KGDB.info
Overview of Talks
• Kernel Problems

• Collect System Info

• Handling Failures

• Debugging Techniques

• Crash Analyse

• Debugging Process

• Debugging Tricks




                                          KGDB.info
Kernel Problems

• Root cause of problems
      –   self problem (Logic Implementation)
      –   cooperating problem (incorrect API/Function usage)
      –   platform problem (hardware)



• Phenomenon
      –   system behave incorrectly
      –   oops/panic
      –   system hang




                                                               KGDB.info
Collect System Info

• System error logs
      –     dmesg       #dmesg | tail
      –     /var/log/   #ls /var/log/




• Console
      –     local console
      –     remote console



• Others
      –     log by programer



                                              KGDB.info
Handling Failures


• System behave incorrectly
      –    compare with normal behavior
      –    analyze and fix


• System Crash
      –    collect and analyze oops/painc data
      –    collect and analyze dump data


• System Hang
      –    look at the hang using ICE/JTAG
      –    trigger magic sysreq keys
      –    look at the hang using kgdb/kdb(If possible)
      –    hacking codes to use NMI features (if support)

                                                            KGDB.info
Debugging Techniques
• Basic
         –   Printk()

• Best
         –   JTAG, ICE,

• Better
         –   Virtual Machine backend debugger
         –   Kdump/Kexec


• Good
         –   KGDB / KDB

• Others
         –   Kprobe
         –   Perf
         –   Ftrace.. so on..
                                                KGDB.info
printk()
• Works like printf()
   – printk(KERN_DEBUG ”Get printk: %s:%in”, __FILE__, __LINE__);
   – printk(KERN_CRIT "OOO at %pn", pointer);

• Output with priorities
   – KERN_ERR, KERN_WARNING, KERN_INFO, so on…
   – pr_err().pr_warning(),pr_info()…

   #define pr_err(fmt, …) 
   printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS_)


• Increase Log buffer
   – CONFIG_LOG_BUF_SHIFT

• Modify the console printk level
   – #echo 8 > /proc/sys/kernel/printk or #dmesg -n 8
   – integers range from 0 to 7, with smaller values representing higher priorities.

                                                                           KGDB.info
How printk() work
printk() can be called from any context.   Why?
void printk() {
spin_lock(&logbuf_lock);

emit_log_char() --> add data to logbuf

if (!down_trylock(&console_sem)) {
    spin_unlock(&logbuf_lock);
    return;
}
                                     console --> output device
                                     logbuf --> a store buffer for printk data
spin_unlock(&logbuf_lock);
                                     logbuf_lock -> an spinlock for operating logbuf
                                     console_sem -> an semaphore for operating
release_console_sem();                                 console device
}



                                                                      KGDB.info
How printk() work

void release_console_sem() {

for (; ;) {
spin_lock(&logbuf_lock);
if (logbuf_start == logbuf_end)
       break;

out_start = logbuf_start; out_end = logbuf_end;
spin_unlock(&logbuf_lock);

call_console_device (out_start, out_end);
}

up(&console_sem);
spin_unlock (&logbuf_lock);
}


                                                  KGDB.info
How printk() work

printk() {

spin_lock(&logbuf_lock);
emit_log_char(logbuf);
spin_unlock(&logbuf_lock);

down (&console_sem));

spin_lock(&logbuf_lock);
call_console_device (logbuf); à write output device…
spin_unlock(&logbuf_lock);

up(&console_sem);
}



                                                        KGDB.info
printk()
• advantages
   – easy using
   – not need any other system support


• disadvantages
   –   have to modify/rebuild source
   –   cann't debug online Interactively
   –   affect time / behavior
   –   working linear



• Do we need a debugger?




                                            KGDB.info
Debugger
• How debugger works

• Interrupt
   – hardware interrupt
   – exception ---->debug exception
   – software interrupt

• Key components of debugger
   – take over the debug exception
   – pick and poke system info (registers, memory)
   – communicable ----> could receive and deliver data with others




                                                                     KGDB.info
KGDB




       KGDB.info
KGDB using

• KGDB was merged to kernel since 2.6.28

• KGDB Config make menuconfig
     –   CONFIG_KGDB
     –   CONFIG_KGDB_SERIAL_CONSOLE
     –   CONFIG_DEBUG_INFO
     –   CONFIG_FRAME_POINTER
     –   CONFIG_MAGIC_SYSRQ

     –   CONFIG_DEBUG_RODATA = n



                                           KGDB.info
KGDB using

• Kgdboc
        –    build in kernel
        echo "ttyS0,115200" >/sys/module/kgdboc/parameters/kgdboc
        –    module
        Insmod kgdboc.ko kgdboc="ttyS0,115200"
• Gdb
       –     gdb /usr/src/work/vmlinux
       –     (gdb) set remotebaud 115200
       –     (gdb) target remote /dev/ttyS0
       Remote debugging using /dev/ttyS0
       kgdb_breakpoint () at kernel/debug/debug_core.c:983
       983 wmb(); /* Sync point after breakpoint */
       (gdb)
• Trap to kgdb by magic key ----> echo "g" >/proc/sysrq-trigger

                                                                  KGDB.info
KGDB using

• Gdb
    –   (gdb) b address/functions
    –   (gdb) s / si / n / c
    –   (gdb) bt
    –   (gdb) info register/break/threads
    –   (gdb) watch/rwatch (currently only x86 support)
    –   (gdb) m addr
    –   (gdb) set val=abc
    –   (gdb) l* function+0x16




                                                          KGDB.info
KGDB arch




            KGDB.info
Unoptimized debugging
• un-optimize single file
     CFLAGS_filename.o += -O0


• un-optimize entire directory of files
     EXTRA_CFLAGS += -O0

• un-optimize kernel module
       –    make -C build linux.modules COPTIMIZE=-O0 M=path_to_source

• DO NOT UN_OPTIMEZ the whole kernel
       –     some codes were hacked as compiler specific.




                                                            KGDB.info
Got a timing problem? Use variables

• Use a conditional variable to control a printk()
      –    If (dbg_con) { printk(“state info ...”); }

• Use a conditional to execute a variable++
      –    If (dbg_con) { var++; }

• Use a conditional to execute a function
      –    If (dbg_con) { xxx_function(); }

• Debugger set conditional counter
      –   (gdb) set dbg_con=1



                                                        KGDB.info
Questions of Debugger

• How kernel debugger works on multi-cpus (SMP)
   – Before enter debugger core route ---
     hold on the others slave cpu through IPI

   – Before quit debugger route ---
    release the slave cpus
     (tips: run flag à atomic variable, spinlock, row_spinlock)


• How kernel debugger works on multi-processes
   – Have problems?
   single step on specified process,
   schedule

• Other debugger questions?



                                                                   KGDB.info
Crash Analyse

• Where are the crash coming
   – BUG
   – Oops
   – Panic


• Other info
   – Linux/Documentation/oops-tracing.txt




                                            KGDB.info
Crash Analyse
BUG: unable to handle kernel NULL pointer dereference at (null)
  IP: [<c01683c7>] proc_dowatchdog+0x7/0xd0
  *pde = 00000000
  Oops: 0002 [#2] PREEMPT
  Modules linked in:
  Pid: 1126, comm: sh Tainted: G    D 3.0.0-rc2-dirty #4 Bochs Bochs
  EIP: 0060:[<c01683c7>] EFLAGS: 00000286 CPU: 0 à Register Info
  EIP is at proc_dowatchdog+0x7/0xd0
  EAX: c069fcc4 EBX: 00000001 ECX: b7838000 EDX: 00000001
  ESI: c069fcc4 EDI: 00000004 EBP: b7838000 ESP: d7623f30
   DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
  Process sh (pid: 1126, ti=d7622000 task=d749f4a0 task.ti=d7622000)
  Stack:
   d749f4a0 c069f6c0 c069f6c0 c069fcc4 c0202c77 d7623f50 d7623f9c 00000000
   00000004 d7623f9c 00000004 b7838000 c0202cb0 c0202cc8 d7623f9c 00000001
   d7428e00 c01b4d50 d7623f9c 00000002 00000001 d7428e00 fffffff7 081d1300
  Call Trace:
   [<c0202c77>] ? proc_sys_call_handler+0x77/0xb0
   [<c0202cb0>] ? proc_sys_call_handler+0xb0/0xb0
   [<c0202cc8>] ? proc_sys_write+0x18/0x20
   [<c01b4d50>] ? vfs_write+0xa0/0x140
   [<c01b4ec1>] ? sys_write+0x41/0x80
   [<c0539d10>] ? sysenter_do_call+0x12/0x26
  Code: 75 0f c7 03 01 00 00 00 e8 57 69 fd ff 85 c0 74 db a1 48 c0 69
  c0 c7 00 00 00 00 00 31 c0 83 c4 04 5b c3 90 56 53 89 d3 83 ec 08 <c7>
  05 00 00 00 00 05 00 00 00 8b 54 24 18 89 54 24 04 8b 54 24
  EIP: [<c01683c7>] proc_dowatchdog+0x7/0xd0 SS:ESP 0068:d7623f30
  CR2: 0000000000000000
  ---[ end trace 8b37721a29dead5b ]--

                                                                             KGDB.info
Crash Analyse

(gdb) l* proc_dowatchdog+0x7
0xc01683c7 is in proc_dowatchdog (kernel/watchdog.c:522).
517                void __user *buffer, size_t *lenp, loff_t *ppos)
518 {
519      int ret;
520
521      int* xx = NULL;
522      *xx = 5;
523
524      ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
525      if (ret || !write)
526            goto out;
(gdb)




                                                                         KGDB.info
Debugging process
• Reproduce problem
      –   find/read all related documents of problem
      –   version back up/go forward
      –   reduce dependence


• Analyse problem
      –   do more experiments, no guess !!!

• Fix problem
      –   got real root cause?
      –   patch --- simple, clear
      –   enjoy and play kernel!




                                                       KGDB.info
Debugging tricks
Kernel Hacking config
• Get debugging information in case of kernel bugs
          –     CONFIG_FRAME_POINTER

•   Lockup (soft/hard) detector
          –     CONFIG_LOCKUP_DETECTOR

•   SpinLock detector
          –     CONFIG_DEBUG_SPINLOCK

•   RCU cpu stall detector
          –     CONFIG_RCU_CPU_STALL_DETECTOR

•   softlockup / time interrupt
          –     check hang system
          –     soft watchdog
          –     softlockup.c : softlockup_tick()

•   NMI
          –     check hang system
          –     hardware watchdog: nmi_watchdog=1

                                                     KGDB.info
Print Functions


• Some useful Print function for development
     –    BUG_ON()
     –    WARN_ON
     –    show_backtrace()
     –    panic()
     –    die()
     –    show_registers()
     –    print_symbol(pointer)
     –    get function caller:
     return_address() à gcc __builtin_return_address(0)




                                                       KGDB.info
Thanks

 Feedback to:     libfetion@gmail.com
 Or visiting:   http://www.kgdb.info




                                   KGDB.info

More Related Content

What's hot

Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisBuland Singh
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtKernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtAnne Nicolas
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelAdrian Huang
 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/CoreShay Cohen
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDKKernel TLV
 
Linux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisLinux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisPaul V. Novarese
 
Linux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewLinux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewRajKumar Rampelli
 
Linux Kernel Crashdump
Linux Kernel CrashdumpLinux Kernel Crashdump
Linux Kernel CrashdumpMarian Marinov
 
Introduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsIntroduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsQUONTRASOLUTIONS
 
linux device driver
linux device driverlinux device driver
linux device driverRahul Batra
 

What's hot (20)

Network Drivers
Network DriversNetwork Drivers
Network Drivers
 
A practical guide to buildroot
A practical guide to buildrootA practical guide to buildroot
A practical guide to buildroot
 
Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_Analysis
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtKernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
 
Linux kernel
Linux kernelLinux kernel
Linux kernel
 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/Core
 
Introduction to DPDK
Introduction to DPDKIntroduction to DPDK
Introduction to DPDK
 
Linux Crash Dump Capture and Analysis
Linux Crash Dump Capture and AnalysisLinux Crash Dump Capture and Analysis
Linux Crash Dump Capture and Analysis
 
Linux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewLinux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver Overview
 
Linux Internals - Part I
Linux Internals - Part ILinux Internals - Part I
Linux Internals - Part I
 
Linux Kernel Crashdump
Linux Kernel CrashdumpLinux Kernel Crashdump
Linux Kernel Crashdump
 
Introduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsIntroduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra Solutions
 
linux device driver
linux device driverlinux device driver
linux device driver
 
Ixgbe internals
Ixgbe internalsIxgbe internals
Ixgbe internals
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 

Similar to Linux Kernel Debugging Techniques

ELC-E Linux Awareness
ELC-E Linux AwarenessELC-E Linux Awareness
ELC-E Linux AwarenessPeter Griffin
 
SMP implementation for OpenBSD/sgi
SMP implementation for OpenBSD/sgiSMP implementation for OpenBSD/sgi
SMP implementation for OpenBSD/sgiTakuya ASADA
 
Lecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentLecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentMohammed Farrag
 
LAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLinaro
 
LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness Peter Griffin
 
Solaris Kernel Debugging V1.0
Solaris Kernel Debugging V1.0Solaris Kernel Debugging V1.0
Solaris Kernel Debugging V1.0Jarod Wang
 
Kernel debug log and console on openSUSE
Kernel debug log and console on openSUSEKernel debug log and console on openSUSE
Kernel debug log and console on openSUSESUSE Labs Taipei
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudAndrea Righi
 
Introduction to cuda geek camp singapore 2011
Introduction to cuda   geek camp singapore 2011Introduction to cuda   geek camp singapore 2011
Introduction to cuda geek camp singapore 2011Raymond Tay
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Jian-Hong Pan
 
Java gpu computing
Java gpu computingJava gpu computing
Java gpu computingArjan Lamers
 
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Mydbops
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debuggingHao-Ran Liu
 
OSインストーラーの自作方法
OSインストーラーの自作方法OSインストーラーの自作方法
OSインストーラーの自作方法LINE Corporation
 
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1Yukio Saito
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDARaymond Tay
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and InsightsGlobalLogic Ukraine
 

Similar to Linux Kernel Debugging Techniques (20)

ELC-E Linux Awareness
ELC-E Linux AwarenessELC-E Linux Awareness
ELC-E Linux Awareness
 
Programar para GPUs
Programar para GPUsProgramar para GPUs
Programar para GPUs
 
SMP implementation for OpenBSD/sgi
SMP implementation for OpenBSD/sgiSMP implementation for OpenBSD/sgi
SMP implementation for OpenBSD/sgi
 
Lecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentLecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports Development
 
LAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel AwarenessLAS16-403: GDB Linux Kernel Awareness
LAS16-403: GDB Linux Kernel Awareness
 
LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness LAS16-403 - GDB Linux Kernel Awareness
LAS16-403 - GDB Linux Kernel Awareness
 
Solaris Kernel Debugging V1.0
Solaris Kernel Debugging V1.0Solaris Kernel Debugging V1.0
Solaris Kernel Debugging V1.0
 
Kernel debug log and console on openSUSE
Kernel debug log and console on openSUSEKernel debug log and console on openSUSE
Kernel debug log and console on openSUSE
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud
 
Introduction to cuda geek camp singapore 2011
Introduction to cuda   geek camp singapore 2011Introduction to cuda   geek camp singapore 2011
Introduction to cuda geek camp singapore 2011
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021
 
Java gpu computing
Java gpu computingJava gpu computing
Java gpu computing
 
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
Analyze corefile and backtraces with GDB for Mysql/MariaDB on Linux - Nilanda...
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
 
OSインストーラーの自作方法
OSインストーラーの自作方法OSインストーラーの自作方法
OSインストーラーの自作方法
 
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1
Nvidia® cuda™ 5.0 Sample Evaluation Result Part 1
 
Introduction to CUDA
Introduction to CUDAIntroduction to CUDA
Introduction to CUDA
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and Insights
 
Debug generic process
Debug generic processDebug generic process
Debug generic process
 

Recently uploaded

Food processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsFood processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsManeerUddin
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfVanessa Camilleri
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4MiaBumagat1
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfJemuel Francisco
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationRosabel UA
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxleah joy valeriano
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 

Recently uploaded (20)

LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptxLEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
 
Food processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsFood processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture hons
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
ICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdfICS2208 Lecture6 Notes for SL spaces.pdf
ICS2208 Lecture6 Notes for SL spaces.pdf
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translation
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 

Linux Kernel Debugging Techniques

  • 1. Linux Kernel Debugging Dongdong Deng <LibFetion@gmail.com> KGDB.info
  • 2. Overview of Talks • Kernel Problems • Collect System Info • Handling Failures • Debugging Techniques • Crash Analyse • Debugging Process • Debugging Tricks KGDB.info
  • 3. Kernel Problems • Root cause of problems – self problem (Logic Implementation) – cooperating problem (incorrect API/Function usage) – platform problem (hardware) • Phenomenon – system behave incorrectly – oops/panic – system hang KGDB.info
  • 4. Collect System Info • System error logs – dmesg #dmesg | tail – /var/log/ #ls /var/log/ • Console – local console – remote console • Others – log by programer KGDB.info
  • 5. Handling Failures • System behave incorrectly – compare with normal behavior – analyze and fix • System Crash – collect and analyze oops/painc data – collect and analyze dump data • System Hang – look at the hang using ICE/JTAG – trigger magic sysreq keys – look at the hang using kgdb/kdb(If possible) – hacking codes to use NMI features (if support) KGDB.info
  • 6. Debugging Techniques • Basic – Printk() • Best – JTAG, ICE, • Better – Virtual Machine backend debugger – Kdump/Kexec • Good – KGDB / KDB • Others – Kprobe – Perf – Ftrace.. so on.. KGDB.info
  • 7. printk() • Works like printf() – printk(KERN_DEBUG ”Get printk: %s:%in”, __FILE__, __LINE__); – printk(KERN_CRIT "OOO at %pn", pointer); • Output with priorities – KERN_ERR, KERN_WARNING, KERN_INFO, so on… – pr_err().pr_warning(),pr_info()… #define pr_err(fmt, …) printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS_) • Increase Log buffer – CONFIG_LOG_BUF_SHIFT • Modify the console printk level – #echo 8 > /proc/sys/kernel/printk or #dmesg -n 8 – integers range from 0 to 7, with smaller values representing higher priorities. KGDB.info
  • 8. How printk() work printk() can be called from any context. Why? void printk() { spin_lock(&logbuf_lock); emit_log_char() --> add data to logbuf if (!down_trylock(&console_sem)) { spin_unlock(&logbuf_lock); return; } console --> output device logbuf --> a store buffer for printk data spin_unlock(&logbuf_lock); logbuf_lock -> an spinlock for operating logbuf console_sem -> an semaphore for operating release_console_sem(); console device } KGDB.info
  • 9. How printk() work void release_console_sem() { for (; ;) { spin_lock(&logbuf_lock); if (logbuf_start == logbuf_end) break; out_start = logbuf_start; out_end = logbuf_end; spin_unlock(&logbuf_lock); call_console_device (out_start, out_end); } up(&console_sem); spin_unlock (&logbuf_lock); } KGDB.info
  • 10. How printk() work printk() { spin_lock(&logbuf_lock); emit_log_char(logbuf); spin_unlock(&logbuf_lock); down (&console_sem)); spin_lock(&logbuf_lock); call_console_device (logbuf); à write output device… spin_unlock(&logbuf_lock); up(&console_sem); } KGDB.info
  • 11. printk() • advantages – easy using – not need any other system support • disadvantages – have to modify/rebuild source – cann't debug online Interactively – affect time / behavior – working linear • Do we need a debugger? KGDB.info
  • 12. Debugger • How debugger works • Interrupt – hardware interrupt – exception ---->debug exception – software interrupt • Key components of debugger – take over the debug exception – pick and poke system info (registers, memory) – communicable ----> could receive and deliver data with others KGDB.info
  • 13. KGDB KGDB.info
  • 14. KGDB using • KGDB was merged to kernel since 2.6.28 • KGDB Config make menuconfig – CONFIG_KGDB – CONFIG_KGDB_SERIAL_CONSOLE – CONFIG_DEBUG_INFO – CONFIG_FRAME_POINTER – CONFIG_MAGIC_SYSRQ – CONFIG_DEBUG_RODATA = n KGDB.info
  • 15. KGDB using • Kgdboc – build in kernel echo "ttyS0,115200" >/sys/module/kgdboc/parameters/kgdboc – module Insmod kgdboc.ko kgdboc="ttyS0,115200" • Gdb – gdb /usr/src/work/vmlinux – (gdb) set remotebaud 115200 – (gdb) target remote /dev/ttyS0 Remote debugging using /dev/ttyS0 kgdb_breakpoint () at kernel/debug/debug_core.c:983 983 wmb(); /* Sync point after breakpoint */ (gdb) • Trap to kgdb by magic key ----> echo "g" >/proc/sysrq-trigger KGDB.info
  • 16. KGDB using • Gdb – (gdb) b address/functions – (gdb) s / si / n / c – (gdb) bt – (gdb) info register/break/threads – (gdb) watch/rwatch (currently only x86 support) – (gdb) m addr – (gdb) set val=abc – (gdb) l* function+0x16 KGDB.info
  • 17. KGDB arch KGDB.info
  • 18. Unoptimized debugging • un-optimize single file CFLAGS_filename.o += -O0 • un-optimize entire directory of files EXTRA_CFLAGS += -O0 • un-optimize kernel module – make -C build linux.modules COPTIMIZE=-O0 M=path_to_source • DO NOT UN_OPTIMEZ the whole kernel – some codes were hacked as compiler specific. KGDB.info
  • 19. Got a timing problem? Use variables • Use a conditional variable to control a printk() – If (dbg_con) { printk(“state info ...”); } • Use a conditional to execute a variable++ – If (dbg_con) { var++; } • Use a conditional to execute a function – If (dbg_con) { xxx_function(); } • Debugger set conditional counter – (gdb) set dbg_con=1 KGDB.info
  • 20. Questions of Debugger • How kernel debugger works on multi-cpus (SMP) – Before enter debugger core route --- hold on the others slave cpu through IPI – Before quit debugger route --- release the slave cpus (tips: run flag à atomic variable, spinlock, row_spinlock) • How kernel debugger works on multi-processes – Have problems? single step on specified process, schedule • Other debugger questions? KGDB.info
  • 21. Crash Analyse • Where are the crash coming – BUG – Oops – Panic • Other info – Linux/Documentation/oops-tracing.txt KGDB.info
  • 22. Crash Analyse BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<c01683c7>] proc_dowatchdog+0x7/0xd0 *pde = 00000000 Oops: 0002 [#2] PREEMPT Modules linked in: Pid: 1126, comm: sh Tainted: G D 3.0.0-rc2-dirty #4 Bochs Bochs EIP: 0060:[<c01683c7>] EFLAGS: 00000286 CPU: 0 à Register Info EIP is at proc_dowatchdog+0x7/0xd0 EAX: c069fcc4 EBX: 00000001 ECX: b7838000 EDX: 00000001 ESI: c069fcc4 EDI: 00000004 EBP: b7838000 ESP: d7623f30 DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068 Process sh (pid: 1126, ti=d7622000 task=d749f4a0 task.ti=d7622000) Stack: d749f4a0 c069f6c0 c069f6c0 c069fcc4 c0202c77 d7623f50 d7623f9c 00000000 00000004 d7623f9c 00000004 b7838000 c0202cb0 c0202cc8 d7623f9c 00000001 d7428e00 c01b4d50 d7623f9c 00000002 00000001 d7428e00 fffffff7 081d1300 Call Trace: [<c0202c77>] ? proc_sys_call_handler+0x77/0xb0 [<c0202cb0>] ? proc_sys_call_handler+0xb0/0xb0 [<c0202cc8>] ? proc_sys_write+0x18/0x20 [<c01b4d50>] ? vfs_write+0xa0/0x140 [<c01b4ec1>] ? sys_write+0x41/0x80 [<c0539d10>] ? sysenter_do_call+0x12/0x26 Code: 75 0f c7 03 01 00 00 00 e8 57 69 fd ff 85 c0 74 db a1 48 c0 69 c0 c7 00 00 00 00 00 31 c0 83 c4 04 5b c3 90 56 53 89 d3 83 ec 08 <c7> 05 00 00 00 00 05 00 00 00 8b 54 24 18 89 54 24 04 8b 54 24 EIP: [<c01683c7>] proc_dowatchdog+0x7/0xd0 SS:ESP 0068:d7623f30 CR2: 0000000000000000 ---[ end trace 8b37721a29dead5b ]-- KGDB.info
  • 23. Crash Analyse (gdb) l* proc_dowatchdog+0x7 0xc01683c7 is in proc_dowatchdog (kernel/watchdog.c:522). 517 void __user *buffer, size_t *lenp, loff_t *ppos) 518 { 519 int ret; 520 521 int* xx = NULL; 522 *xx = 5; 523 524 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 525 if (ret || !write) 526 goto out; (gdb) KGDB.info
  • 24. Debugging process • Reproduce problem – find/read all related documents of problem – version back up/go forward – reduce dependence • Analyse problem – do more experiments, no guess !!! • Fix problem – got real root cause? – patch --- simple, clear – enjoy and play kernel! KGDB.info
  • 25. Debugging tricks Kernel Hacking config • Get debugging information in case of kernel bugs – CONFIG_FRAME_POINTER • Lockup (soft/hard) detector – CONFIG_LOCKUP_DETECTOR • SpinLock detector – CONFIG_DEBUG_SPINLOCK • RCU cpu stall detector – CONFIG_RCU_CPU_STALL_DETECTOR • softlockup / time interrupt – check hang system – soft watchdog – softlockup.c : softlockup_tick() • NMI – check hang system – hardware watchdog: nmi_watchdog=1 KGDB.info
  • 26. Print Functions • Some useful Print function for development – BUG_ON() – WARN_ON – show_backtrace() – panic() – die() – show_registers() – print_symbol(pointer) – get function caller: return_address() à gcc __builtin_return_address(0) KGDB.info
  • 27. Thanks Feedback to: libfetion@gmail.com Or visiting: http://www.kgdb.info KGDB.info