DGB(4)

명칭
dgb - DigiBoard 인텔리전트 시리얼 카드 드라이버

서식
options "NDGBPORTS=8" device dgb0 at isa? tty port 0x220 iomem 0xfc0000 iosiz ? flags 0x0 값은 전부 단순한 예입니다.

NDGBPORTS 옵션은, 시스템에 인스톨 되고 있다 모든 카드상의 포트수의 합계를 정의합니다. 수가 정의되어 있지 않은 경우는 계산에 의해 구할 수 있습니다:
디폴트의 NDGBPORTS = 기술된 DigiBoard 카드의 수 * 16 만약 이 숫자가 실제의 포트수보다 작았던 경우, 시스템은 선두로부터 NDGBPORTS 번째의 포트까지 밖에 사용할 수가 없습니다. 만약 이 숫자가 실제의 포트수보다 컸던 경우, 모든 포트를 사용할 수 있습니다만, 약간의 메모리가 소용없게 됩니다.

flags 의 의미:
0x0001 선을 연결함 교환 (DCD 와 DSR 의 선을 교환)을 사용합니다.
0x0002 PC/Xe 의 8K 윈도우 모드를 사용하지 않습니다.

디바이스 번호:
0bCCmmmmmmmmOLIPPPPP
CCard number
mmmmmmmmajor number
callOut
Lock
Initial
PPPPPort number

해설
dgb 드라이버는 EIA RS-232C (CCITT V. 24) 표준에 준거해, 비동기 인터페이스를 갖추었다 DigiBoard PC/Xe 시리즈와 PC/Xi 시리즈의 인텔리전트 시리얼 멀티 포트 카드를 서포트합니다.

각 라인의 입출력은 이하의 baud rate의 어떤 것이나 하나로 설정할 수 있습니다; 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 더욱 새로운 카드의 버젼에서는 115200.

드라이버는 세치기를 사용하지 않고,``폴링 베이스''로 움직입니다. 이것은 드라이버가 DigiBoard 카드의 생성하는 세치기가 아니고, 클락 세치기를 사용하는 것을 의미하고 있어, 카드 상태를 1 초 쯤 25 회 체크합니다. 이 방법은 실용적입니다. 왜냐하면, DigiBoard 카드는 큰 입출력 버퍼 (포트 근처 1 KByte 이상)와 주의의 필요한 포트를 효율 좋게 찾아낼 수 있는 하드웨어를 가지고 있기 때문입니다. 이 포리시를 이용하는 것으로 보여지는 문제점은, SLIP 나 PPP 의 리스폰스가 늦어진다고 하는 것 뿐입니다.

커널 설정 파일의 각 행에는 sio(4) 드라이버와 같이 포트를 기술하는 것이 아니라, 카드를 기술합니다.

flags 키워드를 커널 설정 파일의 각 device dgb 행으로 이용하면(자), 인터페이스의 선을 연결함을 변경하거나 PC/Xe 카드로 8 K 메모리윈드우 호환 모드 (64K 메모리윈드우)를 사용하거나 할 수 있습니다. 8K 메모리윈드우를 사용하면(자), 입출력 버퍼가 작아진다 그렇다고 하는 것은 아닌 것에 주의해 주세요. 다만, 모든 버퍼가 같은 메모리아드레스에 MAP 되어 필요에 따라서 바뀐다고 할 뿐(만큼)의 일입니다.

port 값은 카드의 점퍼로 설정되었다 port 값과 같지 않으면 안됩니다. PC/Xi 카드로는 iomem 값에 대해서도 같은 것을 말할 수 있습니다. 이 값은, 카드의 점퍼로 설정된 메모리아드레스와 같지 않으면 안됩니다. PC/Xe 카드로는 점퍼를 이 목적으로 사용할 필요는 없습니다. 사실, 그러한 기능을 가진 점퍼는 존재하지 않습니다. 커널 설정 파일의 iomem 에 사용하고 싶은 주소를 쓰는 것만으로 좋습니다. 카드는, 그 주소를 사용하도록(듯이) 프로그램 됩니다.

인스톨 된 DigiBoard 는 보는거야, 같은 메모리아드레스 범위 (다른 카드를 위한 메모리나 물리 메모리를 제외하다)를 사용합니다. 대용량 메모리 (256K 나 512K 또 아마 128K 에서도)를 가진 DigiBoard 는 최초의 1 메가바이트 이외의 메모리아드레스에 MAP 되지 않으면 안됩니다. 컴퓨터가 15 메가바이트 이상의 메모리를 가지고 있었을 경우, 최초의 1 메가바이트의 address 공간 이외에는, DigiBoard 를 MAP 할 수 있다 공간은 존재하지 않습니다. 이 경우 컴퓨터의 총메모리량을 줄일 필요가 있을지도 모릅니다. 그러나 많은 머신에서는 보다 좋은 방법을 제공하고 있습니다. 그러한 머신에서는, BIOS 설정을 이용해, 16 번째의 메가바이트 (주소 0xF00000 - 0xFFFFFF)(을)를 ``무효''로 할 수가 있습니다. 이 설정에 의해, DigiBoard 의 address 공간을 이 ``구멍''로 설정하는 것이 할 수 있게 됩니다.

