linux 를 다루다 보면 의외로 간단한 부분이지만 linux 가 자체 지원해 주어서 잘 모르는 부분이 있습니다.
그중에 하나가 serial port 에 관련된 부분인데요.
내용을 간단하게 다뤄 봅시다.
우선 사용되는 node 는 다음 위치에 있습니다.
/dev/ttySAC0 .. 1 .. 2 .. 3
어느 port 를 사용할 것인지는 kernel 에 boot param 으로 넘기게 되어 있지요.
console=console=ttySAC2,115200n8
요렇게 셋팅해주면 kernel 에서 ttySAC2 node 를 mknod 해 주어서 자동으로 consol 에 물려줍니다.
실제로 다음과 같이 입력해 보면 동일한 메세지가 consol 에 출력되는것을 보실 수 있습니다.
# echo "test message" > /dec/ttySAC2
# test message
헌데 재미있는점은 user space 와 kernel 이 하나의 Uart port 를 쓰고 있지만 경로가 다르다는 겁니다.
위처럼 셋팅했을 경우 user space 에서 printf 로 출력되는 메세지들은
/dev/ttySAC2
로 출력되게 됩니다.
하지만 kernel 에서 printk 로 출력되는 메세지는 uart driver 를 통해서 직접 출력되게 됩니다.
call tree 는 linux 2.6 버전에서 다음과 같습니다.
< printf 의 경우 ttySACx node 로 write >
ret_fast_syscall -> sys_write -> vfs_write -> tty_write -> n_tty_write -> tty_write_room -> ...
< kernel 에서 printk 의 경우 >
printk -> vprintk -> release_console_sem -> __call_console_drivers -> uart_console_write -> s3c24xx_serial_console_putchar -> ...
따라서 서로 다른 buffer 를 사용하게 됩니다.
하나의 buffer 에서 kernel 과 user space 의 message 를 모두 봐야하는 이슈가 있었는데요.
최근에 나온 ttyprintk 라는 patch 를 적용하고
user 쪽에서 ttySACx 가 아닌 ttyprintk 에다가 write 를 하면 모두 uart driver 를 통해서 consol 출력이 가능합니다.
하지만 buffer 의 크기가 줄어든 만큼 유실이 많이질 각오(?)는 해 두어야 합니다.
그중에 하나가 serial port 에 관련된 부분인데요.
내용을 간단하게 다뤄 봅시다.
우선 사용되는 node 는 다음 위치에 있습니다.
/dev/ttySAC0 .. 1 .. 2 .. 3
어느 port 를 사용할 것인지는 kernel 에 boot param 으로 넘기게 되어 있지요.
console=console=ttySAC2,115200n8
요렇게 셋팅해주면 kernel 에서 ttySAC2 node 를 mknod 해 주어서 자동으로 consol 에 물려줍니다.
실제로 다음과 같이 입력해 보면 동일한 메세지가 consol 에 출력되는것을 보실 수 있습니다.
# echo "test message" > /dec/ttySAC2
# test message
헌데 재미있는점은 user space 와 kernel 이 하나의 Uart port 를 쓰고 있지만 경로가 다르다는 겁니다.
위처럼 셋팅했을 경우 user space 에서 printf 로 출력되는 메세지들은
/dev/ttySAC2
로 출력되게 됩니다.
하지만 kernel 에서 printk 로 출력되는 메세지는 uart driver 를 통해서 직접 출력되게 됩니다.
call tree 는 linux 2.6 버전에서 다음과 같습니다.
< printf 의 경우 ttySACx node 로 write >
ret_fast_syscall -> sys_write -> vfs_write -> tty_write -> n_tty_write -> tty_write_room -> ...
< kernel 에서 printk 의 경우 >
printk -> vprintk -> release_console_sem -> __call_console_drivers -> uart_console_write -> s3c24xx_serial_console_putchar -> ...
따라서 서로 다른 buffer 를 사용하게 됩니다.
하나의 buffer 에서 kernel 과 user space 의 message 를 모두 봐야하는 이슈가 있었는데요.
최근에 나온 ttyprintk 라는 patch 를 적용하고
user 쪽에서 ttySACx 가 아닌 ttyprintk 에다가 write 를 하면 모두 uart driver 를 통해서 consol 출력이 가능합니다.
하지만 buffer 의 크기가 줄어든 만큼 유실이 많이질 각오(?)는 해 두어야 합니다.
'Programming > Linux_Kernel' 카테고리의 다른 글
virtual file system diagram (0) | 2011.01.01 |
---|---|
mknod 의 의미 (0) | 2010.12.23 |
GPIO control 을 user 에 넘기는 세련된 방법 (0) | 2010.12.14 |
linux file system 용어 - UBI (0) | 2010.11.26 |
boot param의 해석 - __early_param, __sertup mecro 분석 (2) | 2010.11.24 |