『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 361번 제 목:[커널] 모듈 컴파일이란? 왜? 어떻게? 올린이:geoman (이만용 ) 96/12/23 07:19 읽음:8954 관련자료 없음 ----------------------------------------------------------------------------- ============================================================================== 커널 모듈 컴파일이란? ============================================================================== 커널 2.0.0 이 출현하면서 커널 1.3.X 대에서 충분히 테스팅을 거친 커널 모듈 (module) 기능이 떠오르고 있습니다. 특히 프로그래머들에게 있어서는 커널 모듈 기 능은 수많은 리눅스 드라이버의 출현을 예고합니다. 앞으로의 추세도 더 이상 커널 을 무지막지하게 크게 만들 것이 아니라 "원할 때 원하는 부분만" 이라는 목표 아 래 진행될 것입니다. 커널 모듈 컴파일이라는 말을 들어본 적이 있는 분들에 대해서만 이 글은 의미를 가질 것입니다. 아직 리눅스 설치조차 마치지 못하셨다면 천천히 공부해나시면서 설치하십시요. 천천히! 남들과 달리 그 날 하루에 모든 것을 해결하셨다면 그 분은 그 만큼의 속도로 리눅스를 하드디스크에서 지우실 것 같네요. :) 모듈(module)이라는 말부터... ============================ 컴퓨터 용어들이 대부분 영어이고 그 영어단어가 갖는 함축적이고도 풍부한 내용을 직접 대신할 우리 말 단어가 마땅치 않을 때 프로그래머들이나 컴퓨터 기술자들은 그 즉시 "영어발음"으로 말해버립니다. 그것도 콩글리쉬로. :) 영어 발음은 진짜로 하자면 "마쥴" 정도 되겠지요? 모듈이라고 부르는 것을 비난하고자 하는 것은 아닙니다. 그렇게 밖에 사용할 수 없다는 것을 긍정하는 것입니다. 아직도 언제나 최신 기술을 영어문화권에서 배워와 야 하는 현실 속에서 module 이라는 단어를 어정쩡하게 한글부분으로 대치하느니 어 떻게 보면 그냥 영어로 남겨 둠으로써 영문 서적을 볼 때 도움이 될 수도 있으니까 요. 예를 들어 유닉스 셸(shell)을 "껍질"이라고 해석한다면... 후~ 뭐 함축적으로 그런 의미를 갖고 그런 기능을 갖기는 하지만 뭔가 부족한 것이 있지요. 영어 단어 뜻을 알고 시작하면 리눅스 생활이 편해지는 경우가 많습니다. 영어 단 어를 만나면 사전을 찾아주세요. 1. 단위 ( 유수( 흐르는 물 ) 측정하는 ), 2. ( 건 축 재료, 가구 제작 등의 ) 기준 치수, 기본 단위 3. (우주) 모듈( 우주 비행선 모 선(母船)에서 분리하여 특정한 기능을 수행하는 소선(小船)) 4. (전산 분야) 모듈 (독자적인 기능을 가진 교환 가능한 구성 요소) 가장 근접한 답은 바로 4 번 뜻입니다. 모듈이란.... - 그 자체 독자적인 기능을 수행하는 작은 부분 - 다른 부분과 교환 가능한 부분 커널 모듈(module)이란 바로 커널의 일부분으로서 독자적인 기능을 해내며 언제든 지 교환 가능한 부분을 말합니다. 따라서 모듈은 커널의 일부이며 일심동체라고 생각하시는 것이 좋습니다. 자기는 모듈을 사용하는데 모듈 컴파일을 제대로 못했다든지 한다면 그것은 아예 커널 컴파 일을 실패했다고 말씀드리고 싶습니다. 모듈은 부분이지만 아주 중요한 부분입니다. 앞으로 설명드릴 커널 모듈은 위에서 알아본 영어 단어 뜻 그대로 1. 그 자체 커널이 수행해야 할 독자적인 기능을 수행 하고 2. 교환 가능 또는 언제든지 추가/삭제가 가능한 부분을 말합니다. 모듈에 대해서 익숙해지자. ========================= 모듈에 대해서 익숙해지는 것부터 시작합니다. 요즘 배포판( 슬랙웨어96, 레드햇 4.0, 데비안 1.1 ~ 1.2 )을 설치하시면 대부분 모듈들이 들어있습니다. 그 위치는 다음과 같습니다. cd /lib/modules 그런 디렉토리가 없다구요? :( 모듈이 아예 하나도 없군요. 그 다음 여러분이 현재 사용하고 있는 커널 버전을 알고 계십니까? 모르신다면(?) uname -a 라고 명령해주십시요. Linux redyong 2.0.18 #1 Tue Oct 22 14:28:15 EDT 1996 i586 이런 메시지가 나올 겁니다. 흠... 2.0.18 이군요. cd 2.0.18 그러면 몇 개의 디렉토리가 또 보입니다. drwxr-xr-x 2 root root 1024 Dec 18 12:27 block drwxr-xr-x 2 root root 1024 Dec 18 12:27 cdrom drwxr-xr-x 2 root root 1024 Dec 18 12:27 fs drwxr-xr-x 2 root root 1024 Dec 18 12:27 ipv4 drwxr-xr-x 2 root root 1024 Dec 18 12:27 misc -rw-r--r-- 1 root root 3872 Dec 23 1996 modules.dep drwxr-xr-x 2 root root 1024 Dec 18 12:27 net drwxr-xr-x 2 root root 1024 Dec 18 12:30 pcmcia drwxr-xr-x 2 root root 1024 Dec 18 12:27 scsi 그 중 한 디렉토리를 방문해볼까요? cd misc ls -l -rw-r--r-- 1 root root 21810 Sep 10 23:42 appletalk.o -rw-r--r-- 1 root root 25480 Sep 10 23:29 cyclades.o -rw-r--r-- 1 root root 128915 Sep 10 23:31 ftape.o -rw-r--r-- 1 root root 21808 Sep 10 23:39 icn.o -rw-r--r-- 1 root root 20141 Sep 10 23:41 ipx.o -rw-r--r-- 1 root root 76554 Sep 10 23:39 isdn.o -rw-r--r-- 1 root root 8576 Sep 10 23:29 lp.o -rw-r--r-- 1 root root 31638 Sep 10 23:39 pcbit.o -rw-r--r-- 1 root root 29680 Sep 10 23:29 riscom8.o -rw-r--r-- 1 root root 82867 Sep 10 23:39 tles.o <화일명>.o 이렇게 되어 있는 것들이 모두 커널 모듈이라고 부르는 것입니다. 가장 많이 쓰이는 것 중 하나가 바로 lp.o 인데 "페러렐 프린터 지원"기능을 담당 하는 모듈입니다. 모듈은 왜 필요한가? =================== 필요는 발명의 어머니, 또는 아쉬움은 해킹의 어머니, 호기심은 해킹의 어머니! 모듈 기능은 필요하기도 하고 재미있기도 하기 때문에 개발되었다고 생각합니다. 상황 1) ------------------------------------------------------------------------------ 나는 돈이 너무 많다. 그래서 컴퓨터의 주변기기를 장난이 아니게 많이 구입하였고 그 주변기기에 대한 커널 지원을 모두 포함해보니 커널이 주체할 수 없을 정도로 커 져버리고 make zImage 라고 하면 커널이 너무 커서 만들 수 없다는 메세지를 내놓 는다. --> 과연 이런 분들이 계실런지는 모르겠으나( 특수분야 종사자 빼고 ) 그런 상황 에서는 make zImage 가 아니라 make bzImage 라고 명령하여 커널을 만드셔야 합니다. 근데 문제는 보통은 이렇습니다. 그 많은 주변기기가 달려있기는 하나 그것을 동 시에 사용하는 경우란 아주 드물죠. 예를 들어 가장 간단하게 페러렐 프린터 기능을 들어봅시다. 컴퓨터를 켜고 나서 컴퓨터가 켜져 있는 동안 계속 프린터를 사용하지 는 않을 겁니다. 그러함에도 불구하고 우리는 하루 중 몇 분의 프린터 사용을 위해 커널 컴파일 시 페러렐 프린터 기능을 커널 안에 넣어주어야 합니다. -_- 그 많은 주변기기에 대해서 거의 모두 그렇다고 할 수 있겠지요? 동시에 사용하거 나 컴퓨터가 켜져 있는 매순간 사용하는 것이 아닙니다. 어쩌다 한 번 사용하는 경 우에라도 그 한 번의 사용을 위해 우리는 심지어 커널 컴파일을 다시 해주어야 할 때도 있습니다. 상황 2) ------------------------------------------------------------------------------ 나는 오늘 페러렐 포트를 이용하는 주변기기 ZIP 드라이브를 구입하였다. 그런데 모두들 그렇겠지만 나는 페러렐 포트가 하나 뿐이다. 따라서 프린터와 동시에 사용 할 수 없다는 것은 안다. 하지만 커널에서 프린터 지원을 넣는 순간 나는 ZIP 드라 이브를 사용할 수 없으며 그렇다고 ZIP 드라이브 기능을 커널에 넣으면 프린터를 사용할 수 없다! 컴퓨터를 2 개 사야한단 말인가? :( 그 멍청하다는 도그/윈도그95 에서도 되는데... 리눅스 이럴 수가 있는가? ---> 어떤 기능을 고정해둔다는 것은 항상 저런 동적인 상황에서 문제를 일으키기 마련이죠. 예전의 "정적인" 커널 기술에 비하여 최근의 "동적인" 커널 모듈 기술을 통하여 이 문제를 해결할 수 있습니다. 같은 장치를 사용하는 두 기능을 각각 커널 이미지(zImage, vmlinuz)에 넣지 않고 모듈(*.o)로 컴파일한다. 그리고 나서 프린터 를 사용할 때는 프린터 모듈을 띄우고 ZIP 드라이브를 사용할 때는 프린터 모듈을 빼낸 뒤 ZIP 드라이블 모듈을 띄웁니다! 그리고 행복하게 리눅스를 사용하면 됩니다. 상황 3) ----------------------------------------------------------------------------- 나는 이더넷 어댑터를 하나 가지고 있다. 그런데 이 놈이 좀 유별나서 보통의 주 소를 사용하는 것 같지 않다. 그래서 리눅스 부팅시 제대로 주소를 자동으로 찾지 못하여 LILO: 프롬프트에서 주소 옵션을 적어주어야 한다. 결국 그 많은 주소를 다 입력할 때마다 다시 부팅해야 하는가? 몇 번의 리부팅 후 겨우 찾아내었다. 매번 이래야 하는가? 그리고 앞으로 SCSI 어댑터 하나를 추가로 구입할 것인데 내 486 에서 커널 컴파일을 다시 한다면 그건 악몽이다... ---> 원하는 기능을 모듈로 설정하여 만들어두면 부팅한 후에 언제든지 특수한 명 령을 이용하여 모듈을 메모리에 올려놓을 수도 있고 빼낼 수도 있답니다. 모듈을 메모리에 올려놓을 때 리눅스에서는 특수한 정보, 예를 들어 어댑터의 주소, IRQ 등을 옵션으로 줄 수 있습니다. 따라서! 옵션을 잘못 주었을 때는 모듈 적재에 실패 할테고 그럴 때는 모듈을 빼내고 다른 옵션을 주어서 실행해보면 됩니다. SCSI 어댑터를 하나 사면 커널 소스 디렉토리에 가서 원하는 모듈만 컴파일하면 그 만이죠! 모듈을 사용해봅시다. ==================== 위에서 사용자의 관점에서 어느 정도 모듈이 왜 필요한지 이해하실 수 있으리라 봅니다. 필요성을 느끼셨다면 아니면 재미를 느끼셨다면 지금부터 읽어보시면 됩니 다. 1) 커널 모듈 만들기 ------------------- 어떤 특수한 기능을 모듈로 설정할 것인지 아니면 전통적인 방식으로 직접 커널 이 미지 본체에 집어넣어버릴 것인지에 대해서는 커널 컴파일 과정에서 결정할 수 있습 니다. 커널 컴파일 설정 인터페이스는 3 가지가 있습니다. make config make menuconfig make xconfig 두번째 것은 ncurses 라이브러리가 제대로 설치되어 있어야 하며 세번째 것은 X 윈 도우를 띄워서 실행하는 것은 물론이고 Tcl/Tk 라이브러리가 설치되어 있어야 합니 다. * * Loadable module support * Enable loadable module support (CONFIG_MODULES) [Y/n/?] Set version information on all symbols for modules (CONFIG_MODVERSIONS)[Y/n/?] Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?] 모듈 지원에는 당연히 Y 라고 답해야 합니다! 사소한 실수로 하루 밤을 망치지는 말자구요. 두번째 모듈 심볼에 대한 버전 정보를 사용할 것인지에 대해서는 약간의 추가 설명이 필요하겠네요. 커널 컴파일 설명에서는 N 를 권장하지만 일단 저는 Y를 권장합니다. 세번째 아주 중요한 커널 데몬(kerneld)에 대한 기능 지원 여부를 묻는 질문에 대해서도 일단은 Y 라고 해주십시요. 나중에 설명합니다. * * SCSI support type (disk, tape, CD-ROM) * SCSI disk support (CONFIG_BLK_DEV_SD) [Y/m/n/?] SCSI tape support (CONFIG_CHR_DEV_ST) [M/n/y/?] SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [Y/m/n/?] SCSI generic support (CONFIG_CHR_DEV_SG) [M/n/y/?] 모든 기능을 모듈로 설정할 수 있는 것은 아닙니다. 모듈로 설정할 수 있는 부분에 대해서는 Y/N 식의 답변에 M 이라는 항목이 추가되어 있습니다. 현재 거의 모든 기 능이 모듈로 지원되고 있으며 더욱 확대될 것이라고 봅니다. 중요한 것으로는 SCSI 컨트롤러, 이더넷 어댑터, PPP/SLIP/PLIP, 사운드 기능 등이 있습니다. 원하는 기능에 M 이라고 설정하십시요. 여기서는 같은 페러렐 포트를 사용하는 ZIP 드라이브, 프린터, PLIP 을 예로 들겠 습니다. IOMEGA Parallel Port ZIP drive SCSI support (CONFIG_SCSI_PPA) [M/n/y/?] M ... PLIP (parallel port) support (CONFIG_PLIP) [M/n/y/?] M ... Parallel printer support (CONFIG_PRINTER) [M/n/y/?] M 이 3 가지를 모두 모듈로 설정하였습니다. 2) 커널 모듈 컴파일 ------------------- 정상적인 커널 이미지는 make zImage 또는 리로 사용자의 경우 간단하게 하기 위 해 make zlilo 라고 해줍니다. 그리고 나서! 꼭 다음 과정을 거쳐야 합니다. make modules make modules_install 한 글자도 틀리지 마시고 s 자도 빼지 마십시요. 지금 여러분이 커널 2.0.18 로 부팅하셨고 새롭게 6 메가가 넘는 2.0.27 커널 소 스를 풀로 받아서( 패치가 아니라! ) 컴파일하면 다음과 같은 디렉토리가 자동으로 생성됩니다. /lib/modules/2.0.27 그리고 위에서 설명한 대로 하부 디렉토리에 범주별로 커널 모듈이 만들어져 있을 겁니다. <주의> 같은 커널을 가지고 모듈로 했다가 안했다 이런 식으로 자꾸 변덕을 부리시다 보 면 부팅 시 좀 지저분해 보이는 메시지가 나타납니다. Unresolved ... 그럴 때는 cd /lib/modules 하신 후 rm -rf 2.0.27 하십시요. 그리고 나서 모듈만 다시 컴파일, 설치하시기 바랍니다. 4) 모듈 사용하기 ---------------- 모듈을 사용하기 위해서는 모듈 유틸리티가 있어야 합니다. 지금 당장 사용할 모 듈 유틸리티는 최신 배포판에 모두 들어있습니다. 따라서 특수한 경우가 아니고서는 걱정하실 필요가 전혀 없습니다. insmod rmmod lsmod 이 3 가지 명령을 가지고 있어야 합니다. 보통 /sbin 디렉토리에 들어있습니다. 자, 프린터 기능을 사용해봅시다. cd /lib/modules/2.0.27 cd misc insmod lp 또는 insmod lp.o insmod 는 insert + module 이라는 의미이겠지요? 원하는 모듈을 적재합니다. 앞으로 이 저급한 명령을 사용할 일은 별로 없을 겁니다. 하지만 기본이므로 정확 히 알아두셔야 합니다. lp.o 라고까지 써주실 필요는 없습니다. 자, 지금 동적으로 메모리에 올라가 있는 모듈 기능은 무엇인지 알아봅시다. lsmod Module: #pages: Used by: lp 2 0 vfat 3 1 (autoclean) 이미 모듈이 2 개씩이나 떠 있군요. 맨 첫 줄 lp 라는 모듈이 들어가 있는 것을 확 인하실 수 있을 겁니다. 이제 프린터를 사용하십시요. 프린터 사용을 모두 마치셨습니까? 그러면 이제는 모듈을 빼냅시다. rmmod lp rm + module 이라는 의미이겠지요? 모듈을 빼내기 위해 모듈이 있는 디렉토리까지 갈 필요는 없습니다. 현재 커널이 간직하고 있는 모듈 테이블을 보고 지우니까요. Module: #pages: Used by: vfat 3 1 (autoclean) lp 라는 모듈이 빠져있습니다. 이번에는 2 대의 컴퓨터를 PLIP 이라는 방식으로 잇고자 합니다. 페러렐 라인을 통한 TCP/IP 연결을 만들어내는 녀석이므로 프린터 기능과는 충돌합니다. cd /lib/module/2.0.27 cd net insmod plip 또는 insmod plip.o 이제 9 번란에 제가 약간 소개해드린 방법으로 PLIP 연결을 해보십시요. lsmod Module: #pages: Used by: plip 3 0 vfat 3 1 (autoclean) 기능을 다 사용하면 rmmod 해주시는 것 잊지 마시길... ZIP 드라이브 사용법은 9 번란을 참고하시기 바랍니다. 5) 이렇게 불편하게 사용해야 하는가? ----------------------------------- 그럴 리 있겠습니까? 윈도그95가 다운 당하는 것을 막을 길 없으니 다운 안당하게 하기 위하여 조심스럽게 사용하거나 또는 모든 제품을 M$ 제품으로 사라고 강요하지 만 리눅서들은 그렇지 않습니다. 불편하면 편하게 만들면 그만이지요. 새롭게 사용할 명령은 depmod 와 modprobe 입니다. depmod modprobe 지금 당장 depmod -a 라고 실행해보십시요. 그리고 나면 모듈이 들어있는 디렉토리로 가서 insmod lp 또는 insmod plip 이라고 하실 필요없이 어디에서든 다음과 같이만 하시면 됩니다. modprobe lp modprobe plip 앞으로는 거의 modprobe 라는 것만을 사용하실 것 같군요. :) 6) 이것도 귀찮다! 자동으로 해줄 수는 없는가? -------------------------------------------- 일일이 어떤 모듈을 올려줄 지 내 스스로 해준다는 것은 정말로 짜증나는 일이다! 커널이 자동으로 해줄 수는 없을까? :( --> 타이핑이 싫은 분이신가 봅니다. :) 예. 물론 있습니다. 하지만 100 % 완벽하지는 않답니다. 그것만 유의하시기 바랍니 다. 능력이 안되서 100 % 안되는 것이 아니라 약간의 기술적인 문제가 있기 마련이 기 때문입니다. 앞에서 커널 컴파일할 때 커널 데몬(kerneld) 지원에서 Y 라고 답하셨습니까? 그러면 지금 당장 다음과 같이 실행하십시요. kerneld 이렇게 해놓고 나면 프린터 사용시 자동으로 커널 데몬이 알아서 lp 모듈을 적재 해줍니다. 프린터 사용시 lsmod 명령을 사용해보시면 알 수 있습니다. Module: #pages: Used by: plip 3 0 vfat 3 1 (autoclean) 위 테이블에서 vfat 이라는 모듈은 윈도그95의 엉터리 화일시스템 VFAT 지원 모듈 입니다. plip 모듈과는 달리 맨 끝에 (autoclean)이라는 표시가 붙어있습니다. 바로 커널 데몬에 의해 자동으로 띄워졌다는 것을 의미합니다. 자동으로 띄워진 만큼 vfat 을 사용하지 않을 때는 일정 시간이 지난 뒤 모듈이 빠 져나갑니다. 따라서 잘만 사용하면 여러분이 일일이 어떤 모듈을 올려줄 것인지 결 정할 필요없이 잠시 기다린 뒤 원하는 기능을 사용하시면 됩니다. 그러면 자동으로 커널 데몬이 알아서 해줍니다. 주의하실 것은 커널 데몬을 사용하시기 전에는 꼭 depmod -a 라고 명령해주셔야 한다는 사실입니다. depmod 명령은 모듈 간의 의존성 검사를 똑똑하게 해주어서 modprobe나 kerneld 기능을 사용할 수 있는 정보를 만들어주는 역할을 합니다. 7) 매번 depmod -a, kerneld 를 띄우는 것도 귀찮다? ------------------------------------------------- 게으름은 발명의 어머니가 될 수 없으나 게을러 지려는 노력은 발명의 어머니가 될 수 있는 것 같습니다. 전세계 리눅서들은 자기 손가락의 건강을 위해서 오늘도 많은 노력을 하고 있을 겁니다. :) 시스템 부팅 시 딱 한 번 실행하면 되는 명령이므로 초기화 스크립트에 넣어주십시 요. 슬랙웨어 -------- 저는 그냥 /etc/rc.d/rc.local 이라는 사용자 정의 스크립트에 넣어서 사용하고 있습니다. rc.local 스크립트 맨 앞부분에 다음과 같은 줄을 넣어줍니다. # Update kernel-module dependencies file [ -x /sbin/depmod ] && { /sbin/depmod -a } # Start kerneld [ -x /sbin/kerneld ] && { /sbin/kerneld } 대부분 아무런 이상이 없지만 한 가지 주의하실 것이 있습니다. 여러분은 재미로 아무렇게나 중요한 기능을 모듈로 설정하셔서는 안된다는 겁니다. 특히나 화일 시스템에서 ext2 기능이나 시스템 초기화에 사용되는 SysV 초기화 기능 같은 것은 너무도 중요하기 때문에 모듈로 설정하지 마십시요. 그리고 ELF 바이너리 지원 같은 것도 마찬가지입니다. 그것을 모듈로 하셨다가는 크나큰 재앙을 맛보시 게 될 겁니다. 정말로 주의하십시요. 그리고 위에서 depmod, kerneld 의 실행 순간은 되도록 SysV 초기화 스크립트의 초 기에 넣어주십시요. 슬랙웨어라면 rc.S 의 거의 전반부에 넣어주시는 것도 안전할 듯 합니다. 예를 들어 VFAT 기능을 모듈로 설정하였는데 초기화 과정 중 VFAT 마운트 하는 곳이 있다고 칩시다. mount 명령을 수행하기에 앞서 depmod, kerneld 를 수행 하십시요. 그렇게 하지 않으시면 원하는 결과를 얻을 수 없을 겁니다. 레드햇, 데비안 -------------- 이미 초기화 스크립트에 다 들어있을 겁니다. 데비안을 확인해보지 못했으나 그런 것 정도 없겠습니까? 모듈 고급 사용법 ================ 1) 옵션 주기 ------------ 모듈을 로딩할 때 여러분은 추가옵션을 줄 수 있는 경우가 있습니다. 저는 현재 사운드 블래스터 16 VE 와 AT 버스 방식의 2 배속 시디롬 드라이브를 가지고 있습니 다. sbpcd 라는 모듈이 바로 2 배속 시디롬 드라이브에 대한 지원 모듈입니다. 저는 다음과 같이 실행합니다. modprobe sbpcd sbpcd=0x230,SoundBlaster 각 모듈마다 옵션 주는 방법이 천차만별입니다. 물론 일관성이 없는 것은 아니죠. 자신이 사용하는 모듈의 옵션 주기 방법은 일단 모듈 HOWTO 문서 번역본을 번역란 에서 읽어보신 후 뒤에 옵션 표는 영문 HOWTO 를 참고하십시요. 이 기회에 모듈 HOWTO 도 완역되어 나오길 바랍니다. 2) 나는 커널데몬을 사용한다! 그런데 커널 데몬에게는 어떻게 옵션을 알려주는가? ----------------------------------------------------------------------------- 저도 잘은 모르는 부분입니다. 하지만 다음과 같이 해주시면 됩니다. /etc/conf.modules 또는 /etc/modules.conf 라는 화일을 만들어줍니다. 그 내용은 보통 다음과 같습니다. alias scsi_hostadapter aha1542 # SCSI 어댑터 설정 alias eth0 3c509 # 이더넷 설정 # 옵션을 줍니다. options 3c509 io=0x300 irq=10 options sbpcd sbpcd=0x230,SoundBlaster post-install ppp modprobe bsdcomp alias 기능은 위와 같습니다. scsi_hostadapter 를 원할 때는 aha1542 모듈을 이 용하라고 말하는 것입니다. eth0 즉 이더넷 어댑터 첫번째 인터페이스에 대해서는 3c509 즉 3Com 것을 사용하라고 말합니다. 명령행애서 주는 옵션은 위에서 options 라는 줄에 써줄 수 있습니다. 마지막으로 pre-install, post-install 이라는 항목은 어떤 모듈을 로딩하기 전 또는 후에 어떤 특수한 행동이 요구될 때 사용됩니다. 제 경우에는 ppp 모듈을 로 딩한 후에 bsdcomp 라는 모듈을 로딩하도록 modprobe bsdcomp 라고 적어주었습니 다. pre-install 이 매우 중요합니다. 예를 들어 프린터 지원과 PLIP 지원처럼 서로 배타적인 경우에는 pre-install 문장을 통해 상대방을 미리 뽑아낸 후 모듈 이 올라가야 하기 때문이죠. 글을 마치며 =========== 커널 모듈 기능으로 인해 여러분이 레드햇 4.0 이나 데비안 1.1 ~ 1.2 에서 볼 수 있는 훌륭한 설치 과정이 가능하게 되었습니다. 전에는 슬랙웨어에서 어떤 부트 이미지를 선택할 것인지 고심해야 했지만 지금은 설치 도중에 자동으로 원하는 기 능을 불러서 쓰기 때문에 부트/루트 이미지고 뭐고 고를 필요도 없습니다. 레드햇 설치의 경우 많아야 2 장, 데비안 설치는 좀 독특한 방식을 쓰기 때문에 5~6 장이 디스켓을 선택없이 만들어주기만 하면 됩니다. 커널 모듈 기술은 리눅스 커널의 엄청난 발전을 의미합니다. 표준 커널 부분이 아니라 할 지라도 많은 프로그래머들이 리눅스 커널용 모듈을 자체적으로 만들어 서 제공할 수 있게 되었습니다. 이제는 사운드 카드 제조업체 등에서 리눅스 전 용 드라이버를 모듈로 만들어서 배포할 수 있게 되겠지요?( 근데 소스로 배포할 까요? 아니면 그냥 *.o 로 만들어서? 윽~ ) 저는 NT 파티션을 읽는 커널 외부 모듈을 사용해본 적이 있는데 정말 그럴 듯 하 더군요. 그리고 도스 에뮬의 경우에도 모듈을 사용합니다. 이제는 커널에 표준적 으로 배포되지 않은 모듈도 사용가능합니다. 앞으로도 언제나 왕성한 속도로 리눅스가 발전하기를 바라면서... [출처] 커널 모듈 컴파일이란?|작성자 serverbin