들어가기 전에

솔직히 앞의 문서에서는 파일 시스템을 직접 건드리지 않고 스크립트를 이용했지만, 그래도 setup 파일을 손수 복사해서 실행해줘야 하는 문제가 있었다. 그래서 이번에는 직접 파일 시스템을 수정해본다.
우선 다음과 같은 준비물이 필요하다. 알아서 잘들 구하길 ^^;

OS 와우리눅스 7.1
filesystem filesystem-2.1.0-T5-yp3500-kor.fsm

이것은 어디까지나 나의 경우다. 이제 본격적으로 파일 시스템을 수정해보자!

시작하기

우선 지메이트 http://gmate.co.kr 에서 최신버전의 커널과 파일시스템을 다운로드 받는다. 우리가 손볼 것은 파일 시스템이므로 시스템에 마운트하기 전에 알아두어야 할 것이다.

  1. 요피에서 사용하고 있는 파일시스템은 무엇인가?
  2. cramfs 파일시스템은 어떤 것인가?

우선 첫번째 답은 cramfs 라는 것이다. 우리가 흔히 사용하는 파일시스템 하면, ext2, ext3, reiserfs, xfs, jfs 등 이다. 각각의 파일시스템 마다 특징도 다르고 쓰이는 분야도 조금씩 다르다. 하지만 거의 대부분 대형 서버나 데스크탑에서 많이 사용되는 것들이다. 일반적인 임베디드 시스템에는 적합하지 않다는 얘기이다.
그래서 임베디드 시스템에서 사용되는 파일시스템이 몇몇 있는 데, 그 중에 하나가 바로 cramfs 이다.
그럼 두번째 답을 얘기할 차례이다. 특징은 다음과 같다.

  1. Compressed ROM File System
  2. Read only System

읽기 전용 파일 시스템이기 때문에, 롬에 저장할때 주로 쓰인다. 그렇기 때문에 하나 염두하고 있어야 하는 점은 나중에 마운트를 시켜서 바로 수정할 수 없다는 점이다. 설사, 마운트 옵션에 rw 를 주었다고 하더라도 말이다. 그럼 절대 수정할 수 없는가? 아니다. 방법은 있다.
우선 마운트를 하고, 마운트한 곳 안에 들어있는 모든 디렉토리와 파일들을 압축한다. 그리고는 언마운트를 하고 압축을 푼다. 왜 이런 방법을 사용하는 지 의문을 제기할 지도 모르겠다.
이유는 바로 /dev 디렉토리 때문이다. 나는 처음에 마운트한 디렉토리를 통째로 다른 디렉토리에 복사해서 수정하려고 했었다. 하지만, /dev 가 문제였다.
unix 에서는 각각의 주변장치들을 하나의 파일로 인식하고 사용한다. 디바이스 디렉토리인 /dev 만 유독 복사가 되지 않았다. 이 사실을 몰랐던 나는 몇번이나 커널패닉의 삽질을 경험하고 나서야 알게 되었다. 고심 끝에 생각해낸 것이 바로 압축하는 방법이다. 직접 한번 보는 것이 이해가 빠를 것같다.

#cd /
#mkdir yopy
#mount -t cramfs -o loop ./filesystem-2.1.0-T5-yp3500-kor.fsm /yopy         // 여기서 /mnt 는 임시 디렉토리이다.
#tar cvpf fat.tar /yopy
#umount /yopy
#tar xvpf fat.tar                 // 압축풀 경로를 지정해주지 않아도 자동으로 yopy 디렉토리에 풀릴 것이다.

이제 확인해보자!! /dev 디렉토리에 모두 잘(?) 있는지 말이다. ^^;
그리고 나서 yopy 디렉토리에 수정을 가한 다음, 그 디렉토리를 cramfs 형식으로 만들면 되는 것이다.

어떻게 무엇을 바꿀 것인가?

앞에서 했던 자동화 스크립트를 자동으로 실행할 수 있게 수정해보자.
이 부분에서도 할 얘기가 많다.

실패 경험과 해결책

#cd /yopy/
#vi cram/etc/rc.d/init.d/hr-rpminst

rpm 파일을 설치하는 부분 뒤에다가 다음을 추가해준다.

   start)
        RESET_TYPE=`cat /proc/sys/pm/reset`
        if [ "$RESET_TYPE" = "0" ] ; then
            /bin/boot_print "Installing NATE RPMs..."
            /usr/bin/hr-rpminst --init $BASE_RPM_DIR/*.rpm
            # fat81 edit start
            /bin/cp /flash/setup /root/
            /bin/sh /root/setup
            /bin/rm /root/setup
            # fat81 edit end
            if [ $? = "0" ] ; then
                sync
                /bin/boot_print "RPM Installation Success"
            else
                /bin/boot_print "RPM Installation FAIL:"$?
            fi

위와 같이 하면 될 줄 알고 있었다. 이것은 내 뜻대로 되지 않았다. 아직 정확한 이유를 알 순 없지만, 이것이 x windows 후에 실행이 되기 때문에 제대로 수행이 안되는 듯 보였다.
역시 고심 끝에 스크립트로는 힘들겠고, 서브 메뉴에 setup 항목을 넣어서 하드 리셋후에 실행할 수 있게 하기로 했다.

#vi /etc/rc.d/rc.local

자동으로 실행되는 rc.local 파일에다가 /flash/setup 파일을 PATH 가 걸려있는 /usr/local/bin 아래에 복사하는 명령을 넣는다.

#fat81 edit start
/bin/cp /flash/setup /usr/local/bin
#fat81 edit end

위와 같이 rc.local 파일의 수정을 끝냈으면, 이제 cramfs 형식으로 만들어 주어야 한다.

#mkcramfs /yopy/ yopy.fsm

해주면 된다. 처음은 만들 디렉토리 이고, 마지막은 만들어질 파일명이다.
그런데 위의 명령어가 없다면, 설치해주어야 한다. 젠투의 경우 'emerge cramfs' 해주면 된다. 제대로 만들어졌다면, yopy.fsm 파일이 있을 것이다. 이것을 올려주면 된다.

파일 시스템 올리기와 확인하기

이제 지금까지 만든 파일시스템을 직접 요피에 올려보자. 기본 제공되는 요피 OS 인스톨러로 커널과 파일시스템을 차례로 올려준 뒤에 하드리셋을 해보자!
그리고 내가 원하는 대로 작동하는지 지켜보자!
나의 경우, 내가 원하는 대로 동작하는 것을 확인할 수 있었다. 꼭 정답이 있는 건 아니다. 자기가 편한대로, 원하는 대로 설정하기 나름이다.

이제 하드리셋을 해도 문제가 없다. setup 만 실행하면 되기 때문이다. ^^;

사용후기

그 후 나는 몇번의 문제 때문에 방법을 고쳤다.
몇번의 수정 끝에 지금은 하드리셋이 되더라도, setup 만 실행해주면, 그전에 사용했던, 서브메뉴와 관련 프로그램들이 자동으로 설치된다. 또한 위키를 백업할 수 있는 메뉴를 따로 만들었다. 그래서 언제든지 복원이 가능하다.
반드시 정답은 없다. 자기가 편한대로, 필요한 대로 고쳐서 사용하면 되는 것이다. 그래서 요피의 가능성은 무한하다고 볼 수 있다.

  • computer/embedded/yopy_활용하기_-_4.파일시스템_뜯어_고치기.txt
  • Last modified: 3 years ago
  • by likewind