부팅 디스켓 두장으로 작은 리눅스를 만드는 방법을 설명하고 있다. 참고 여기서 설명하는 내용들은 http://pain.kernel.pe.kr/sgml/boot-disk/index.html 를 참고했다.

들어가기 전에

몇가지 준비해야 할 것들이 있다. 준비물은 다음과 같다.

  1. 플로피 디스켓 2장
  2. 미지리눅스 2.0
  3. busybox(busybox-0.60.3.tar.gz)

총 2 개의 디스켓 중에서 하나는 커널과 부트로더를 넣을 것이고, 나머지 하나에는 루트(/) 파일시스템을 넣을 것이다. 미지리눅스의 경우, 커널과 부트로더를 위해서 필요하다. 2.0 의 경우 총 3장으로 되어 있지만, 여기서 필요한 것은 첫장 뿐이다.
먼저 커널과 부트로더를 만들어보겠다.

Floppy Disk 1 (부트로더 & 커널)

앞에서 준비한 미지리눅스를 마운트해서 보면, images 아래에 boot.img 파일이 있다. 그것을 복사해와서, 마운트한다.

#mkdir /tmp/boot_image
#mount -o loop boot.img /tmp/boot_image
#cd /tmp/boot_image
#ls -l
total 1411
-rw-r--r--    1 root     root       710804 12월 17 17:46 initrd.img
-rw-r--r--    1 root     root          406  8월 29  2001 menu.lst
-rw-r--r--    1 root     root          974  8월 29  2001 menu.lst.all
-rw-r--r--    1 root     root        14505  8월  3  2001 mizios.msg.gz
-rw-r--r--    1 root     root          512  8월  3  2001 stage1
-rw-r--r--    1 root     root       132736  8월  3  2001 stage2
-rw-r--r--    1 root     root       570980 11월  1  2001 vmlinuz
#          

여기서는 menu.lst, stage1, stage2를 제외하고 모두 삭제하도록 한다.

이름 설명
menu.lst GRUB 부트 로더의 config 파일로 커널이미지의 위치, root 디바이스의 위치 및 커널 파라메터 값을 셋팅할 수 있다(LILO로 치자면 lilo.conf 에 해당한다)
stage1 GRUB에 있어 필수적인 파일이며 부트 섹터나 MBR에 꼭 들어가야 하는 파일이다. PC의 부트 섹터가 512Byte 인것처럼 stage1 역시 512Byte의 사이즈를 가진다
stage2 GRUB 이미지 파일이다. GRUB에 관한 더 상세한 내용은 http://www.gnu.org/software/grub/ 참고하기 바란다

이제 커널이미지를 복사해줄 차례다. 플로피 디스켓 한장에 넣을 수 있는 크기여야 하기 때문에, 현재 설치되어 있는 vmlinuz 를 사용할 수는 없다. 가장 좋은 방법은 직접 커널 컴파일을 해서 용량을 줄이는 방법이다. 하지만, 여기서는 편의상 기존의 커널 이미지를 사용하도록 한다.
바로 부팅디스켓을 만들 때, 생성되는 커널 이미지를 사용할 것이다.
공 디스켓 한장을 드라이브에 넣고,

#/sbin/mkbootdisk --device /dev/fd0 현재커널버전

위의 명령을 실행한다. 그리고 나서 마운트해서 보면, vmlinuz 라는 파일이 생성되었을 것이다.

#cp vmlinuz /tmp/boot_image/

이제는 부트로더를 수정할 차례다. menu.lst 파일을 다음과 같이 수정한다.

timeout 10
color
default
 
title floppy-boot
root (fd0)
append = "devfs=mount"                  # 부팅시 devfs 사용을 위해
kernel /vmlinuz root=/dev/fd0 vga=0x307 # 커널이미지와 루트 디바이스의 위치및 해상도

위의 작업이 끝났으면, /tmp/boot_image을 언마운트 한다.

#umount /tmp/boot_image

앞에서 만든 boot.img 파일을 실제 플로피 디스켓에 쓴다.

