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_cflag  = CS8 | CLOCAL | CREAD | PARENB | 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번째 비트가 어떤값인지 알지 못한다... 드라이버를 새로 작성한다면 알수도 있지만 .. 일이 많다. ^^