저자: 임영규 / GNOME Linux Institute /
imlinux70@hanafos.com
1. 서론
최근 임베디드 리눅스와 관련하여 많은 상용 보드가 출시되고 교육이 진행되고 있다. 이러한 시점에서 임베디드 리눅스에 많이 사용되는 RTLinux를 i386기반의 PC에 설치하고 이를 기본으로 임베디드 리눅스 커널 생성에 대한 기본을 익힘을 목적으로 본 논문을 작성한다. 여기에서는 공개용 RTLinux를 다운받아 설치하여 사용하고, 예제를 실습해 볼 수 있는 기회를 제공해 준다.
2. 본론
임베디드 실습을 위해 RH9(RedHat Linux 9)과 펜티4, 512M 메모리를 기본으로 적용하여 RTLinux를 설치한다. 상당부분 RTLinux Installation HOWTo문서를 참고하였으며, 몇가지 대안에 대해서는 첨언하였다.
2.1 설치준비
RedHat9은 2.4.20-18커널을 사용한다. 그래서 부득이 2.4.20리눅스 커늘을 다운하여 RTLinux를 구현하고자 하였다. RT-Linux를 PC에 설치하기 위하여 리눅스 커널과 RT-Linux커널 패치 및 RT-LinuxFree를 다운로드 받는다. 참고문헌을 이용한다.
2.2 커널과 모듈 생성, 설치
/usr/src/linux로 설치한다. [그림 1]은 /usr/src 디렉토리의 내용을 보여준다.
[그림 1] /usr/src 디렉토리
# cd /usr/src
# tar xvf linux-2.4.20.tar.gz
기존에 linux링크가 존재하면 이것을 삭제한다.
# rm linux
그리고 linux 링크를 만든다. [그림 1]에 보면 약한 하늘색으로 표시되어 있다.
# ln -s linux-2.4.20 linux
# ls -al
링크가 만들어 진것이 확인되면, RTLinux 압축을 푼다.
# tar xjf rtlinux-3.2-pre2.tar.bz2
# ls
rtlinux-3.2-pre2라는 디렉토리가 만들어 질 것이다.
이제 커널 2.4.20에 RTLinux를 패치를 적용할 단계이다
# cd linux
# patch -p1 < ../rtlinux-3.2-pre2/patches/kernel_patch-2.4.20-rtl3.2-pre2
[그림 2] RTLinux 커널 피치 저장 Path
를 적용한다. 이제 커널을 컴파일 하면 된다. 커널 환경설정에 익숙하지 않는 경우, 레드햇에서 제공해 주는 configuration을 적용해 주면 된다. 방법은 다음과 같다
# cp /boot/config-2.4.20-8 .config
만약 커널 환경설정에 익숙하다면 자신만의 환경을 설정하면 된다.
# make mrproper
# make xconfig
여기에서 한 가지 수정할 내용이 있다. 자신의 PC에 맞는 CPU 타입을 설정해 주는 일인데, kernel Configuration에서 Processor and features를 눌러 processor family를 자신에게 맞는 CPU로 수정하는 일이다.
이것이 설정되고 나면 Mainmenu로 나와서 save and Exit를 한다. 그리고 안내 메세지와 같이 다음 명령을 수행한다.
# make dep
# make bzImage
이 과정이 정상적으로 수행되었다면 다음 파일이 생성될것이다.
# ls -al vmlinux
[그림 3] 커널 컴파일 완료
# make modules
# make modules_install
필요한 모듈을 생성하고, 모듈을 설치가 완료된다. 이것을 확인하기 위해서는 다음 명령으로 가능하다
# ls /lib/modules
디렉토리에 보면 2.4.20-rtl3.2-pre2라는 디렉토리가 생성되어 있을것이다. 이제 lilo (본인은 lilo를 사용함)를 재 설정하여야 한다.
[그림 4] 모듈 생성및 인스톨 완료
# cp arch/i386/boot/bzImage /boot/rtlinux
# df
명령을 실행하여 리눅스 / 가 하드 디스크 어느 파티션에 설치되어 있는지 확인하여야 한
다. 본인의 경우 5번째 파티션을 리눅스 /로 사용하기 때문에 /dev/hda5로 하였다.
[그림 5] 리눅스 / 확인
# vi /etc/lilo.conf
다음 줄을 포함한다.
image=/boot/rtlinux
label=RTLinux
read-only
/dev/hda5
# lilo
를 생성하여 새로 생성한 RTLinux로 부팅할 수 있게 한다. 이제 RTLinux 커널이 패치된 부트 이미지로 리부팅하여 RTLinux와 필요한 모듈을 생성하고 인스톨하여야 한다.
2.3 RTLinux, 모듈 생성과 설치
처음 로그인 할 때 보면 새로 생성된 RTLinux로 부팅되는 것을 메세지를 통해 알 수 있다. root로 로그인 하여 다음 명령을 실행하면 된다.
[그림 6] uname으로 확인한 RTLinux적용 리눅스 커널
# uname -a
이제 RTLinux를 생성할 차례이다. /usr/src/rtlinux-3.2-pre2로 이동한다.
# make menuconfig
를 실행하여 Save and Exit를 한다. 환경 설정은 기본으로 하였다.
# make dep
을 실행하면 에러가 발생하나, 무시한다. [그림 7]은 에러 메시지를 보여주고 있다.
[그림 7] RTLinux 생성과정시 make dep 에러
# make
를 실행하면 제일 마직막줄에 다음 명령을 실행하라는 메세지가 나온다. 이것은 모듈을 설치하는 스크립트이다. 이제 RTLinux를 설치할 차례이다. RTLinux는 /usr/rtlinux-3.2-pre2에 설치된다.
[그림 8] RTLinux모듈 생성완료
# make install
을 실행한다.
[그림 9] RTLinux Path
2.4 RTLinux의 기동과 실습
마지막으로 다음 명령을 이용하여 RTLinux가 정상적으로 동작하는지 확인한다. 이때는 RTLinux모듈을 확인하는 과정이다.
# make regression
[OK]라고 나오면 정상적으로 RTLinux가 설치된 것이다. 이로서 i386기반에서 RTLinux를 학습할 준비가 다 되었다. 이제 RTLinux를 실행시키고 예제 프로그램을 실행시켜 보면 된다.
# rtlinux start
를 실행하면 현재 로드된 모듈에는 + 기호가 나타난다. 반대로 RTLinux를 정지 시키기 위해서는
# rtlinux stop
그리고 현재 로드된 모듈을 확인하기 위해서는
# lsmod | grep rtl
또는
# rtlinux status
로 확인가능하다. 이제 예제를 실행해 보자. /usr/rtlinux-3.2-pre2/examples
로 이동하고, 다시 hello_mbuff로 이동하여
# ./user_shm
을 실행하면 결과를 보여 줄 것이다. 이 예제를 실행하기에 앞서 당연히 RTLinux가 로드되어 있어야 한다.
# rtlinux stop
을 실행하고 나서 다시 예제를 실행하면 에러가 발생할 것이다.
[그림 10] 예제 실행결과
3. 결론
이번 case study를 통하여 독자적으로 임베디드 리눅스에 접할 수 있는 방법을 얻을 수 있었다. 또한 다른 플렛폼에 적용하기 위해서는 임베디드 툴 체인을 사용하여 컴파일러만 변경해 준다면 쉽게 RTLinux를 생성할 수 있다. 또 경제적으로 부담이 되는 상황이라면 i386기반으로 RTLinux를 배울 수 있는 좋은 대안이 되리라 생각한다. 본 study에서 제외된 내용은 부트로더를 만드는 일인데, 이것은 RedHat이 제공하는 것을 사용하였다. 제시된 case를 이용하여, 좋은 응용프로그램을 개발하는 것에 대해서는 앞으로 여러분의 몫으로 남기고 싶다.
[참고문헌]
1. RTLinux Installation HOWTO
2.
www.kernel.org
3.
www.fsmlabs.com
4.
www.artemio.net