커널 디바이스 드라이버 작업 도중에 커널패닉을 만났습니다.
Unable to handle kernel NULL pointer dereference at virtual address 00000098
...
원인이 되는 지점을 찾았는데, 어찌된 상황인지 이해가 안가고 있습니다..;;
실제 커널패닉을 일으키는 지점은 다음과 같습니다.
static void transmit_chars(struct uart_omap_port *up)
{
struct circ_buf *xmit = &up->port.state->xmit;
int count;
if (up->port.irq == 73) {
printk(KERN_DEBUG "\n %d : %s / %s", __LINE__, __FUNCTION__, __FILE__);
printk(KERN_DEBUG "\n &(up->port.x_char) = 0x%08x", &(up->port.x_char));
}
if (up->port.x_char) { // <- 여기서 커널패닉이 남
serial_out(up, UART_TX, up->port.x_char);
up->port.icount.tx++;
up->port.x_char = 0;
return;
}
if (up->port.x_char) 구문을 만나는 순간 커널패닉이 납니다.
희한한 것은 up->port.x_char의 주소는 null이 아니라는 겁니다.
제가 뭔가 잘 못 이해하고 있는걸까요?
갑자기 뭔가 미궁에 빠진 기분입니다...;;