138 디코더에 16c554 두 개를 인터페이스하려고 합니다.

138의 A/B/C에는 EZ-X5의 BA23/24/25를 연결하고 G1은 풀업, /G2, /G3는 BnCS3
에 연결하였습니다. 그리고 두 554의 A0/1/2에는 BA2/3/4를 연결하였습니다.

그리고 다음과 같이 serial.h 파일만 수정하였습니다.


#define RS_TABLE_SIZE 16
#define BAUD_BASE_16554D (1843200/16)
#define EXTRA_SERIAL_PORT_DEFNS
{
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3000000,
port: 0xf3000000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(28),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3100000,
port: 0xf3100000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(29),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3200000,
port: 0xf3200000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(30),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3300000,
port: 0xf3300000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(31),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3400000,
port: 0xf3400000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(32),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3500000,
port: 0xf3500000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(44),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3600000,
port: 0xf3600000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(45),
flags: STD_COM_FLAGS,
}, {
type: PORT_16550A,
xmit_fifo_size: 16,
baud_base: BAUD_BASE_16554D,
iomem_base: (void *)0xf3700000,
port: 0xf3700000,
iomem_reg_shift: 2,
io_type: SERIAL_IO_MEM,
irq: IRQ_GPIO(81),
flags: STD_COM_FLAGS,
}

위와 같이 수정하면 다음과 같이 부팅시에 외부 ttyS가 잡힙니다.

또한 첫 번째 UART의 채널 A가 정상으로 동작을 합니다.

그러나 나머지 7(3+4)개 채널이 동작을 하질 않습니다.

Serial driver version 5.05c (2001-07-08) with no serial options enabled
ttyS00 at 0x0000 (irq = 15) is a PXA UART
ttyS01 at 0x0000 (irq = 14) is a PXA UART
ttyS02 at 0x0000 (irq = 13) is a PXA UART
ttyS03 at 0xf3000000 (irq = 51) is a 16550A
ttyS04 at 0xf3100000 (irq = 52) is a 16550A
ttyS05 at 0xf3200000 (irq = 53) is a 16550A
ttyS06 at 0xf3300000 (irq = 54) is a 16550A
ttyS07 at 0xf3400000 (irq = 55) is a 16550A
ttyS08 at 0xf3500000 (irq = 67) is a 16550A
ttyS09 at 0xf3600000 (irq = 68) is a 16550A
ttyS10 at 0xf3700000 (irq = 104) is a 16550A

1) 제가 한 것처럼 serial.h만 고치면 되는건가요?

2) Physical address가 virtual address로는 어떻게 바뀌는건가요?

일전의 게시물을 검색해보니 16개까지 붙일 수 있다고 적으셨던데요...

3) 만일 제가 CS에 지연시간을 주고 싶다면 어디를 수정해야 하는지요?

조언을 부탁드립니다.