//debug source section
static void pl2303_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
{
struct pl2303_gpio *gpio = to_pl2303_gpio(chip);
struct pl2303_gpio_desc *desc;
mutex_lock(&gpio->lock);
desc = gpio->descs + offset;
if (value) //—>break here
gpio->data[desc->value_offset] |= desc->value_mask;
else
gpio->data[desc->value_offset] &= ~desc->value_mask;
pl2303_vendor_write(desc->value_ctrl, gpio->data[desc->value_offset], gpio->serial);
mutex_unlock(&gpio->lock);
}
////////////////////////////////////////openocd
/root/project_board/free_imx/myandroid/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-gdb
(gdb) target remote localhost:3333
(gdb) symbol-file /root/project_board/free_imx/out/matrix_io/kernel/vmlinux
(gdb) mon halt
(gdb) break /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:297
(gdb) continue
Breakpoint 1, pl2303_gpio_set (chip=0x800719bc, offset=3159793204, value=-2114730436)
at /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:297
297 if (value)
(gdb) p value
$7 = -2114730436
Breakpoint 1, pl2303_vendor_write (value=65535, index=65535, serial=0x0)
at /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:218
218 return res;
(gdb) p &index
$1 = (__u16 *) 0xbccb9d9c
(gdb) p &value
$2 = (__u16 *) 0xbccb9d9e
(gdb) p &res
$3 = (int *) 0xbccb9dac
https://picasaweb.google.com/1061855410 … 8164287378
////////////////////////////////////////
//////////////////////////////////////KGDB
(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0
kgdb_breakpoint ()
at /root/project_board/free_imx/myandroid/kernel_imx/kernel/debug/debug_core.c:1025
1025 arch_kgdb_breakpoint();
(gdb) break /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:297
Breakpoint 1 at 0x8075bfd0: file /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c, line 297.
(gdb) continue
Continuing.
Breakpoint 1, pl2303_gpio_set (chip=0xbc5e99e4, offset=0, value=0)
at /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:297
(gdb) p value
$1 = 0
Breakpoint 1, pl2303_vendor_write (value=1, index=48, serial=0xbc5d7980)
at /root/project_board/free_imx/myandroid/kernel_imx/drivers/usb/serial/pl2303.c:218
218 return res;
(gdb) p &index
$10 = (__u16 *) 0xbccb9d9c
(gdb) p &value
$11 = (__u16 *) 0xbccb9d9e
(gdb) p &res
$12 = (int *) 0xbccb9dac
https://picasaweb.google.com/1061855410 … 7029124338
/////////////////////////////////////////////////////////////////////////
value = 0 is correct on kgdb
openocd and kgdb symbol address are the same
openocd global variable is good, only local variable is wrong. can fixed it?
and call stack jsut can see 2 or 3 layer.
kgdb can read all struct variable and call stacks
can make openocd like kgdb?
bug similar as this but not sure~~~how to fix openocd