■ 부트로더(u-boot.bin)
부트로더의 주 임무는 커널이 동작할 수 있는 환경을 구성하고 커널을 시작하는 것입니다. 타겟보드에 부트로더가 없다면 Jflash를 사용하여 부트로더를 보드에 올려야 됩니다. 만약 부트로더가 존재 한다면Jflash를 사용하지 않아도 됩니다. 있는지 없는지는 부팅 했을 때 응답이 없다면 부트로더가 없는 것 입니다.
있다면 이 과정은 생략해도 됩니다.
CD파일이 있는 곳으로 이동합니다.
================================================================================================
[root@localhost]# cd /MV2440
[root@localhost MV2440]# cd source/Linux/mv2440_v2/240_320
================================================================================================
압축을 풉니다.
================================================================================================
[root@localhost 240_320]# tar xvf mv2440_uboot_dev.tar.gz
================================================================================================
풀린 경로로 이동을 한다.
================================================================================================
[root@localhost 240_320]# cd mv2440_uboot_dev
================================================================================================
/tftpboot 경로에 u-boot.bin 파일을 복사합니다. 리스트에 보면‘u-boot.bin’파일이 있습니다.
================================================================================================
[root@localhost mv2440_uboot_dev]# cp u-boot.bin /tftpboot
================================================================================================
• 부트로더 올리기
================================================================================================
[root@localhost MV2440]# minicom
================================================================================================
방법 1.
JFlash(JTage 케이블) 이용해서 부트로더 올리기(타겟보드에 부트로더(u-boot.bin)가 없을 때)
이 작업을 하기 위해서는 JTage 케이블이 필요합니다.(LAN선은 빼도 됩니다.)
Jflash 파일을 압축을 풀어 /tftpboot 경로로 복사합니다.
================================================================================================
[root@localhost MV2440]# cd tools/util/
================================================================================================
‘sjf2440.tar.gz’를 압축 풉니다.
================================================================================================
[root@localhost util]# tar xvf sjf2440.tar.gz
================================================================================================
압축을 풀고 압축을 푼 경로로 이동합니다.
================================================================================================
[root@localhost util]# cd sjf2440
[root@localhost sjf2440]# cp sjf2440 /tftpboot
================================================================================================
위 그림에서 sjf2440이 Jflash 입니다. 그 다음에 tftpboot 경로로 이동합니다.
================================================================================================
[root@localhost sjf2440]# cd /tftpboot
[root@localhost tftpboot]# ./sjf2440 u-boot.bin /t=5 (t=5옵션은 플래쉬 타입, --help명령으로 확인)
================================================================================================
위 명령을 하면 선택을 3번하게 되어있습니다. 순차적으로 아래와 같이 선택을 합니다.
================================================================================================
[root@localhost tftpboot]# 0
[root@localhost tftpboot]# 0
[root@localhost tftpboot]# 2
================================================================================================
방법 2.
이 방법은 원래 부트로더가 존재하고 있을 때 다시 올리는 방법으로, tftp를 이용해서 보드에 부트로더 전송을 하게 됩니다.
================================================================================================
[root@localhost MV2440]# minicom
MV2440 # tftp 30000000 u-boot.bin
MV2440 # nandw 0 20000 30000000
================================================================================================
■ 부트로더, ip설정
먼저 minicom을 실행합니다.
================================================================================================
[root@localhost tftpboot]# minicom
================================================================================================
‘Hit any key to stop autoboot: 1’ 글귀가 보이면 아무키나 누릅니다.
그리고 minicom 설정을 하는데 먼저, Environment의 설정을 확인합니다.
================================================================================================
MV2440 # printenv
================================================================================================
이렇게 치게 되면, 밑에 그림처럼 나오게 됩니다.
설명을 하자면,
================================================================================================
ipaddr = 220.64.218.92 //타겟보드 주소
serverip = 220.64.218.202 //데스크탑 주소
gatewayip = 220.64.218.1 //게이트웨이 주소
================================================================================================
이 주소들을 설정하기 위해서는 명령어 setenv를 사용하여 수정을 합니다.
================================================================================================
MV2440 # setenv ipaddr 220.64.218.97 //타겟보드 주소 변경
MV2440 # setenv serverip 220.64.218.215 //데스크탑 주소 변경
MV2440 # setenv gatewayip 220.64.218.1 //게이트웨이 주소 변경
================================================================================================
다 했다면 설정을 저장해야 합니다. 만약에 저장을 하지 않으면, 수정이 되지 않습니다.
저장은 saveenv로 저장을 하면 됩니다.
================================================================================================
MV2440 # saveenv
================================================================================================
■ zImage 만들기
커널소스 압축을 풉니다.
================================================================================================
[root@localhost]# cd /MV2440
[root@localhost MV2440]# cd source/Linux/mv2440_v2/240_320
[root@localhost 240_320]# tar xvf mv2440_kernel2.4.20_r1.1.tar.gz
[root@localhost 240_320]# cd mv2440_kernel2.4.20_r1.1
================================================================================================
‘mv2440_kernel2.4.20_r1.1.tar.gz’을 압축을 풉니다. 풀었다면 ‘mv2440_kernel2.4.20_r1.1’ 경로가 생성됩니다. 여기서부터 순서가
----------------------
menuconfig 셋팅
의존성 검사
커널을 이미지 만들기
----------------------
순서로 작업을 합니다.
• menuconfig 셋팅
mv2440_kernel2.4.20_r1.1/ 경로로 이동합니다. 이동을 하여 make menuconfig라는 명령어를 칩니다.
================================================================================================
[root@localhost mv2440_kernel2.4.20_r1.1]# make menuconfig
================================================================================================
위 그림이 뜨게 됩니다. 위 그림에서 Load an Alternate Configuration File을 선택해서 경로명을 적어
줍니다. 그 경로명은, ‘arch/arm/def-configs/smdk2440a’ 라고 적고 Ok를 클릭 합니다.
여기서 오탈자가 있다면 Enter the name of the configuration 창이 다시 뜨게 됩니다.
그 다음에 Save Configuration to an Alternate File 선택하고 종료합니다.
• 의존성 검사
이곳에서는 오류가 나면 안 됩니다. 오류가 나면 다시 처음부터 해 보시길 바랍니다.
================================================================================================
[root@localhost mv2440_kernel2.4.20_r1.1]# make dep
================================================================================================
• 커널을 이미지 만들기
의존성 검사에서 오류가 나지 않았다면 zImage를 생성합니다.
================================================================================================
[root@localhost mv2440_kernel2.4.20_r1.1]# make zImage
================================================================================================
대소문자를 구별해야 합니다.
실행하면 arch/arm/boot에 ‘zImage’ 파일이 생성됩니다.
================================================================================================
[root@localhost mv2440_kernel2.4.20_r1.1]# cd arch/arm/boot
================================================================================================
이렇게 ‘zImage’ 파일이 생성이 되었으면 이 ‘zImage’ 파일을 /tftpboot로 복사를 시켜야 됩니다.
만약 /tftpboot 경로가 없다면 만들면 됩니다.(tftp를 설치했다면 자동으로 생성되어 있습니다.)
이 경로는 Desktop PC에서 타겟보드에 파일전송 할 때 PC가 기본적으로 이 경로를 검색하게 됩니다.
================================================================================================
[root@localhost boot]# cp zImage /tftpboot/
[root@localhost boot]# cd ../../../
================================================================================================
■ cramfs 파일시스템 만들기
루트 파일 시스템은 압축 읽기 전용 파일 시스템인 cramfs를 씁니다. cramfs는 초창기에 ‘리누즈 토발즈’가 만든 파일 시스템입니다.
리눅스에서 cramfs파일 시스템 이미지 파일을 마운트해서 그 내용을 보려면
================================================================================================
# mount -o loop [파일명] [폴더명]
================================================================================================
위 명령어와 같이 치게 되면 내용을 볼 수 있습니다. 하지만 이렇게 마운트 했던 내용은 재부팅시 모두 사라지게 됩니다.
반대로 cramfs 파일을 만들려면,
================================================================================================
# mkfs.cramfs [폴더명] [파일명]
================================================================================================
이런 식으로 적어 주면 cramfs 파일을 생성하게 됩니다.
• root.cramfs 와 sml2440_anycall.cramfs 파일 마운트하기
먼저 root.cramfs 와 sml2440_anycall.cramfs 파일 마운트를 하는 이유는 프로젝트에 맞는 cramfs 파일을 만들기 위해서 이 두 cramfs의 파일들을 써야 되기 때문에 하게 됩니다.
일단 MV2440의 CD복사한 경로로 이동합니다.
================================================================================================
[root@localhost mv2440_uboot_dev]# cd /MV2440
================================================================================================
cramfs 파일이 저장된 곳으로 이동합니다.
================================================================================================
[root@localhost MV2440]# cd source/Linux/BIN/Filesystemimage
================================================================================================
이 root.cramfs 와 sml2440_anycall.cramfs 파일을 /tftpboot로 복사 합니다.
================================================================================================
[root@localhost Filesystemimage]# cp * /tftpboot
================================================================================================
그다음 tftpboot 경로로 이동합니다.
================================================================================================
[root@localhost ~]# cd /tftpboot
================================================================================================
두 파일을 마운트 합니다. 이 두 파일 중에 먼저 root.cramfs를 마운트 하겠습니다.
================================================================================================
[root@localhost tftpboot]# mkdir root/ //마운트 될 경로 만든다.
[root@localhost tftpboot]# mount -o loop root.cramfs root/
================================================================================================
그리고 프로젝트에서 기본적으로 사용 할 cramfs 파일시스템을 만들기 위해 임의의 폴더를 만듭니다.
================================================================================================
[root@localhost ~]# mkdir basic
================================================================================================
mc라는 프로그램을 사용하여 root폴더의 파일을 basic폴더로 모두 복사 합니다. 여기서 ‘mc’라는 프로그램은 복사가 힘든 파일이라도 복사를 가능하게 하는 프로그램입니다. 만약 mc가 없다면 yum으로 설치를 하면 됩니다.
================================================================================================
[root@localhost tftpboot]# yum -install -y mc
[root@localhost tftpboot]# mc
================================================================================================
이번에는 sml2440_anycall.cramfs를 마운트 합니다. 이 cramfs파일에는 2440보드에 필요한 라이브러리가 많이 존재하고 있기 때문에 그 라이브러리를 사용하기 위해 마운트를 합니다.
이 파일도 위 root.cramfs파일과 같이 먼저 폴더를 만든 뒤에 마운트를 시키면 됩니다.
================================================================================================
[root@localhost tftpboot]# mkdir sml2440
[root@localhost tftpboot]# mount -o loop sml2440_anycall.cramfs sml2440
================================================================================================
그리고 mc로 필요한 라이브러리를 복사를 합니다. 필요한 라이브러리는
복사할 파일 /tftpboot/sml2440/Qtopia/qt-2.3.7/lib/* (/fonts폴더제외)
복사될 경로 /tftpboot/basic/lib/
입니다.
================================================================================================
[root@localhost tftpboot]# mc
================================================================================================
다 이동을 한 뒤에 basic 파일을 보게 되면 qt 파일이 심볼릭 링크가 걸려 있는 것을 보게 될 겁니다.
이 심볼릭 링크를 지우고 qt폴더를 다시 생성을 합니다. 그리고 qt폴더 안에 lib폴더를 생성합니다.
================================================================================================
[root@localhost basic]# rm qt -f
[root@localhost basic]# mkdir qt
[root@localhost basic]# cd qt
[root@localhost qt]# mkdir lib
================================================================================================
이 /tftpboot/basic/qt/lib폴더에 sml2440/Qtopia/qt-2.3.7/lib 안에 있는 fonts폴더를 복사 시킵니다.
그리고 sml2440/lib폴더의 파일들을 mc를 사용하여 전부 basic/lib로 복사합니다.
터치스크린을 사용하기 위해서 sml2440/tmp 폴더 안에 있는‘pointercal’파일을 basic/mnt/etc 안에
복사를 시킵니다. 만약 이것이 없다면 좌표를 인식 못해, 터치스크린을 사용할 수 없습니다.
qta-3.3.3의 라이브러리 파일을 basic.cramfs에 포함시키기 위해 복사를 합니다.
================================================================================================
[root@localhost tftpboot]# cp /root/qta-3.3.3/lib/libqte.so ./basic/lib/
[root@localhost tftpboot]# cp /root/qta-3.3.3/lib/libqte.so.3 ./basic/lib
[root@localhost tftpboot]# cp /root/qta-3.3.3/lib/libqte.so.3.3 ./basic/lib/
[root@localhost tftpboot]# cp /root/qta-3.3.3/lib/libqte.so.3.3.3 ./basic/lib/
================================================================================================
파일들을 복사 한 뒤 마지막으로 basic폴더 안에 있는 linuxrc파일을 수정을 해야 합니다.
================================================================================================
[root@localhost tftpboot]# vi linuxrc
================================================================================================
#!/bin/sh echo "mount /etc as ramfs" /bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/etc/* /etc
echo "re-create the /etc/mtab entries" # re-create the /etc/mtab entries /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 / /bin/mount -f -t ramfs ramfs /etc
########################################## NETWORK ########################################## ifconfig eth0 220.64.218.97 # ifconfig lo 127.0.0.1 # route add default gw 220.64.218.1 # #############################################################################################
#############################################NFS########################################## mkdir /etc/tmp/qta # # for nfs pc - mv2440_board # mount -t nfs 220.64.218.215:/root/qta-3.3.3 /etc/tmp/qta # export QTDIR=/etc/tmp/qta # ###############################################################################################
#########################################TOUCH SCREEN###################################### # for installing qt-embedded-3.3.3 LIBRARY and touchscreen # # ln -s /dev/fb/0 /dev/fb0 # ln -s /dev/touchscreen/0 /dev/h3600_tsraw # # export QWS_MOUSE_PROTO=linuxtp:/dev/touchscreen/0 # export QTDIR=/qt # export LD_LIBRARY_PATH=/qt/lib:$LD_LIBRARY_PATH # ###############################################################################################
exec /sbin/init |
여기에서 NETWORK와 NFS와 TOUCH SCREEN를 대해서 설명하면 먼저,
==========NETWORK==========
eth0 의 주소는 타겟보드 주소
lo는 localhost
gw는 gateway 주소
==========NFS==========
공유를 하고자한다면 앞의 주석부분 “#‘을 삭제시켜줍니다.
이 항목은 NFS이용해 데스크탑의 파일시스템을 공유하는 것입니다 .
================================================================================================
mkdir /etc/tmp/qta //타겟보드에 /etc/tmp/qta를 생성 => 공유폴더가 될 예정
mount -t nfs 220.64.218.215:/root/qta-3.3.3 /etc/tmp/qta
//220.64.218.215 데스크탑의 /root/qta-3.3.3의 경로를 마운트해서 타겟보드의 /etc/tmp/qta경로에
나오게 합니다. 데스크탑에 /root/qta-3.3.3폴더가 없다면 만들면 됩니다.
================================================================================================
==========TOUCH SCREEN==========
이 항목은 터치스크린을 가능케 하는 것입니다. 단순히 적는다고 되는 건 아니지만 적어주면 됩니다.
이렇게 basic에 복사된 내용들을 basic.cramfs파일로 만듭니다.
================================================================================================
[root@localhost tftpboot]# mkfs.cramfs basic/ basic.cramfs
================================================================================================
이렇게 확인을 한 뒤에 생성된 ‘basic.cramfs’를 타겟보드에 올립니다.
================================================================================================
[root@localhost tftpboot]# mimicom
================================================================================================
Hit any key to stop autoboot : 1 나오면 아무키나 누릅니다.
그리고 ‘basic.cramfs’ 파일을 올립니다.
================================================================================================
MV2440# tftp 30000000 basic.cramfs
MV2440# nandw 80 e01000 30000000 (e01000은 사이즈이다.-16진수-상황에 파일크기는 달라질 수 있음)
================================================================================================
이렇게 올린 뒤에 boot 명령어를 사용하여 보드에 접속을 합니다. 그리고 확인을 합니다.
================================================================================================
MV2440# boot
# cd etc/tmp/qta/
# ls
================================================================================================
부팅이 되었다면 nfs로 공유된 곳으로 이동해서 예제 파일들을 실행해본다.
================================================================================================
# cd examples/hello
# ./hello -qws
================================================================================================
밑의 그림처럼 hello world가 뜨게 됩니다.
만약 컴파일이 되어 있지 않다면 ARM용 컴파일을 해줍니다.
================================================================================================
※ ARM용 컴파일 법
[root@localhost hello]# qmake ?spec $QTDIR/mkspecs/qws/linux-arm-g++ [pro파일] [ ] 사이에 있는 것은 하지 않아도 됩니다.
[root@localhost hello]# make
================================================================================================
※ 보드에서 바로 프로그램 실행하기
보드에서 바로 프로그램을 실행하기 위해서는 보드에 올라갈 cramfs파일 안에 그 프로그램의 실행파일이 존재해야 합니다. 그렇기 때문에, 실행파일을 cramfs 파일을 만들 폴더에 복사를 시켜 두어야 하는데, 그 위치는 만들 폴더 속/mnt/etc 안에 폴더를 만들어서 복사를 시키면 됩니다.
================================================================================================
[root@localhost tftpboot]# cp /root/project/* /tftpboot/project/mnt/etc/tmp/project
================================================================================================
그 다음에 linuxrc를 vi 편집기로 들어가서 다음 내용을 추가 시켜 주면 바로 실행이 됩니다.
================================================================================================
cd mnt/etc/project/
./project -qws
================================================================================================
#!/bin/sh echo "mount /etc as ramfs" /bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/etc/* /etc
echo "re-create the /etc/mtab entries" # re-create the /etc/mtab entries /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 / /bin/mount -f -t ramfs ramfs /etc
########################################## NETWORK ########################################## ifconfig eth0 220.64.218.97 # ifconfig lo 127.0.0.1 # route add default gw 220.64.218.1 # #############################################################################################
######################################### TOUCH SCREEN ######################################## # for installing qt-embedded-3.3.3 LIBRARY and touchscreen # # ln -s /dev/fb/0 /dev/fb0 # ln -s /dev/touchscreen/0 /dev/h3600_tsraw # # export QWS_MOUSE_PROTO=linuxtp:/dev/touchscreen/0 # export QTDIR=/qt # export LD_LIBRARY_PATH=/qt/lib:$LD_LIBRARY_PATH # ###############################################################################################
cd /etc/tmp/project/ ./project -qws
exec /sbin/init |
'My Project > 교통정리로봇' 카테고리의 다른 글
[교통정리로봇] 프로젝트 문서 1. 개요 및 구성 (0) | 2009.05.01 |
---|---|
[교통정리로봇] 프로젝트 문서 2. 관련연구(첫번째) (0) | 2009.05.01 |
[교통정리로봇] 프로젝트 문서 2. 관련연구(세번째) (0) | 2009.05.01 |
[교통정리로봇] 프로젝트 문서 2. 관련연구(네번째) (0) | 2009.05.01 |
[교통정리로봇] 프로젝트 문서 2. 관련연구(다섯번째) (0) | 2009.05.01 |