하드웨어
글 수 321
2011.06.17 21:47:34 (*.138.143.120)
22312
9번째 비트를 사용하기 위해
8250.c 의 serial8250_set_termios() 함수를 수정하여 CS5 옵션일 경우 9th=1 로 CS6 옵션일 경우 9th=0 으로 설정한 후
함수를 나가게 하였다.
case CS5:
up->lcr |= UART_LCR_EPAR; // 9th = 1
serial_outp(up, UART_LCR, up->lcr);
return;
case CS6:
up->lcr &= ~UART_LCR_EPAR; // 9th = 0
serial_outp(up, UART_LCR, up->lcr);
return;
또한 8250.c 의 serial8250_set_termios() 함수에서 #ifdef CMSPAR 로 막혀있는 부분을 풀었다.
위와 같이 수정한 후 커널을 컴파일 한다.,
이제 어플에서 시리얼 포트를 열때 아래와 같은 옵션을 선택한다.
newtio.c_iflag = IGNPAR;
9번째 비트를 1로 하고 싶다면
newtio.c_cflag = CS5;
tcsetattr( fd, TCSANOW, &newtio );
9번째 비트를 0으로 하고 싶다면
newtio.c_cflag = CS6;
tcsetattr( fd, TCSANOW, &newtio );
위와 같이 설정하면 된다...
수신일 경우는 9번째 비트가 어떤값인지 알지 못한다... 드라이버를 새로 작성한다면 알수도 있지만 .. 일이 많다. ^^