dgb 드라이버에 의해 제어되는 시리얼 포트는 `착호'와 `발호'의 어느 쪽에라도 사용할 수 있습니다. 각각의 포트에 대해, 착호디바이스와 발호디바이스가 존재합니다. 발호디바이스의 마이나 번호에는, 대응하는 착호포트의 것보다 128 만 큰 번호가 붙어 있습니다. 일반적인 용도에는, 착호디바이스를 사용합니다. 착호디바이스를 오픈 도중의 프로세스는, 통상은 캐리어를 기다려, 또 발호디바이스가 활동 상태가 아니게 될 때까지 기다립니다. 발호디바이스를 사용하는 것으로, 착호디바이스로 캐리어 기다려 하고 있다 프로세스의 틈을 찔러 포트를 사용할 수가 있습니다. 발호디바이스를 오픈하려고 하는 프로세스는 캐리어 대기를 하지 않습니다. 한편, 발호디바이스를 오픈하려고 하는 프로세스는, 착호디바이스상에서 캐리어 대기 하고 있는 다른 프로세스를 보다 깊은 sleeve 상태로 합니다. 이것에 의해, 발호세션으로 양프로세스가 충돌하는 것은 없어집니다. 발호디바이스를 일반적인 포트와 같지만 캐리어 대기를 하지 않고 오 푼 할 필요가 있다, 라고 생각해 조작하는 프로그램이 있습니다만, 그러한 발호디바이스의 사용법은 오용이며, 완전히 어리석게 생각되고 있습니다.

또 dgb 드라이버는, 발호와 착호 각각의 데이터 디바이스에 대한다 초기 상태 제어 디바이스와 락 상태 제어 디바이스를 서포트합니다. 초기 상태 디바이스의 마이나 번호에는, 대응하는 데이터 디바이스보다 32 만 큰 번호가 붙어 있습니다. 락 상태 디바이스의 마이나 번호에는, 대응하는 데이터 디바이스보다 64 만 큰 번호가 붙어 있습니다. 데이터 디바이스에 있어서의 termios 의 설정은, 처음으로 오픈할 때에 대응한다 초기 상태 디바이스보다 복제되어 직전에 오픈되고 있었을 때 상태로부터는 계승되지 않습니다. 초기 상태 디바이스에 대해서 평상시 그대로의 방법으로 stty(1) (을)를 사용하는 것으로, 당신이 바라는 설정에 적절한 초기 termios 상태를 프로그램 할 수 있습니다.

락 termios 상태는, 데이터 디바이스의 termios 상태의 변경을 불가능하게 하는 플래그로서 행동합니다. 예를 들면 CRTSCTS 와 같은 플래그 변수를 잠그려면 , 락 상태 디바이스로 stty crtscts (을)를 실행합니다. 속도나 특수 캐릭터의 설정을 잠그려면 , 락 상태 디바이스상의 대응하는 값을 0 이 아닌 값으로 설정하면(자) 좋습니다.

외부 디바이스를 올바르게 선을 연결함 해 올바른 프로그램으로 통신하고 있는 한은, 거의 어떠한 초기 상태여도, 락없이 동작합니다. 그렇지 않은 경우는, 디폴트의 초기 상태를 변경해, 그 상태에 락을 건다 일로, 잘 움직이게 될 수도 있을지도 모릅니다. 특히, (POSIX) 표준이 아닌 플래그의 초기 상태는, 접속된 디바이스에 맞도록(듯이) 설정해야 하고, 버그가 있는 프로그램이 이러한 플래그를 변경하지 않게, 잠글 필요가 있을지도 모릅니다. 예를 들면, 상시 RTS/CTS 핸드쉐이크를 서포트하는 디바이스에서는, CRTSCTS 는 온 상태로 잠그어 둘 필요가 있습니다. 또, 전혀 서포트하지 않는 디바이스에 대해서는, 오프 상태로 잠그어 두어야 합니다. CLOCAL 는, 캐리어를 서포트하지 않는 디바이스에 대해서는 온 상태로 잠그어야 합니다. HUPCL 는, 어떠한 이유로 절단 하고 싶지 않은 경우에는 오프 상태로 잠그어야 합니다. 일반적으로, 무엇인가가 잘못한 상태로 잠그면(자), 매우 나쁜 일이 일어납니다. 또, 복수의 설정을 서포트하는 디바이스에 대해서는 락을 행해야 하는 것이 아닙니다. 착호포트에서의 CLOCAL 플래그는, login 가 있는 종의 보안 홀을 피하기 위해서(때문에) 오프 상태에 잠그어 두어야 합니다가, 착호포트를 무엇인가 다른 용도에 사용하는 경우에는, 이 설정을 getty 로 행해야 합니다.

관련 파일
/dev/ttyD??
    착호포트
/dev/ttyiD??
/dev/ttylD??
    대응하는 착호초기 상태 디바이스와 락 상태 디바이스

