크로스 컴파일러 및 minicom 설치와 테스트
크로스 컴파일러 설치
PC의 리눅스에서 임베디드 리눅스에 심을 X86 프로세서 코드를 컴파일 하기 위해서 크로스 컴파일러를 설치해보려고 한다.
이번에 설치할 녀석은 arm-none-linux-gnueabi-4.3.2 이며 보드와 함께 굴러다니던 CD에 포함되어 있던 녀석이니 내가 갖고 있는 보드에서 심을 코드는 모두 컴파일 할 수 있을 것이다.
우선 압축파일을 복사해서 리눅스 /usr/local에 arm 폴더를 하나 만들고 옮기자.
다음은 옮겨진 파일의 압축을 풀고 (tar xvf arm-2008q3.tar.bz2) 다시 한 번 arm 폴더의 내용을 확인한다.
그리고 압축 파일 자체는 필요가 없으니 제거를 하자.
PATH 추가
다음은 /etc/bash.bashrc 파일에 아래 그림과 같이 컴파일러의 경로를 PATH에 추가해서 사용하기 편하게 만든다.
그리고 수정된 내용을 적용하기 위해서 source /etc/bash.bashrc 명령을 실행하고 제대로 설치가 됐겠지 하고...버전을 확인해보려고 [arm-linux-gcc -v] 하면 버전 정보가 출력되지 않는다.
"/usr/local/arm/arm-2008q3/bin/arm-linux-gcc: No such file or directory" 라면서 디렉토리나 파일이 없단다..ㅠㅠ 이럴때는 다음의 lib32ncurses5와 lib32z1을 설치해야한다.
이것들을 설치한 후 다시 한 번 버전 정보를 확인해보면 다음과 같이 버전이 확인된다.
크로스 컴파일러까지 설치를 했으니 지난 글에서 정리했던 NFS를 이용해서 테스트를 해보자.
전체적인 과정은 보드의 mnt 폴더를 PC의 nfsboot 폴더와 마운트 한 후 nfsboot에 만들어 놓은 프로그램을 가져와서 보드에서 실행을 해보는 것이다. 물론 nfsboot 폴더에 만들어질 프로그램은 오늘 설치한 arm-linux-gcc를 이용해서 컴파일 해야한다.
PC용 gcc로 컴파일 하면 컴퓨터에서만 실행이 되며 당연히 보드에서는 안된다. 반대로 arm-linux-gcc를 이용하면 PC에서는 실행되지 않고 보드에서만 실행이 된다.
그리고 nfs를 이용하기 위해서는 리눅스 방화벽을 꺼야 한다. 방화벽은 service iptables stop 해서 일시 정지 하거나 apt-get iptablies를 해서 제거 할 수도 있다.
먼저 PC와 보드를 이더넷으로 연결한 후 보드를 켜본다. 리눅스에는 보드의 상태를 모니터링 할 수 있는 프로그램인 minicom이 있는데 apt-get install minicom으로 설치를 하면 되고...
minicom 설치
나는 이미 설치가 되어 있다. 이제 [minicom -s]를 실행해서 아래와 같은 화면이 열리면 보드와 연결할 환경을 설정해준다.
먼저 키보드 방향키를 이용해서 Serial port setup로 이동한 후..
디바이스를 /dev/ttyUSB0으로 변경하고 115200 8N1로 세팅한 후 Hardware Flow Control과 Software Flow Control은 모두 NO로 변경한 후 엔터키를 누르고 Save setup as dfl로 저장하고 Exit 한다.
그러면 이렇게 보드의 화면이 나타나는데 여기서 앞 글에서 정리했던 NFS 연결을 해본다.
NFS 연결
먼저 df로 상태를 확인한 후 mount -t nfs -o nolock ipaddress(PC):/nfsboot /mnt 명령으로 NFS 연결을 하고 다시 한 번 df로 연결 상태를 확인한 후 mnt 폴더로 이동해서 컴퓨터의 nfsboot 폴더 안에 있는 파일의 내용을 확인한다.
저 파일은 Hello World를 출력하는 내용이고 hello world.c 파일을 arm-linux-gcc로 컴파일을 해서 a.out가 생성된 상태이다. 물론 이 과정은 컴퓨터의 리눅스에서 진행한 후 nfsboot 폴더에 파일들이 저장되어 있는 상태이며 nfs로 공유를 하고 있는 것이다.
이제 a.out 파일을 보드에서 실행해서 제대로 작동하는지 확인한 후 마무리 한다.
이렇게 해서 크로스 컴파일러를 설치하고 PC에서 임베디드용 파일을 컴파일 한 후 nfs로 두 기기를 연결해서 파일을 공유한 후 보드에서 파일을 실행시켜봤다.