реклама на сайте
подробности

 
 
> не могу запустить kgdb, kernel debugger
federal
сообщение Jan 12 2013, 08:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 12-01-13
Из: Нижний Новгород
Пользователь №: 75 160



День добрый!

Столкнулся с проблемой для cortex-A8.
Не загружается отладчик ядра во время стартапа ядра.
Делаю вроде все правильно, по инструкции http://www.linuxforu.com/2011/09/kernel-sp...ggers-in-linux/
ядро версии 3.x.x ( 3.2.18 ).
Отладчик ядра запускаю по 232 порту, т.е. over console( ввиду того, что в ядре версии > 3.x.x kgdb over ethernet исключили ).

параметры, которые я дополнительно передаю ядру:
kgdboc=ttyO0,115200n8 kgdbwait

пробовал и так:
kgdb8250=ttyO0,115200n8 kgdbwait

но все равно, во время старта kgdboc не подгружается.

Кто нибудь может подсказать, как запустить его и в чем может быть проблема?
Есть какие нибудь идеи?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
federal
сообщение Jan 12 2013, 10:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 12-01-13
Из: Нижний Новгород
Пользователь №: 75 160



да, реализованы

drivers/tty/serial/omap-serial.c

Код
#ifdef CONFIG_CONSOLE_POLL

static void serial_omap_poll_put_char(struct uart_port *port, unsigned char ch)
{
    struct uart_omap_port *up = (struct uart_omap_port *)port;
    wait_for_xmitr(up);
    serial_out(up, UART_TX, ch);
}

static int serial_omap_poll_get_char(struct uart_port *port)
{
    struct uart_omap_port *up = (struct uart_omap_port *)port;
    unsigned int status = serial_in(up, UART_LSR);

    if (!(status & UART_LSR_DR))
        return NO_POLL_CHAR;

    return serial_in(up, UART_RX);
}

#endif /* CONFIG_CONSOLE_POLL */

#ifdef CONFIG_SERIAL_OMAP_CONSOLE

static struct uart_omap_port *serial_omap_console_ports[4];

static struct uart_driver serial_omap_reg;

static void serial_omap_console_putchar(struct uart_port *port, int ch)
{
    struct uart_omap_port *up = (struct uart_omap_port *)port;

    wait_for_xmitr(up);
    serial_out(up, UART_TX, ch);
}

static void
serial_omap_console_write(struct console *co, const char *s,
        unsigned int count)
{
    struct uart_omap_port *up = serial_omap_console_ports[co->index];
    unsigned long flags;
    unsigned int ier;
    int locked = 1;

    local_irq_save(flags);
    if (up->port.sysrq)
        locked = 0;
    else if (oops_in_progress)
        locked = spin_trylock(&up->port.lock);
    else
        spin_lock(&up->port.lock);

    /*
     * First save the IER then disable the interrupts
     */
    ier = serial_in(up, UART_IER);
    serial_out(up, UART_IER, 0);

    uart_console_write(&up->port, s, count, serial_omap_console_putchar);

    /*
     * Finally, wait for transmitter to become empty
     * and restore the IER
     */
    wait_for_xmitr(up);
    serial_out(up, UART_IER, ier);
    /*
     * The receive handling will happen properly because the
     * receive ready bit will still be set; it is not cleared
     * on read.  However, modem control will not, we must
     * call it if we have saved something in the saved flags
     * while processing with interrupts off.
     */
    if (up->msr_saved_flags)
        check_modem_status(up);

    if (locked)
        spin_unlock(&up->port.lock);
    local_irq_restore(flags);
}

static int __init
serial_omap_console_setup(struct console *co, char *options)
{
    struct uart_omap_port *up;
    int baud = 115200;
    int bits = 8;
    int parity = 'n';
    int flow = 'n';

    if (serial_omap_console_ports[co->index] == NULL)
        return -ENODEV;
    up = serial_omap_console_ports[co->index];

    if (options)
        uart_parse_options(options, &baud, &parity, &bits, &flow);

    return uart_set_options(&up->port, co, baud, parity, bits, flow);
}

static struct console serial_omap_console = {
    .name        = OMAP_SERIAL_NAME,
    .write        = serial_omap_console_write,
    .device        = uart_console_device,
    .setup        = serial_omap_console_setup,
    .flags        = CON_PRINTBUFFER,
    .index        = -1,
    .data        = &serial_omap_reg,
};

static void serial_omap_add_console_port(struct uart_omap_port *up)
{
    serial_omap_console_ports[up->pdev->id] = up;
}

#define OMAP_CONSOLE    (&serial_omap_console)

#else

#define OMAP_CONSOLE    NULL
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 17:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016