/dev/cuaD??
    발호포트
/dev/cuaiD??
/dev/cualD??
    대응하는 발호초기 상태 디바이스와 락 상태 디바이스

/etc/rc.serial
    초기 상태와 락 상태 디바이스 설정의 예

이러한 디바이스명의 1 개째의 물음표는 카드 번호 (0 에서 65535 까지 10 진수. 0 및 65535 를 포함합니다)의 약어입니다. 2 개째의 물음표는 포트 번호 ([0-9a-v]의 사이의 캐릭터)의 약어입니다.

진단
원시 파일 dgb.c 의 선두에 있는 DEBUG 를 정의하는 것으로써, 확장된 진단을 얻을 수 있습니다.

dgbX: warning: address N truncated to M PC/Xe 용의 8K 윈도우의 메모리아드레스가 올바르게 배치되어 있지 않은가 (8K 경계에 배치되어야 합니다), 최초의 1 메가바이트의 범위외입니다.

dgbX: 1st reset failed 카드의 I/O 포트에의 액세스에 문제가 있습니다. 아마 커널 설정 파일에 대해, 잘못한 port 치가 지정되어 있습니다.

dgbX: 2nd reset failed 하드웨어에 문제가 있습니다.

dgbX: N[st, nd, rd, th] memory test failed 카드의 메모리에의 액세스에 문제가 있습니다. 아마 커널 설정 파일에 대해, 잘못한 iomem 치가 지정되어 있습니다.

dgbX: BIOS start failed 온보드 BIOS 의 기동에 문제가 있습니다. 아마 DigiBoard 의 메모리아드레스가, 무엇인가 다른 디바이스 혹은 RAM 와 겹치고 있습니다.

dgbX: BIOS download failed 온보드 BIOS 에 문제가 있습니다. 아마 DigiBoard 의 메모리아드레스가, 무엇인가 다른 디바이스 혹은 RAM 와 겹치고 있습니다.

dgbX: FEP code download failed front-end processor의 마이크로 OS 의 다운로드에 문제가 있습니다. 아마 DigiBoard 의 메모리아드레스가, 무엇인가 다른 디바이스 혹은 RAM 와 겹치고 있습니다.

dgbX: FEP/OS start failed front-end processor의 마이크로 OS 의 기동에 문제가 있습니다. 아마 DigiBoard 의 메모리아드레스가, 무엇인가 다른 디바이스 혹은 RAM 와 겹치고 있습니다.

dgbX: too many ports 이 DigiBoard 는, 자신이 32 보다 많은 포트를 가지고 있으면(자) 보고해 왔습니다. 아마 하드웨어의 문제가 있는지, DigiBoard 의 메모리아드레스가, 무엇인가 다른 디바이스 혹은 RAM 와 겹치고 있습니다.

dgbX: only N ports are usable NDGBPORTS 파라미터가 너무 작기 (위해)때문에, 이 카드에는 N 포트 분의 공간 밖에 할당할 수 없습니다.

dgbX: port Y is broken 온보드의 진단 프로그램이, 지정된 포트에 하드웨어상의 문제가 있으면(자) 보고했습니다.

dgbX: polling of disabled board stopped 드라이버의 폴링 논리에 내부적인 문제가 생겼습니다.

dgbX: event queue's head or tail is wrong! 드라이버나 하드웨어에 내부적인 문제가 생겼습니다.

dgbX: port Y: got event on nonexisting port 물리적으로 존재하는 포트 상태에 어떠한 변화가 있었습니다만, 설정이 올바르지 않기 때문에 사용할 수 없습니다.

dgbX: port Y: event N mstat M lstat K 드라이버는 카드로부터 정체의 모르는 이벤트를 받았습니다. 아마 이벤트 리스트가 확장된 새로운 카드를 사용하고 있는지, 그 이외의 무엇인가 하드웨어상의 문제입니다.

dgbX: port Y: overrun 입력 버퍼가 가득하게 되었습니다. 드라이버의 폴링 논리에 문제가 있습니다.

dgbX: port Y: FEP command on disabled port 드라이버에 내부적인 문제가 생겼습니다.

dgbX: port Y: timeout on FEP command 하드웨어에 문제가 있습니다.

관련 항목
stty(1), termios(4), tty(4), MAKEDEV(8), comcontrol(8)

역사
dgb 드라이버는 sio(4) 드라이버와 Linux 의 DigiBoard 드라이버에 유래하고 있어, 현재 개발 계속중입니다.

버그
BREAK 송신의 실장은 완전하지는 않습니다. 어떠한 경우에서도 1/4 초의 고정장으로 BREAK 를 송신합니다.

select(2) 의 실장에 버그가 있었습니다. 이 문제는 현재는 수정되고 있습니다만, 아직 광범위한 테스트는 되고 있지 않습니다.

ditty 명령은 없습니다. 그 기능이 많고 (선을 연결함 교환, 115200 보에게로의 속도 향상등)은 드라이버 자신에게 실장되고 있습니다. 그 이외의 몇개의 기능은 빠져 있습니다.