MV6410-LCD Linux 활용가이드 1
1. 리눅스환경설정 개발을하기앞서먼저환경설정을해야한다. 그중가장중요한네트워크설정부분과 GCC 설정방법을먼저설명하겠다. 참고로당사는페도라 6 리눅스로작업했다. 위의그림처럼리눅스서버와작업할유저 PC 가네트워크상태로연결되어있어야하고, 역시타겟보드도모니터링할수있게시리얼 (UART) 이연결되어있어야한다. 환경설정구축목록은다음과같다. Linux Server IP 설정 minicom 설정 tftp 서버설정 nfs 서버설정 GCC 환경구축 2
1) Linux Server IP 설정 다음과같이명령어를입력하면 IP 설정할수있다. 또한 ifconfig 명령어를통해 IP 주소를확인할수있다. # ifconfig eth0 192.168.0.177 netmask 255.255.255.0 up 또한 setup 명령어를이용해서설정할수도있다. # setup Network configuration 선택 3
IP 작성후 OK 선택 4
2) minicom 설정 리눅스상에서 RS-232C 통해타겟보드와 PC 간의모니터링을할수있게해주는프로그 램이다. 윈도우에서하이퍼터미널과같은프로그램이라고생각하면된다. 쉘프롬프트상태에서 minicom s 실행한다. # minicom -s Serial port setup 선택한다. 5
밑에있는옵션대로설정을한다. 설정방법은다음과같다. 만약 Serial Device 를설정하고싶으면 A 입력하고, 설정한 뒤 Enter 키를누르면된다. 6
3) tftp 서버 tftp 를설정하면 u-boot, zimage, File System 이미지를이더넷을이용해서타켓보드에올 릴수있다. # cd etc/xinetd.d # vi tftp 수정전 수정후 위의그림처럼 disable = no 바꾸어주어야 tftp 가구동된다. 7
다음은 setup 명령을통해 tftp 설정확인해보겠다. # setup System services 선택한다. tftp 선택한다. OK 클릭후다음과같이 xinetd 데몬을수행한다. # service xinetd restart 8
4) nfs 설정 nfs 는타겟보드와리눅스서버간의폴더를공유해자유롭게파일을수정및복사할수 있는프로그램이다. 먼저리눅스서버쪽설정이해주어야한다. 다음과같은순서되로명령어를입력한다. # mkdir nfs # chmod 777 nfs # chown nobody nfs # cd etc # vi exports /nfs 192.168.0.*(rw,sync,no_root_squash) 기입한다. /nfs 이후는 탭 을이용해이동한후 192.168.0.*(rw,sync,no_root_squash) 기입해준다. 9
다음명령어를이용해 nfs 데몬을다시구동시킨다. # /etc/rc.d/init.d/nfs restart 10
타겟보드설정은다음과같이해준다. 위에그림처럼보드를처음부팅하면 /root 폴더가나오고 cd.. 명령어를이용하여상위디렉토리로가면여러가지폴더가나오는데, 현재여기부분은 Read Only 이므로저널링으로작업한 Qtopia 폴더에서 nks 마운트를해야읽고, 쓰기가가능하다. 먼저 Qtopia 폴더에서 mkdir 명령어를이용해 nfs 폴더를생성하고 chmod 명령어를이용해모든권한을준다. 마운트명령은다음과같다. mount t nfs o nolock 리눅스서버 IP:/nfs / 타겟보드 nfs 폴더 # mount t nfs o nolock 192.168.0.177:/nfs /Qtopia/nfs <MV6410-LCD> < 리눅스 PC NFS> 위그림처럼리눅스서버 nfs 폴더가타켓보드 Qtopia/nfs 에마운트되어 bash_profile 파일이공유된모습을볼수있다. 11
5) GCC 환경구축 일반 PC 데스크탑 x86 Linux 에서컴파일하게되면그컴퓨터에맞는바이너리코드가생성된다. 이바이너리코드는타겟보드에저장할수있는공간이나메모리부분이틀리기때문에타겟용으로개발하기위해서는 x86 컴퓨터에서 ARM 이사용할수있는바이너리코드를만들기위해크로스컴파일러가필요하다. 먼저 /usr/local/arm 폴더를만들고 CD 안에 Sources\Linux\toolchain 있는 4.3.1-eabi-armv6-mv20081010.tar.gz 파일을리눅스 PC /usr/local/arm 복사한다. 명령어는다음과같다. # mkdir -p /usr/local/arm # tar xvf 4.3.1-eabi-armv6-mv20081010.tar # mv 4.3.1 /usr/local/arm/ # export PATH=$PATH:/usr/local/arm/ 4.3.1-eabi-armv6/usr/bin/arm-linux- 그리고반드시 bash_profile 안에 PATH 경로를확인해준다. 명령어는다음과같다 # vi ~/.bash_profile 밑에설정은당사리눅스 PC 의환경설정이다. PATH=$PATH:$HOME/bin:/usr/local/arm/4.3.1-eabi-armv6/usr/bin LD_LIBRARY_PATH=/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabiarmv6/mpfr/lib export PATH LD_LIBRARY_PATH unset USERNAME LANG=en 12
4.3.x. GCC 는반드시 gmp 와 mpfr 경로를설정해주어야한다. For example : LD_LIBRARY_PATH=/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabiarmv6/mpfr/lib export PATH LD_LIBRARY_PATH 또한절대 LD_LIBRARY_PATH 이이름을바꾸어서는안된다. 설정이끝나면환경적용을 해준다. 명령어는다음과같다. # source ~/.bash_profile 13
2. 자주사용되는리눅스명령어 파일보기 # ls, # ls a # ll 현재접속된사용자 # who 현재디렉토리위치 # pwd 파일위치보기 # which xxx 14
폴더생성및삭제 # mkdir xxx <- 폴더생성 # rmdir xxx <- 폴더삭제 폴더및파일완전삭제 # \rm r xxx 파일복사 # cp 복사할파일복사될위치 15
PIPE 명령어사용 ( ) PIPE 란앞의결과값을다른명령어로인수전달되는명령어이다. # ls l /bin more, # ps aux more, # ps ef more 메모리정보 # free CPU 점유율정보 # top 16
환경변수출력 # env more 특정환경변수출력 # echo 환경변수이름 현재마운트된정보출력 # df h IP 출력 # ifconfig 17
RPM 설치및관리 RPM (RedHat Package Manager) 은리눅스에서제공되는기본패키지이다. 예전에리눅스 는모든패키지를 tar 을일일이설치해야만했기때문에리눅스를사용하는데많은번거로 움이있었다. 그래서패키지설치와관리를쉽게하고자 rpm 을만들게되었다. RPM 설치 # rpm i 패키지이름 RPM 업데이트 # rpm -uvh 패키지이름 RPM 패키지정보 # rpm qip 패키지이름 RPM 강제설치 # rpm ivh 패키지이름 RPM 삭제 # rpm e 패키지이름 RPM 설치전확인 # rpm qlp 패키지이름 18
사용자계정관리 새로운사용자계정만들기 ( 반드시 ROOT 권한에서작업해야한다.) 새로운계정생성 # useradd xxx # passwd 비밀번호입력하면된다. 계정로그인방법은밑에그림처럼 root 계정으로가기위해서는 # su l 명령어를이용 하면된다. 그리고다시유저계정으로가고싶으면 # su 유저계정 하면된다. 19
tar 압축, 해제방법 tar 압축하기 # tar cvf 압축파일명.tar 압축할파일명 tar 압축해제 # tar xvf 파일명.tar 20
3. MV6410 Cram File System 이미지만들기 # mkdir mv6410_org <- 폴더생성 # mount o loop rootfs_mv6410.cramfs mv6410_org <- 이미지를폴더에마운트 # tar cvf mv6410_new.tar mv6410_org <- 마운트된폴더를 tar 로압축한다. # umount mv6410_org # tar xvf mv6410_new.tar <- 압축해제한다 # mkfs.cramfs mv6410_org mv6410_new <- 압축해제한폴더를이미지로만들기 위에있는 mkfs.cramfs 명령어는페도라 6 이고일반리눅스명령어는 mkfs.cramfs cramfs 을사용한다. 아닌 21
4. MV6410 SD-CARD 마운트 카드삽입후아래와같이명령어를입력한다. # mount /dev/mmcblk0p1 /mnt 22
5. Kernel 디렉토리구조 block : 시스템타임에따른 I/O 스케줄러관련된폴더 crypto : 암호와코드에관련된폴더 Documentation : 커널에관련된각종텍스트문서 fs : 가상파일시스템등여러파일시스템관련폴더 init : 리눅스 init 에관련된폴더 ipc : 32bit IPC (Inter Process Communication) 세마포어, 메시지큐등, 관련폴더 kernel : 명령어수행을위한시스템콜과각종 mutex 그리고시그널제어에관련된폴더 lib : 커널의관련된라이브러리함수집합폴더 mm : 세크먼트디스크립터와논리에서선형그리고물리메모리로접근하는메모리관련된폴더 net : 네트워크관련된폴더 scripts : 리눅스명령어체계수행을위한각종스크립트관련된폴더 security : 보안에관련된폴더 sound : 사운드에관련된폴더 usr : fifo 와 pipe 오프젝트관련된폴더 여기서개발자가직접제어할폴더는 arch, drivers, include 가있다. 23
1) arch 이폴더는커널에관계된아키텍쳐코드가들어있다. arch/arm/configs 안에 make menuconfig 명령을통해작업을수행했던배치파일이있다. mv6410_defconfig 또한 make 명령어를통해컴파일이완료되면 arch/arm/boot 안에타겟보드에다운로딩하 는 zimage 가있다. 2) include 이폴더는실제 mtd, pmica, network 등커널에관련된각종헤더파일이모여있는폴더이 다. 3) drivers MV6410-LCD H/W 관련된각종드라이버가있는소스부분이다. / usb : usb 드라이버 / serial : UART 드라이버 / video : LCD 드라이버 / media : Camera 드라이버 / net : Ethernet 드라이버 24
6. 응용프로그램운영 bplay : 음성출력프로그램 brec : 음성녹음프로그램 fbcam : 카메라프로그램 tv_test : TV OUT 출력프로그램 1) 음성프로그램컴파일및실행방법 ( 컴파일 ) CD 안에보면두개의압축된파일이있다. bplay-0.991.tar.gz : bplay, brec 프로그램 fbcam.tar.gz : Camera 프로그램 다름명령어를이용하여압축을해제한다. # tar xvf bplay-0.991.tar.gz 25
# make 컴파일이끝나면 bplay, brec 실행파일이생성된다. ( 실행방법 ) 위에그림처럼 vi test 를이용해임의파일을만들어준다. 생성된 test 파일 26
brec 프로그램이있는 /root 폴더로이동해 MV6410 메인보드에있는마이크잭부분에 마이크를연결하고녹음을한다. 실행명령어는다음과같다. #./brec /mnt/test 녹음이끝나면 Ctrl + c 누르면종료된다. #./bplay /mnt/test 수행하면녹음된음성을청취할수있다. 27
2) 카메라프로그램컴파일과실행방법 ( 컴파일 ) 다음과같은명령어를이용해압축을해제한다. # tar xvf fbcam.tar.gz vi Makefile 로진입해밑에그림처럼본인이압축해제한커널위치를맞게바꾸어준다. vi 에디터종료후 make all 수행하면 fbcam 실행파일생성된다. 28
( 실행방법 ) 메인보드에있는크레들컨네터와카메라를연결하고부팅후./fbcom 해주면카메라가 실행된다. 29
3) WIFI 실행방법 명령어는다음과같다. # insmod rt73.ko # ifconfig rausb0 192.168.xxx.xxx # iwlist scanning 여기서 AP 장비이름이검색되는데그장비이름을기입해주면된다. # iwconfig rausb0 essid [Write! Ap of name ] 30
4) TV-OUT 실행방법 명령어는다음과같다. # insmod s3c-tvscaler.ko # insmod s3c-tvenc.ko #./tv_test 0 -> Composite tv out #./tv_test 0 0 -> Composite tv out #./tv_test 0 1 -> S-Video tv out 31