RedHat 기반 6.1이상의 배포판이라면 modutils만 업그레이드 하면 될것이다. (modutils를 업하는데 glibc버전이 낮다면 glibc도 업해야 한다. glibc는 로케일과 timezone, 여러 라이브러리를 포함해서 의존성 문제에 많은 영향을 끼치므로 업그레이드 하는데 주의를 필요로 한다. rpm 버전이 낮다면 rpm도 업해야 한다.) 2.4.0-test 커널을 사용하기위해서 다음 사항을 확인하라.
패키지 명 버전 확인방법 o Gnu C 2.7.2.3 # gcc --version o Gnu make 3.77 # make --version o binutils 2.9.1.0.22 # ld -v o util-linux 2.10o # kbdrate -v o modutils 2.3.13 # insmod -V o e2fsprogs 1.18 # /sbin/tune2fs --version o pcmcia-cs 3.1.19 # cardmgr -V o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1beta7 # isdnctrl 2>&1|grep version
$ cat /proc/cpuinfo 를 해보면 확인할 수 있다. Bogo(bogos : 가짜)이므로 신뢰할순 없지만 기분만은 좋지않은가?
만약 modutils 버전이 앞에서 명시한 버전보다 낮은데 모듈 컴파일을 한다면 에러가 난다. 꼭 modutils를 업 해야 모듈 컴파일을 할 수 있다. modutils를 업하면 예전의 /etc/conf.modules가 /etc/modules.conf로 바뀌고 USB 모듈도 자동로딩이 가능하며 많은 예약어를 지원한다. 다음 ftp 사이트에서 구할수 있다. ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils/v2.3/
커널 2.4.0-test6 이상의 버전부터 모듈들이 위치하는 '/lib/modules/커널버전' 의 디렉토리 구조가 더 세분화 되고 다음과 같은 형식으로 바뀌었다. 현재 필자의 디렉토리 구조이다. [kernel@suni00/lib/modules/2.4.0-test7]$ ls -l lrwxrwxrwx 1 root root 26 Sep 4 17:09 build -> /usr/src/linux-2.4.0-test7/ drwxr-xr-x 6 root root 1024 Sep 4 17:09 kernel/ -rw-r--r-- 1 root root 1340 Sep 5 20:33 modules.dep -rw-r--r-- 1 root root 3235 Sep 5 20:33 modules.pcimap drwxr-xr-x 2 root root 1024 Sep 4 17:09 pcmcia/ 위의 kernel 디렉토리에 들어가보면 다음과 같이 세분화 되어있다. [kernel@suni00/lib/modules/2.4.0-test7/kernel]$ ls -l drwxr-xr-x 3 root root 1024 Sep 4 17:09 arch/ drwxr-xr-x 8 root root 1024 Sep 4 17:10 drivers/ drwxr-xr-x 9 root root 1024 Sep 4 17:09 fs/ drwxr-xr-x 4 root root 1024 Sep 4 17:09 net/ drivers 디렉토리 구조를 보면 예전 모듈들의 디렉토리 구조가 여기로 옮겨 왔음을 알 수 있다. [kernel@suni00/lib/modules/2.4.0-test7/kernel/drivers]$ ls -l drwxr-xr-x 2 root root 1024 Sep 4 17:09 block/ drwxr-xr-x 3 root root 1024 Sep 4 17:09 char/ drwxr-xr-x 2 root root 1024 Sep 4 17:09 ide/ drwxr-xr-x 2 root root 1024 Sep 4 17:09 net/ drwxr-xr-x 2 root root 1024 Sep 4 17:09 sound/ drwxr-xr-x 2 root root 1024 Sep 4 17:10 video/
2^16은 65536이므로 사용자를 65536명 까지 만들수 있지만 커널 2.4에서는 2^32 즉 4294967296명을 만들수 있다.(시스템 콜의 변경도 필요로 하며 현실적으로 이렇게 많은 유저를 한 서버에 둔다는것은 무리이다.)
2.2.x 커널의 소스를 보면 include/linux/tasks.h에서 NR_TASKS의 개수가 512로 정의되어 있다. 512이상의 프로세스를 생성할 수 있도록 하려면 이 값을 고쳐 주어야 했는데 x86 machine에서는 GDT(Global Descriptor Table)의 제한때문에 4092까지 밖에 할 수 없도록 되어있었다. 2.4.0-test 버전에서는 task 자료구조가 동적으로 할당되어 NR_TASKS 값이 없어졌고 메모리의 한계만이 유일한 제약으로 따른다.
커널 2.3 개발버전을 처음 컴파일하고 부팅했을때 제일 처음 직면했던 문제인데 System V 공유메모리를 사용하지 못해서 부팅시 자동으로 뜨는 아파치 데몬이 뜨지 못하는 문제와 여러 프로그램을 실행했을때 공유메모리를 사용하지 못해 에러가 나는 문제가 발생했었다. 2.4-test 버전을 쓰기위해선 꼭 해줘야 하는 부분이다. # mkdir /var/shm # vi /etc/fstab none /var/shm shm defaults 0 0
menuconfig 옵션에서 Networking options ---> [*] Network packet filtering (replaces ipchains) 를 선택하고 IP: Netfilter Configuration ---> <M> ipchains (2.2-style) support 를 선택하면 커널 2.2.x 와 같은 방식으로 쓸 수 있다.
Magic SysRq key란 시스템의 제어가 불가능한 상태(일반적으로 '다운'되었다고한다.) 에서도 제어를 가능하게 해주므로 커널 컴파일시 Kernel hacking ---> [*] Magic SysRq key를 체크해주자. 2.4.0-test 개발 커널에서 Magic SysRq key를 사용할려면 다음과 같이 /proc/sys/kernel/sysrq 값을 1로 만들어야 한다. # echo 1 > /proc/sys/kernel/sysrq 키 조합 Alt+SysRq+R use Raw keyboard events Alt+SysRq+K kill current VT in use Alt+SysRq+E tErminate all running processes (except init) Alt+SysRq+I kIll all processes (except init) Alt+SysRq+L kilL all processes (including init) Alt+SysRq+B reBoot Alt+SysRq+S Sync all drives Alt+SysRq+U Umount all filesystems Alt+SysRq+O turn the machine Off Alt+SysRq+P dump Processor's registers Alt+SysRq+T dump current Tasks Alt+SysRq+M dump some Memory info Alt+SysRq+[0-9] set kernel log level and redirect it to console x86 머신에서는 Alt를 누른상태에서 Print Screen(Sys Rq)키를 누르고 각 알파벳키를 누르면 적용된다. 만약 시스템이 다운 되었다면 같은 다음과 순서의 조합으로 시스템에 손상을 주지않고 안전하게 재부팅 할 수 있을것이다. Alt+SysRq+S : 버퍼에있는 것들을 디스크로 sync(동기화)시킨다. Alt+SysRq+E : init 프로세스를 제외한 모든 프로세스를 종료시킨다. Alt+SysRq+U : 파일 시스템을 unmount 시킨다. Alt+SysRq+B : 시스템 재부팅
리눅스에서 윈도 파티션(vfat)을 마운트 했을때 한글이 '????'이런식으로 보이는 문제를 해결해 준다.
devfs란 /proc와 같은 가상 파일시스템으로 Richard Gooch에 의해 작업되었다. devfs를 사용할려면 다음과 같은 과정을 거쳐야하며 devfs를 쓰지 않아도 2.4.0-test 커널을 사용하는데 상관은 없다. devfs를 사용하고자 한다면 devfs는 메모리상에 존재하는 가상 파일시스템이므로 만약 /dev 에 특수한 목적의 디바이스 파일 또는 디렉토리를 생성했다면 재부팅시 /dev 디렉토리에 만들었던것이 사라질것이므로 재 작성해줘야 한다. 부팅할때마다 mknod 명령으로 필요한 디바이스를 다시 만드는것 보단 셸 스크립트를 작성하는것이 편리할 것이다. 예를들어 X-4.0이상의 NVdirver를 쓴다면 /dev 디렉토리에 nvidia0, nvidia1, nvidia2, nvidia3, nvidiactl과 같은 캐릭터 디바이스 파일이 만들어져 있어야 X를 띄울수 있으므로 부팅시 만들어질수 있도록 셸 스크립트를 작성한다면 약간의 수고를 덜 수 있을것이다. 다음과 같은 방법으로 devfs를 사용할 수 있다. 1. 커널 컴파일 옵션에서 다음 사항을 체크한다. Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers File systems ---> [*] /dev file system support (EXPERIMENTAL) [*] Automatically mount at boot [*] Debug devfs 2. devfsd 소스 파일을 구한다. http://www.atnf.csiro.au/~rgooch/linux/ 에서 devfsd-v1.3.10.tar.gz 이상의 버전을 다운 받아 다음 작업을 한다. # tar xvvzf devfsd-v1.3.10.tar.gz -> 적당한 디렉토리에 압축을 푼다. # make -> 컴파일해서 devfsd란 파일을 얻는다. # mv devfsd /sbin/ -> /sbin 디렉토리로 옮긴다. # cp modules.devfs /etc/ -> modules.devfs와 devfsd.conf를 # cp devfsd.conf /etc/ /etc 디렉토리로 옮긴다. 3. /etc/rc.d/rc.sysinit 스크립트에 다음 부분을 추가한다. # Mount /proc (done here so volume labels can work with fsck) action "Starting devfsd" /sbin/devfsd /dev <--- 이부분을 추가한다. action "Mounting proc filesystem" mount -n -t proc /proc /proc 4. /etc/securetty 파일을 다음과 같이 수정한다. 1 2 3 4 # tty1 이런식으로 되어있는것 모두 tty를 뺀 5 # 숫자부분만 남도록 해준다. 6 7 8 5. /etc/security/console.perms 에서 다음과 같이 바꿔준다. <console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] 을 주석처리하던지 삭제하고 <console>=tty[0-9][0-9]* [0-9][0-9]* :[0-9]\.[0-9] :[0-9] 으로 바꿔준다. 6. /etc/lilo.conf 에 다음을 추가 append = "devfs=mount" devfs를 쓰지 않겠다면 append = "devfs=nomount" 하면 된다.
일반적인 데스크탑 PC사양(1 CPU, No SCSI)에서 필요로 하는 커널옵션들을 설명하며 그다지 필요성이 없는 옵션들은 제외시켰다.
Code maturity level options --->
Loadable module support --->
Processor type and features --->
General setup --->
Plug and Play configuration --->
Block devices --->
Networking options --->
ATA/IDE/MFM/RLL support --->
Network device support --->
Character devices --->
File systems --->
Console drivers --->
Sound ---> 시스템에 맞는걸 선택한다
Kernel hacking --->
커널 컴파일을 할려면 어느정도 자신의 시스템에 관한 하드웨어적 지식이 있어야 한다. 그래픽 카드, 비디오 카드, 사운드 카드, 네트웍 카드등은 커널 컴파일시 각각에 맞는것을 선택하고 앞의 옵션을 참고한다면 무리없이 컴파일 가능할것이다.
MS-6119 Award Bios 버전이 2.9이상이 아니라면 메모리를 64MB 밖에 인식하지 못하는 문제가 있으므로 바이오스를 업데이트 하던지 /etc/lilo.conf에 append="mem=128M" 이렇게 추가해야 한다.