<!-- CD Writer mini-HOWTO의 sgml소스 번역 - 조용일 tolkien@nownuri.net 변환 - 엄기성 jurist@netkorea.co.kr --> <!doctype linuxdoc system> <article> <!-- Title information --> <title>CD Writer mini-HOWTO <author>Matt Cutts, <em><htmlurl url="mailto:cutts@ms.uky.edu" name="cutts@ms.uky.edu"></em> <date>v0.2, 17 Dec 1994 <trans>조 용일 <em><htmlurl url="mailto:tolkien@nownuri.net" name="tolkien@nownuri.net"></em>, <trans>엄 기성 <em><htmlurl url="mailto:jurist@netkorea.co.kr" name="jurist@netkorea.co.kr"></em> <abstract> Linux에서 CD Writer의 사용에 대해서 간략하게 설명했다. </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <sect>소개 <p> 이 문서는 Linux kernel v1.1.64, Philips CDD 521(겉에는 Kodak PCD Writer 200 PLUS라고 적혀 있지만), Adaptec 1542cf를 가지고 CD를 구운 방법을 적었다 내가 아직 다른 writer들은 test해본 일는 없지만, <tt/cdwrite/는 아마도 Philips writer에서만 실행되는 것같다. :-) 전반부는 내가 했던 일을 과정별로 분해하여 재구성한 것이다. 한 번만 하면 그 다음부터 당신이 할 일은 <tt/mkisofs/와 <tt/cdwrite/를 사용하여 CD를 굽기만 하면 된다. <sect1>Feedback <p> 이 문서는 CD writer로 내가 한 경험을 서술하고 있다. 나는 이 일에 대한 몇가지 질문이나 의견에 대답할 수 있을 것이다. 부담없이 <htmlurl url="mailto:cutts@ms.uky.edu" name="Matt Cutts">로 mail을 주기 바란다. 또한 내가 잘못 알고 있는 것도 지적해주기 바란다. <sect>진행순서 <p> 이 곳은 내가 한 일 모두를 순서대로 적었다. kernel panic으로 인한 절차들은 건너 뛰어도 된다 :-). super-user로서 이 process를 진행시켜야 함을 명심하자. <sect1>전원을 끄고, CD-Writer를 컴퓨터와 연결한다. 그리고 reboot <p> --> kernel panic 발생 <sect1>1.1.64 kernel로 upgrade <p> --> 여전히 Kernel panic <sect1>1542cf setting을 바꿈 <p> Mike McKenna(우리 구역 hardware 담당자)와 나는 여기저기 약간 setting을 바꾸었다. 아래에 있는 list들중 하나가 모든 error를 잡았다. 나는 "Enable Disconnection"를 CD writer에 상응하는 SCSI ID#를 위해서 "no"로 바꾼 것이 error를 잡았다고 90% 확신한다. 하지만 setting을 한 뒤, CD를 구워본 적이 없다. 이 것을 먼저 해보고, 안 되면 다른 것을 해보기 바란다. booting할 때, Ctrl-A를 눌러 SCSI-select utility의 "Configure/View Host Adapter Settings"로 들어간다. 다음은 내가 했던 setting이다. <code> Host Adapter IRQ Channel -> 11 Host Adapter DMA Channel -> 5 Host Adapter SCSI ID -> 7 [BIOS Revision: 2.02; Base Address: DC000h; Firmware: Rev. B.0; Checksum: A223h] (these should be irrelevant to you; DO NOT change the settings above) SCSI Parity Checking Enabled DMA Transfer Rate 5.0 MB/sec Host Adapter SCSI Termination Enabled SCSI Device Configuration (note hard drive = #0, writer = #1, 1542 = #7) #0 #1 #2 #3 #4 #5 #6 #7 Enable Sync Negotiation no no no no no no no no Enable FAST SCSI no no no no no no no no Enable Disconnection yes no yes yes yes yes yes yes Send Start Unit Command no yes no no no no no no *(default is all yes for Enable Disconnection and all no for Send Start Unit Command) Advanced Configuration Options Floppy Controller I/O Port (AHA-1542CF only) 3F0h-3F7h Reset SCSI Bus at Power-On Enabled Host Adapter BIOS (Configuration Utility Reserves BIOS Space) Enabled System Boot (INT 19h) Controlled by Host Adapter BIOS Enabled Extended BIOS Translation for DOS Drives > 1 GByte Disabled *Support Removable Disks Under BIOS as Fixed Disks Enabled Dynamically Scan SCSI Bus for BIOS Devices Disabled BIOS Support for More Than 2 Drives (MS-DOS(R) 5.0 and above) Disabled Immediate Return On Seek Command Enabled Display <Ctrl><A> Message During BIOS Initialization Enabled *BIOS Support for Floptical Drives Enabled </code> *표와 다른 것은 default와 다른 것이다. 필요하지 않은 것까지 포함한 전체 list를 보여주게 되어 미안하다. 하지만, SCSI 초보자는 좋아할 것이라고 생각한다. REMEMBER: 내가 생각하기에 필요한 변화는 "Enable Disconnection for the ID#"뿐이다. yes를 no로 바꾸면 된다. 결과는: no panic; CDROM drive를 sr0로 인식하고, SCSI generic drvier는 항상 그렇듯이 인식했는지 여부를 알려오지 않았다. <sect1><em/mkisofs/를 사용해서 binary image 생성하기 <p> <tscreen><verb> # mkisofs -o /home/cd.image /home/dir_to_archive </verb></tscreen> [tsx-11.mit.edu의 /pub/linux/BETA/cdrom/mkisofs-1.00.tar.gz를 가져다가 사용. version 1.01까지 있음.] 또 다른 tool인 <tt/iso9660-diagnose.tar.gz/를 같은 디렉토리에서 가져 올 수 있다. section 3에서 <tt/mkisofs/의 사용법 참조 <sect1>SCSI generic device 만들다. <p> <tscreen><verb> # /dev/MAKEDEV sg </verb></tscreen> Joseph Julicher는 SCSI inquiry byte를 처리하도록 kernel hacking을 제안하였다. (0x1f와 bit masking을 하면 된다). 또한 TYPE_WORM drive를 "쓰기가능"으로 바꾸었다; 제대로 웅직이게 하는 데 필요한 것인지는 확신하지는 못하지만. 사실 나는 모든 것을 "쓰기가능"으로 바꾸어 놓았다. (볼품없지만, 효과적이다!) <tscreen><verb> The original /usr/src/{linux-1.1.64/}linux/drivers/scsi/scsi.c (beginning around line 361) switch (type = scsi_result[0]) { case TYPE_TAPE : case TYPE_DISK : case TYPE_MOD : SDpnt->writeable = 1; break; case TYPE_WORM : case TYPE_ROM : SDpnt->writeable = 0; break; default : I changed it to: switch (type = scsi_result[0] & 0x1f) { case TYPE_TAPE : case TYPE_DISK : case TYPE_MOD : case TYPE_WORM : case TYPE_ROM : /* probably shouldn't be writeable :) */ SDpnt->writeable = 1; break; default : </verb></tscreen> <sect1><em/cdwrite/를 고친다. (내가 고친 것은 v1.3) <p> [tsx-11.mit.edu의 /pub/linux/BETA/cdrom/private/mkisofs/cdwrite-1.3.tar.gz를 가지고 있다.] line 439부터 original program은 다음과 갈은 code를 갖고 있었다. <tscreen><verb> set_timeout(fd, timeout); /* First make sure we know how to talk to this writer */ inquiry (fd, &ero;reply_len, &ero;reply, &ero;manufacturer[0], &ero;model[0]); if(strcmp(manufacturer,"PHILLIPS")) { </verb></tscreen> 나는 위에 다음 두줄을 첨가함으로써 program을 바꾸었다. <tscreen><verb> /* new #define from drivers/scsi/scsi.h; orig program had this defined */ #define SG_SET_TIMEOUT 0x2201 (Following code replaced orig. code around line 439) /* set_timeout(fd, timeout);*/ if (ioctl(fd, SG_SET_TIMEOUT, SG_SET_TIMEOUT, &ero;timeout) < 0) { perror ("ioctl SG_SET_TIMEOUT"); exit(5); } /* First make sure we know how to talk to this writer */ inquiry (fd, &ero;reply_len, &ero;reply, &ero;manufacturer[0], &ero;model[0]); if(strcmp(manufacturer,"IMS")) { </verb></tscreen> Philips CDD 521은 "IMS"를 manufacturer로 반환하고, 나는 원래 program이 했던 것처럼 timeout을 설정하도록 고쳤다. cdwrite package를 풀면, 원 program은 "orig" directory에 있다. <sect1>kernel을 다시 compile하고 reboot... <p> <bf><em>SCSI generic support</em></bf>를 가능하게 할 것. 그러하지 아니하면 generic driver는 kernel에 포함되지 않는다. 현재 수행되고 있는 kernel을 바꾸기 위해서는 reboot를 해야한다. <sect1>CD를 굽는다! <p> 예를 들어, <tt>"cdwrite /dev/sgb < /home/cd.image"</tt> sgb가 CD writer, 다시 말해 SCSI generic device b (hard drive가 generic device a이므로)이고, /home/cd.image는 <tt/mkisofs/로 만든 ISO9660 image이다. <sect>그리고... <p> 이로써 한 개의 CD를 굽기 위한 준비를 절차별로 설명하였다. 그 이후는 사소한 것이다. 당신의 disk에 충분한 공간이 있는지 확인하라. 그리고,<tt>"mkisofs -o filename path"</tt> (path는 ISO9660 format으로 copy할 directory를 지칭하고, filename은 출력 이진 file이다.)이라고 하면 된다. <tt/mkisofs/는 <bf>Rock Ridge extension</bf>같은 많은 option을 가지고 있다. Eric Youngdale이 동봉한 man page를 참조하도록. 그 다음은 <tt>"cdwrite scsi_device < cdrom_file"</tt> (scsi_device는 generic SCSI device이고, cdrom_file는 ISO9660 image file이다)라고 하라. <tt/cdwrite/는 역시 약간의 option을 - "-speed"(single/double speed로 써라), "-dummy"(disk없이 test하기위한) 와 같은 - 가지고 있다. <em><bf>cdwrite.c</bf></em>에 보면 option에 대한 설명이 있다. <sect>Thank you <p> 내가 지녔던 문제점을 해결하기 위한 제안을 해주신 여러분들게 감사합니다. <itemize> <item><tt/mkisofs/를 만드신 Eric Youngdale <item><tt/cdwrite/원본을 만드신 Adam Richter <item>SCSI generic problem에 대한 충고를 해주신 Joseph Julicher <item>1542 setting에 대해 설명해주신 Mike McKenna, 그리고, 산뜻한 장난감을 조사할 수 있도록 저를 고용해주신 경영자 여러분께 또한 감사드립니다. </itemize> </article>