#dd if=boot.img of=/dev/fd0    

Floppy Disk 2 (루트 파일시스템)

busybox 라고 하는 패키지를 사용해서 손쉽게(?) 루트(/) 파일시스템을 만들어 볼 것이다.
먼저 플로피 디스켓 한장 분량의 root.img 파일을 만들어보자!

#dd if=/dev/zero of=root.img bs=1024 count=1440   
#mke2fs -F root.img
#mkdir /tmp/root_image
#mount -o loop root.img /tmp/root_image

앞에서 준비한 busybox 의 압축을 풀고 컴파일을 해줄 차례다.

#tar xzf busybox-0.60.3.tar.gz
#cd busybox-0.60.3

컴파일을 하기전에 Makefile 에서 다음을 수정한다.

DOSTATIC = true

정적 라이브러리를 사용한다는 말인데, true 로 하면 바이너리 파일의 용량이 동적 라이브러리로 했을 때보다 더 커진다.
수정했으면 컴파일하고 설치한다.

#make
#make PREFIX=/tmp/root_image install

아래와 같은 디렉토리를 만든다. 이 중에서 /dev, /proc, /tmp는 어떤 파일도 포함하지 않는 단지 이름뿐인 디렉토리이다.

#ls -l
total 6
drwxr-xr-x    2 root     root         1024  6월 15 17:22 bin/
drwxr-xr-x    2 root     root         1024  6월 11 19:56 dev/
drwxr-xr-x    3 root     root         1024  6월 15 16:48 etc/
drwxr-xr-x    2 root     root         1024  6월 11 19:56 proc/
drwxr-xr-x    2 root     root         1024  6월 11 19:59 sbin/
drwxr-xr-x    2 root     root         1024  6월 12 18:23 tmp/

이것으로 끝이 아니다. 몇가지 파일들이 더 필요하다.

#ls -l 
total 2
-rw-r--r--    1 root     root          137  6월 11 20:00 fstab
drwxr-xr-x    2 root     root         1024  6월 15 17:13 init.d/
-rw-r--r--    1 root     root            0  5월  2  2001 mtab

위와 같이 만든다. 다음은 fstab 내용이며 mtab은 그냥 touch 명령으로 만들면 된다.

none            /proc           proc    defaults        0 0
none            /dev/pts        devpts  mode=0622       0 0
tmpfs           /dev/shm        tmpfs   defaults        0 0
/dev/fd0        /               ext2    defaults        1 1          

init.d 아래에는 rcS 라는 파일을 만들고 퍼미션은 실행권한을 붙여주자. busybox의 init에서 이 rcS을 실행하기 때문에 꼭 실행권한(755)이 있어야 한다. 파일의 내용은 아래와 같다.

#!/bin/sh
/bin/mount -a          
#exec /etc/rc.local     # 만약 실행시킬 스크립트가 있다면 exec 로
                        # 그 파일을 실행할 수 있다.

권한을 부여한다.

#chmod 755 rcS

모든 /dev 파일을 복사할 필요는 없고, 몇가지 파일만 있으면 된다.(console, fd0, pts, shm, tty0, tty1, tty2, tty3, tty4)
기존의 리눅스 시스템에서 복사하면 된다.

#cd /tmp/root_image
#cp -dpR /dev/console .
...
...
...

이제 언마운트하자.

#umount /tmp/root_image        

두번째 플로피 디스크를 넣고 방금 만든 루트 이미지를 쓴다.

#dd if=root.img of=/dev/fd0    

테스트 하기

이제 모든 작업이 끝났다. 앞서 만든 플로피를 넣고, 부팅한다. 여기서 플로피 부팅으로 바이오스에서 설정되어 있어야 한다. 커널부팅중에 'VFS: Insert root floppy and press ENTER' 메세지가 나오면, 두번째 디스켓을 넣고 엔터키를 누른다.
무사히 쉘 프롬프트가 떳다면 성공이다.

  • computer/os/디스켓_2장으로_리눅스_만들기.txt
  • Last modified: 4 years ago
  • by likewind