Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:users:jcmvbkbc:omap-support-pieces

N8x0 support in linux-omap

Current kernel: 2.6.35

Rootfs and kernel config

Startup plan

  • [2/3] find optimal debugging techniques and real HW/qemu split;
  • [3/4] make minimal working/debuggable configuration;
  • [0] compile domain glossary.

Debug interfaces

Subsystems' status

  • SPI, MMC, USB, mac80211: ok

Debugging in qemu

Kernel configuration

  • CONFIG_DEBUG_INFO=y for symbolic debugging to work;
  • CONFIG_FRAME_POINTER=y (which is only possible when CONFIG_ARM_UNWIND=n) + CONFIG_DEBUG_BUGVERBOSE=y for symbolic backtrace on oopses and BUGs;

Kernel command line parameters

  • initcall_debug=1 – make kernel print all _init function calls during kernel_init;

Magic numbers

  • 0x80000000 – here the kernel is loaded
  • 0x80008000 – here we jump after decompression (.text.head that has VA of 0xc0008000 has PA 0x80008000 until MMU is active)
  • 0xc0026000 – 'arm-linux-gnu-objdump -x vmlinux' says that .text starts here

Booting n8x0 kernel in qemu

qemu-system-arm -M n810 -kernel "linux-omap-2.6/arch/arm/boot/zImage" -s -sd mmcblk0 -usb

Script for gdb session

target remote 127.0.0.1:1234
break *0x80008000

To debug kernel as usual:

symbol-file linux-omap-2.6/vmlinux

To debug compression-related stuff from the very beginning (start, arch/arm/boot/compressed/head.S) till start_kernel:

add-symbol-file linux-omap-2.6/arch/arm/boot/compressed/vmlinux 0x80000000

To debug kernel from stext (arch/arm/kernel/head.S) until MMU is active:

add-symbol-file linux-omap-2.6/vmlinux 0x80026000 -s .text.head 0x80008000

To debug kernel from start_kernel (init/main.c):

add-symbol-file linux-omap-2.6/vmlinux 0xc0026000

"Blank screen" debugging

Whatever happens, ^C breaks into the running kernel. If the screen is blank, dmesg-like log may be viewed through

x/10000s log_buf

Or even through

dump memory kmsg.log log_buf log_buf+10000

Debugging on real HW

Dealing with retu watchdog

Need to periodically touch it, like this:

while true
do
 echo 63 > /sys/devices/platform/retu-watchdog/period
 sleep 1
done
etc/users/jcmvbkbc/omap-support-pieces.txt · Last modified: 2016/08/08 20:53 by kel