CH(4)

명칭
ch - SCSI 메디아첸쟈 (쥬크박스) 드라이버

서식
device ch device ch1 target 4 lun 0

해설
ch 드라이버는, SCSI 메디아첸쟈를 서포트합니다. 이 드라이버는, 많은 슬롯에 존재하는 미디어를 복수의 드라이브의 사이에 다중화해 이용할 수 있도록(듯이) 합니다. 첸쟈데바이스에는, 옵션으로서 바코드 리더를 비치하는 것 도 할 수 있습니다. 이 리더를 사용해, 미디어에 부수 하는 정보를 읽어들입니다.

SCSI 첸쟈를 시스템에 짜넣기 전에, SCSI 어댑터를 별도 짜넣어 둘 필요가 있습니다.

부트시에 SCSI 어댑터를 프로브 하고 있을 때, SCSI 버스를 주사 해 디바이스를 찾습니다. `Changer'타입이다고 응답하는 디바이스가 발견되면(자), 그것들은 ch 드라이버에 「아탓치」됩니다. 2.1 보다 전의 릴리스의 FreeBSD 에서는, 최초로 발견된 디바이스가 ch0 에 아탓치 되어 이후 발견된 디바이스는 차례차례, ch1 등에 아탓치 됩니다. 2.1 으로부터, 어느 디바이스가 어느 ch 유니트로서 접속해야할 것인가를 지정 할 수 있게 되었습니다. 이 때문에의 커널 설정에 대해서는, scsi(4) (을)를 참조해 주세요.

커널 설정
설정 시에, 옵션으로서 count (을)를 지정했을 경우, 그 수만의 SCSI 메디아첸쟈가 설정됩니다. 드라이버의 기억 area의 대부분은, 디바이스가 발견되었을 때에게만 할당할 수 있으므로, 많은 디바이스를 설정해도 높지는 다하지 않습니다 (한번 최초의 디바이스가 드라이버를 짜넣었을 경우).

IOCTL
유저 모드 프로그램은, 다음에 나타내는 ioctl 를 사용해 첸쟈드라이바와 데이터의 교환을 행합니다. 커널과 첸쟈데바이스와의 사이의 데이터의 교환으로 사용되는, 첸쟈에레먼트의 주소는, 0 으로부터 시작되는 논리 주소에 할당할 수 있습니다. 엘리먼트의 타입은 다음과 같이 지정합니다.

CHET_MT
    미디어 이동 엘리먼트 (픽커)

CHET_ST
    스토리지 엘리먼트 (슬롯)

CHET_IE
    반입해/지출 엘리먼트 (포털)

CHET_DT
    데이터 전송 엘리먼트 (드라이브)

다음에 나타낸다 ioctl(2) 호출이 첸쟈에 적용됩니다. 이것들은 헤더 파일 <sys/chio.h> 그리고 정의됩니다.

CHIOMOVE
    (struct changer_move) 이것은, 현재의 픽커를 이용해, 미디어를 있는 엘리먼트로부터 다른 엘리먼트에 이동시킵니다 (MOVE MEDIUM). 이동원과 이동처의 엘리먼트는, changer_move 구조체 중(안)에서 지정합니다. 이 구조체는, 적어도 다음에 나타내는 필드를 가집니다.

        u_int cm_fromtype; /* 이동원엘리먼트의 타입 */
        u_int cm_fromunit; /* 이동원엘리먼트의 논리 유니트 */
        u_int cm_totype;   /* 이동처 엘리먼트의 타입 */
        u_int cm_tounit;   /* 이동처 엘리먼트의 논리 유니트 */
        u_int cm_flags;	   /* 그 외 플래그 */

    cm_flags 필드의 CM_INVERT 가 설정되어 있는 경우, 메디아첸쟈는 이동중에 미디어를 반전시키도록(듯이) 지시받습니다.

CHIOEXCHANGE
    (struct changer_exchange) 이것은, 이동원엘리먼트에 있는 미디어를 최초의 이동처 엘리먼트에 이동시켜, 최초의 이동처 엘리먼트에 있던 미디어를 2 번째의 이동처 엘리먼트에 이동시킵니다. 단순한 교환의 경우, 이동원과 2 번째의 이동처와는 같은이다 필요가 있습니다. 이 조작의 수행에 즈음해 현재의 픽커가 이용됩니다. 영향을 받는 엘리먼트의 주소는, changer_exchange 구조체에 포함해 ioctl 에 대해서 지정합니다. 이 구조체는 적어도 다음의 요소를 가집니다.

        u_int ce_srctype;	 /* 이동원엘리먼트의 타입 */
        u_int ce_srcunit;	 /* 이동원의 논리 유니트 */
        u_int ce_fdsttype; /* 최초의 이동처 엘리먼트의 타입 */
        u_int ce_fdstunit; /* 최초의 이동처의 논리 유니트 */
        u_int ce_sdsttype; /* 2번째의 이동처 엘리먼트의 타입 */
        u_int ce_sdstunit; /* 2번째의 이동처의 논리 유니트 */
        u_int ce_flags;	 /* 그 외 플래그 */

    ce_flags 중(안)에서, CM_INVERT1 와 CM_INVERT2 를 설정 할 수 있어 이것들은 각각, 최초의 미디어와 2 번째의 미디어를 이동중에 반전시킵니다.

    이 기능은 테스트하고 있지 않습니다.

CHIOPOSITION
    (struct changer_position) 이것은, 현재의 픽커를 이동시키고 지정한 엘리먼트의 전에 둡니다. 엘리먼트는 changer_position 구조체로 지정합니다. 이것은 적어도 다음의 요소를 가집니다.

        u_int cp_type;  /* 엘리먼트의 타입 */
        u_int cp_unit;  /* 엘리먼트의 논리 유니트 */
        u_int cp_flags; /* 그 외 플래그 */

    cp_flags 필드에서 CP_INVERT 를 설정할 수 있어 이것은 이동중에 픽커를 반전시킵니다.

CHIOGPICKER
    (int) 이것은, 현재의 픽커의 논리 주소를 돌려줍니다.

CHIOSPICKER
    (int) 이것은, 준 논리 주소가 가리키는 픽커를 선택합니다.

CHIOGPARAMS
    (struct changer_params) 이것은, 메디아첸쟈의 설정 파라미터를 돌려줍니다. 이 ioctl 는, 유저가 건네준 changer_params 구조체의, 적어도 이하의 필드를 묻습니다.

        u_int cp_npickers; /* 픽커의 수 */
        u_int cp_nslots;   /* 슬롯의 수 */
        u_int cp_nportals; /* 반입해/지출 포털의 수 */
        u_int cp_ndrives;  /* 드라이브의 수 */

    어플리케이션이 CHIGSTATUS ioctl 를 이용해 쥬크박스의 상태를 조사하는에 앞서, 쥬크박스의 제원을 문의할 때에, 이 호출을 사용할 수 있습니다.

CHIOIELEM
    이것은, 메디아첸쟈데바이스에 대해, INITIALIZE ELEMENT STATUS 호출을 행합니다. 이것에 의해, 메디아첸쟈는, 로드하고 있다 미디어에 관한 내부 상태 정보를 갱신 당합니다. 첸쟈가 label 리더를 가지는 경우, 바코드 label의 주사도 아울러 행합니다. 이 호출에서는, ch 드라이버 상태는 영향을 받지 않습니다.

CHIOGSTATUS
    (struct changer_element_status_request) 이것은, 메디아첸쟈데바이스에 대해, READ ELEMENT STATUS 호출을 행합니다. 이 호출은 메디아첸쟈의 엘리먼트 상태 정보를 읽어들여, 그것을 changer_element_status 구조체의 배열로 변환합니다.

    CHIOGSTATUS (이)가 호출할 것에, 어느 타입의 1 개 이상의 엘리먼트 상태가 물어 합쳐집니다.

    어플리케이션은 changer_element_status_request 구조체를 ch 드라이버에 건네줍니다. 이 구조체는 다음에 나타내는 필드를 가집니다.

        u_int                          cesr_element_type;
        u_int                          cesr_element_base;
        u_int                          cesr_element_count;
        u_int                          cesr_flags;
        struct changer_element_status *cesr_element_status;

    드라이버는 이 구조체를 읽어들여, 타입, 논리 베이스 주소, 엘리먼트수 (을)를 결정해, cesr_element_status 필드가 가리키는 changer_element_status 구조체의 배열에 어느 정보를 돌려줄까를 압니다. 어플리케이션은, cesr_element_count 개 상태 구조체 (다음을 봐 주세요)를 보관 유지하는데 충분한 크기의 메모리를 할당할 필요가 있습니다. cesr_flags 에 옵션으로 CESR_VOLTAGS (을)를 설정해, 볼륨 태그 (바코드) 정보를 쥬크박스로부터 읽어들여 돌려줄 필요가 있는 것을 통지할 수 있습니다.

    cesr_element_base 필드와 cesr_element_count 필드는, 첸쟈의 물리적 구성에 비추어 정당한 값이 아니면 안됩니다. 만약 정당한 값이 아닌 경우, CHIOGSTATUS ioctl 는 EINVAL 에러 코드를 돌려줍니다.

    엘리먼트에 대한 정보는, changer_element_status 구조체의 배열안에 돌려주어집니다. 이 구조체는 적어도 다음에 나타내는 필드를 가집니다.

        u_int            ces_addr;      /* 메디아첸쟈의 엘레먼트 어드레스 */
        u_char           ces_flags;     /* 이하의 CESTATUS 의 정의를 참조 */
        u_char           ces_sensecode; /* 엘리먼트의 추가 센스 코드 */
        u_char           ces_sensequal; /* 추가 센스 코드 수식자 */
        u_char           ces_invert;    /* 반전 비트 */
        u_char           ces_svalid;    /* 이동원주소 (ces_source)가 유효 */
        u_short          ces_source;    /* 미디어의 이동원주소 */
        changer_voltag_t ces_pvoltag;   /* 프라이머리 볼륨 태그 */
        changer_voltag_t ces_avoltag;   /* 대체 볼륨 태그 */
        u_char           ces_idvalid;   /* ces_scsi_id 가 유효 */
        u_char           ces_scsi_id;   /* 엘리먼트의 SCSI id (ces_idvalid 가 비 0 의 경우) */
        u_char           ces_lunvalid;  /* ces_scsi_lun 가 유효 */
        u_char           ces_scsi_lun;  /* 엘리먼트의 SCSI lun (ces_lunvalid 가 비 0 의 경우) */

    ces_addr 필드는, 메디아첸쟈의 좌표계로 나타냈다 엘리먼트의 주소를 보관 유지합니다. 드라이버는 이것을 사용하지 않습니다. 진단 목적만으로 사용해 주세요.

    ces_flags 필드에 대해, 다음에 나타내는 플래그가 정의됩니다.

    CESTATUS_FULL
        미디어가 존재합니다.

    CESTATUS_IMPEXP
        미디어를 둔 것은 오퍼레이터입니다 (픽커가 둔 것이 아닙니다).

    CESTATUS_EXCEPT
        그 엘리먼트는 예외적 상태 (예를 들면, 바코드 label가 부당한 값, 바코드가 아직 주사되어 있지 않다)에 있습니다.

    CESTATUS_ACCESS
        그 엘리먼트는 픽커에 의해 액세스 가능한 상태입니다.

    CESTATUS_EXENAB
        그 엘리먼트는 미디어 지출을 서포트하고 있습니다.

    CESTATUS_INENAB
        그 엘리먼트는 미디어 반입을 서포트하고 있습니다.

    모든 엘리먼트 타입에 대해 모든 플래그가 유효하다고는 할 수 없는 것에 주의해 주세요.

주
이 버젼의 ch 드라이버는, DEC TZ875 (5 슬롯, 1 DLT 드라이브)와 Breece Hill Q47 (60 슬롯, 4 DLT 드라이브, 바코드 리더 첨부)(을)를 이용해 테스트해 있습니다.

테스트에 이용할 수 있던 디바이스가 필요한 명령을 서포트하고 있지 않다고 한다 사실에 의해, ch 드라이버가 서포트하는 기능의 상당수는, 완전하게 테스트 되어 있지 않습니다. 이것은, 대체 볼륨 태그, 미디어 반전, 엘리먼트의 반입해/지출 조작, 복수 픽커 조작, 그 외의 기능이 있습니다.

저자
ch (은)는, And Communications, http://www.and.com/ 의 Jason R. Thorpe <thorpej@and.com> 하지만 기술했습니다. 이것을, 그 손의 디바이스를 가지고 있었다 Stefan Grefen <grefen@goofy.zdv.uni-mainz.de> 하지만 시스템에 덧붙였습니다. 이것을 CAM 에 이식한 것은, Kenneth Merry <ken@FreeBSD.ORG> 입니다. 이것을 갱신해 볼륨 태그를 서포트하도록(듯이) 한 것은, Hans Huebner <hans@artcom.de> 입니다.

관련 파일
/dev/ch[0-9]
    디바이스 엔트리

진단
메디아첸쟈가 ch 드라이버가 요구하는 기능을 서포트하고 있지 않는 경우, 여기서 기술한 ioctl 에 대해, 콘솔 에러 메세지와 에러 return code를 생성합니다.

관련 항목
chio(1), cd(4), sd(4), st(4)

역사
ch (은)는, 386BSD 0.1 으로 나타났습니다.