'전체 글'에 해당되는 글 443건

학기중 프로젝트로 한것이며 학교 키트인 하이버스사의 X-Hyper255B에서 구동하였습니다.
제품 홈페이지는 http://www.hybus.net/sub02/sub02_school01.asp
mp3 플레이어는 splay의 mp3라이브러리와 플레이어를 arm용으로 수정하였고
몇몇 에러와 수정사항을 거쳐 보드에서 실행시켰습니다.
Qt 2.3.2를 사용하였으며 Qt라이브러리를 보드에 모두 업로드(nfs이용)하였음.
작업별 소요기간은 의미없음. 허허=.,=;


Embedded S/W




MP3 player 작업내용



1. 작업별 소요 기간

2. 호스트 PC 리눅스 OS 선정작업

3. 커널 재컴파일

4. GUI Qt-2.3.2 설치

5. 타겟보드에서의 Qt 테스트

6. MP3 decoder library - splay-0.8.2

7. LCD, FND 제어

8. 실행화면

9. 문제점

10. 참고 자료



1. 작업별 소요 기간


       호스트 PC 리눅스 OS 선정작업 : 약 1주

       호스트 개발환경 구축(Qt 설치 및 커널 재컴파일) : 약 3주

       타겟보드 환경 구축 :약 10일

       MP3 라이브러리 선정 및 MP3P 제작 : 약 2주

       LCD, FND 제어 : 약 4일

       최종 마무리 점검 : 약 3일

2. 호스트 PC 리눅스 OS 선정작업

1. Hancom 4.0 professional(kernel 2.6.x)

   - 윈도우와 매우 흡사하여 사용하기 편하나 타겟의 커널버전 2.4.18과의 호환 문제발생을 미연에 방지하기위해 삭제함.

2. Wowlinux Paran 7.3

   - Hybus 메뉴얼에서 개발환경으로 쓰인 OS로 추천하고있으나 호스트 PC인 노트북에서 Serial Converter 사용시 시스템 정지현상으로 사용 불가함.

3. Redhat 9.0

   - Wowlinux의 Serial Converter 문제로 hybus에 문의 결과 Wowlinux의 문제이므로 Redhat 9.0(Kernel 2.4.20-8) 추천


3. 커널 재컴파일

USB-Serial converter 사용 옵션 추가 및 QVFB 사용을 위한 가상 프레임버퍼 옵션 추가

kernel에서 qvfb설정하기

cd /usr/src/linux

# make mrproper

# make menuconfig  (아님 make xconfig)

1. Cide maturity level options 선택후 세부설정항복에서 Prompt for development and/or incomplete code/drivers 항복 선택

2. exit 선택후 초기메뉴에서 console drivers 선택후 세부항목 Frame-buffer support 선택

3. 다시 세부항목에서 Virtual Frame Buffer support 선택하고 Advance low level driver options에서 8bpp packed pixels support 와 16bpp packed pixels support 선택

4. Exit후 저장후 빠져나옴 (설정 완료)

# make dep

# make bzImage

# make modules

# make modules_install

# make install (새로운 커널이 grub 또는 lilo에 자동으로 등록됨.)

### 커널 컴파일 완료 ###

4. GUI Qt-2.3.2 설치

개발용 : Qt-X11-2.3.2 컴파일 후에 qvfb 파일을 qt-embedded-2.3.2에 카피한 후 설치(호스트에서 Qt 실행을 확인용)

타겟보드용 : qt-embedded-2.3.2로 arm용 컴파일 성공

설치할 Qt와 tmake를 trolltech.com에서 다운로드

1] qt-x11-2.3.2.tar.gz

2] qt-embedded-2.3.2.tar.gz

3] tmake-1.13.tar.gz

압출풀고 구분을 위해 폴더명을 바꿈

tar xvfz qt-x11-2.3.2.tar.gz

mv qt-2.3.2 qtx-2.3.2

tar xvfz qt-embedded-2.3.2.tar.gz

mv qt-2.3.2 qte-2.3.2

Qt-X11 설치

cd qtx-2.3.2

export QTDIR=/usr/loca/program/qtx-2.3.2

export PAHT=$PATH:$QTDIR/bin

export LD_LIBRARY_PATH=$QTDIR/lib

./configure  (or ./configure -no-xft)      <-- xft 에러시 -no-xft 추가

make

QVFB 설치 후 Qt-embedded로 복사

cd tools/qvfb

make

./qvfg -width 640 -height 480 -depth 16     <-- 테스트로 한번 실행

cp qvfg /usr/loca/program/qte-2.3.2/bin/

Qt-embedded 설치

cd /usr/loca/program/qte-2.3.2

export QTDIR=/usr/loca/program/qte-2.3.2

export PAHT=$PATH:$QTDIR/bin

export LD_LIBRARY_PATH=$QTDIR/lib

./configure

make

Qt-embedded 테스트

./qvfb -width 640 -height 480 -depth 16 &

cd $QTDIR/examples/hello

./hello -qws

tmake 설치 (압출만 풀면 됨 : make 필요 없음)

cd /usr/loca/program/

tar xvfz tmake-1.13.tar.gz

export TMAKEPATH=/usr/loca/program/tmake-1.13/lib/qws/linux-x86-g++

export PATH=$PATH:/usr/loca/program/tmake-1.13/bin

arm용 컴파일러 설치(qt_libstdc++-3-libc6.1.2.2.10.0.so파일은 hybus 제공)

/usr/local/hyper-arm-linux-R1.1/ Toolchain설치된 상태에서

export PATH=$PATH:/usr/local/hyper-arm-linux-R1.1/bin

mv qt_libstdc++-3-libc6.1.2.2.10.0.so /usr/local/hybus-arm-linux-R1.1/lib/

ln –s qt_libstdc++-3-libc6.1.2.2.10.0.so /usr/local/hybus-arm-linux-R1.1/lib/libstdc++.so

Qt-embedded arm용 설치

cd /usr/loca/program/

mkdir /usr/loca/program/arm/

cp qt-embedded-2.3.2.tar.gz /usr/loca/program/arm/

tar xvfz qt-embedded-2.3.2.tar.gz

mv qt-2.3.2 qte-2.3.2

cd qte-2.3.2

./configure -xplatform linux-arm-g++

make

cd lib

file libqte.so.2.3.2               <-- ARM용으로 됐는지 확인

arm-linux-strip libqte.so.2.3.2   <-- strip 하기

ARM용 Tmake 설정

export TMAKEPATH=/usr/local/tmake-1.13/qws/linux-arm-g++

export PATH=$PATH:/usr/local/tmake-1.13/bin

Qt 설치 완료 및 ARM용 컴파일 준비완료

qt configure에선 항상...

1. 라이센스 동의 "yes"

2. everyting 5번

3. color depth에서 16bpp

4. Qt Virtual Framebuffer 지원 "yes"

* 환경 설정용 파일을 x11, embedded, arm용을 따로따로 두어 콘솔을 열 때마다 필요한 환경을 적용하기 쉽게 만듦.

ex) #source profile_arm


profile_arm 파일 (qt-embedded-arm 용)

QTDIR=/usr/local/program/arm/qte-2.3.2

PATH=$PATH:$QTDIR/bin

LD_LIBRARY_PATH=$QTDIR/lib

export QTDIR PATH LD_LIBRARY_PATH

TMAKEPATH=/usr/local/program/tmake-1.13/lib/qws/linux-arm-g++

PATH=$PATH:/usr/local/program/tmake-1.13/bin

export TMAKEPATH PATH


profile_e 파일 (qt-embedded 용)

QTDIR=/usr/local/program/qte-2.3.2

PATH=$PATH:$QTDIR/bin

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QTDIR PATH LD_LIBRARY_PATH

TMAKEPATH=/usr/local/program/tmake-1.13/lib/qws/linux-x86-g++

PATH=$PATH:/usr/local/program/tmake-1.13/bin

export TMAKEPATH PATH


profile_x파일(qt-x11용)

QTDIR=/usr/local/program/qtx-2.3.2

PATH=$PATH:$QTDIR/bin

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QTDIR PATH LD_LIBRARY_PATH

TMAKEPATH=/usr/local/program/tmake-1.13/lib/qws/linux-x86-g++

PATH=$PATH:/usr/local/program/tmake-1.13/bin

export TMAKEPATH PATH

5. 타겟보드에서의 Qt 테스트


1. NFS 사용한 타겟보드에 Qt 환경구축

1./etc/export 파일 수정

“/mnt/nfs/     192.162.100.253(rw,no_root_squash)" 입력.

192.162.100.253는 타겟 pc 아이피임.

2. nfs 재시작

#/etc/rc.d/init.d/nfs stop

#/etc/rc.d/init.d/nfs start

3. 타겟의 ip 설정(대역폭만 일치하면 됨)

#ifcnofig eth0 192.162.100.252

4. 확인

#ping 192.168.100.252

5. 타겟보드에서 portmap을 실행하여 빈 포트를 자동으로 찾아준다

#portmap

#ps aux | grep portmap

6. Mount

#mount -t nfs 192.168.100.252:/mnt/nfs /mnt/nfs

7. 호스트 pc의 /mnt/nfs에 Qt를 카피해뒀다면 마운트 되었으므로 QT PATH 설정으로 qt를 실행가능(라이브러리만 업로드한다면 타겟에서 용량 수용 가능)

8. Qt 라이브러리를 /usr/local 에 카피함.

9 Mount 해제

#umount /mnt/nfs

10. 타겟보드에 ARM 라이브러리 설치

hybus.net에서 제공하는 qt_libstdc++-3-libc6.1-2-10.0.so를 심볼릭링크한 후 /lib 에 카피

#ln -s qt_libstdc++-3-libc6.1-2-10.0.so libstdc++-libc6.1-2.so.3

#cp qt_libstdc++-3-libc6.1-2-10.0.so libstdc++-libc6.1-2.so.3 /lib/

11. Qt 실행환경 구축 완료


2. fblogo 프로그램 사용방법(hybus.net 제공)

1.PNG file 칼라수를 223으루  만든다.

2. libpng* 라이브러리들을 host /lib 에 복사

3. ./fblogo -4 test.png linux_logo.h 실행

4. linux_logo.h 을 사용하는 커널 include/linux/ 에 복사

5. 새로 컴파일해서 보드에 올리면 부팅때 프래임버퍼에서 뿌리는 그림이 달라진다.

3. Qt 디버깅

gdb [실행파일명]

run -qws

그리고 실행 하시다 다운되면 “bt” 라고 입력하면 stack이 나옴.


4. Qt Designer 사용시 cpp 파일 생성 명령어

#uic -o 만들 해더파파일이름 ui이름

#uic -i 해더파일이름 -o 만들cpp파일이름 ui파일이름

* .ui 파일 수정시마다 사용자 코드는 지워지는 불편함 때문에 초기 layout 잡을때만 Qt Designer가 편함


5. Qt 컴파일(progen과 tmake 사용시)

#progen -o xxx.pro *.cpp

#tmake -o Makefile xxx.pro

#make


6. Qt 컴파일 (qmake 사용시 - Qt 3.0 이후 지원됨, 매우 간단)

#qmake -project

#qmake

#make


7. 타겟보드에 사용될 설정을 profile_255b라는 파일에 저장후 /etc/profile 에 “source profile_255b“ 명령추가로 부팅시 자동적용되도록 설정함

export QTDIR=/usr/local/qte-2.3.2

export LD_LIBRARY_PATH=$QTDIR/lib

export QWS_MOUSE_PROTO=linuxtp:/dev/ts

/sbin/smixer -s /aaa/config/smixer.conf

6. MP3 decoder library - splay-0.8.2

Splay에 포함되어있는 xsplay 동작시 Qt 버전문제로 함수와 인클루드 에러 발생 및 pthread 사용으로 라이브러리 소스 에러 발생함.

pthread: (http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/Pthread_API_Reference)


1. splay의 에러 수정

2. splay의 라이브러리 컴파일

- 개발용으로 정상컴파일하여 라이브러리 파일 생성

- 타겟용으로 arm용 라이브러리 파일 생성

3. Qt Makefile에 라이브러리 추가하여 컴파일 및 pthread사용을 위한 -lpthread 옵션 추가.

.

CC     =      gcc

CXX   =      g++

CFLAGS       =      -pipe -Wall -W -O2 -DNO_DEBUG

CXXFLAGS=   -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline -DNO_DEBUG

INCPATH      =      -I$(QTDIR)/include

LINK   =      g++

LFLAGS       =      

ADDLIBS =       ./inc/libmpegsound.a ./inc/libcommon.a

LIBS   =      $(SUBLIBS) -L$(QTDIR)/lib -lm -lqte -lpthread

.

.

all: $(TARGET)

$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)

       $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(ADDLIBS) $(LIBS)

* touch 스크린 사용시 hybus에서 제공하는 touch screen에 대해 수정된 파일을 Qt 디렉토리에 카피하여 컴파일 하여야 함.

* MP3P 소스는 첨부자료 참고

7. LCD, FND 제어

lcd와 fnd제어에 poll을 사용.

LCD, FND의 기본 제공 모듈 소스로 테스트하여 poll을 사용한 정상적인 동작 확인후 write 함수 수정하여 모듈 올림.

epoll에 대해 알게됨.

epoll : http://www.joinc.co.kr/modules/moniwiki/wiki.php/epoll

      소켓수가 많아질수록 월등한 속도 차이가 나며 kernel 2.6.x부터 커널에 정식 포함되어있음.

장치 등록

       fd1 = open("/dev/FND", O_RDWR );

       fd2 = open("/dev/LCD", O_RDWR );

       memset(Events, 0, sizeof(Events));

       bln_fd1 = bln_fd2 = true;

       if(fd1<0) bln_fd1 = false;

       if(fd2<0) bln_fd2 = false;

       Events[0].fd = fd1;

       Events[0].events = POLLOUT | POLLERR;

       Events[1].fd = fd2;

       Events[1].events = POLLOUT | POLLERR;

LCD와 FND write는 함수로 분리하여 호출하여 사용함

       void writelcd(char *str){

               if(!bln_fd2) return;

               retval = poll((struct pollfd *)&Events, 2, 1000);

               if(retval<0) return;

               if(Events[1].revents & POLLOUT)

               {

                       sprintf(buffer1,"%-32s",str);

                       write(fd2, buffer1, 34);

               }

       }

       void writefnd(int num){

               if(!bln_fd1) return;

               retval = poll((struct pollfd *)&Events, 2, 300);

               if(retval<0) return;

               if(Events[0].revents & POLLOUT)

               {

                       sprintf(buffer1,"%8.8u",num);

                       write(fd1,buffer1,8);

               }

       }

8. 실행화면







9. 문제점

1. 한글처리를 하지 않아 한글 사용시 깨지는 현상 발생.

2. 라이브러리에서 wav 지원되나 적용하지 않음.

    (단순 wav 재생은 Qt 만으로도 재생 가능. example에 소스 존재)

3. 음악재생은 라이브러리에서 /dev/dsp를 사용하며 볼륨조종은 /dev/mixer를 사용하나 프로그램 실행전 /dev/smixer를 설정하여 볼륨사용을 가능하게 해야함.

     타겟보드에서 사용한 smixer 드라이버 (http://centerclick.org/programs/smixer/)

    #/sbin/smixer -s smixer.conf

     

vol Vol 100

vol Pcm 100

vol Spkr 100

vol Line 100

vol Mic 100

vol CD 100

vol Pcm2 100

vol IGain 100

vol Line1 100

vol PhoneIn 100

vol PhoneOut 100

vol Video 100

10. 참고 자료  (리눅스에 대한 일반적인 사이트는 제외)

1. Embedded/Qt 관련 사이트

병준이 저장소 :

http://www.joon.pe.kr/board/list.php?bbs_id=embeded

영진이와 함께하는 서당 :

http://php.chol.com/~valentis/Suhdang/index.php

KELP - Korea Embedded Linux Project :

http://kelp.or.kr/korweblog/

임베디드 시스템 전문 홈페이지 Guile's Land :

http://www.guile.pe.kr/index.html

임베디드 월드 :

http://www.embeddedworld.co.kr/

조인시 위키 :

http://joinc.co.kr/modules/moniwiki/wiki.php/FrontPage

하이버스 :

http://www.hybus.net/

korone.net's programming site :

http://www.korone.net/

MFC vs Qt :

http://phil.freehackers.org/kde/qt-vs-mfc.html

Open Mind, Open World -- KESL.org :

http://www.kesl.org/

Qt Forum - programming with C++ and Qt  QtForum.org :

http://www.qtforum.org/

Qt Programming Guide (Naver 블로그)

http://blog.naver.com/luvweb.do?Redirect=Log&logNo=60012478029

Trolltech 사

http://www.trolltech.com/

Qt를 인터페이스로 사용한 CamStream :

http://www.smcc.demon.nl/camstream/

SourceForge.net Welcome to SourceForge.net :

http://sourceforge.net/

trolltech Qt 추천도서 :

http://www.trolltech.com/developer/books.html

리눅스

와우리눅스 : http://www.wowlinux.com/index.php

미지리눅스 : http://www.mizi.co.kr/ko/

한컴리눅스 : http://kr.hancom.com/

레드헷 리눅스 : http://www.redhat.com/


MP3 구조

mp3 제작과정과 생생한 음질의 테크닉 :

http://blog.naver.com/gripis24.do?Redirect=Log&logNo=20005903518

MPEG Audio Layer I/II/III frame header :

http://www.mp3-tech.org/programmer/frame_header.html

MP3란? : http://mp3car.co.kr/service/mp3.htm

MP3'Tech - www.mp3-tech.org : http://www.mp3-tech.org/

MPEG AUDIO FRAME HEADER : http://www.dv.co.yu/mpgscript/mpeghdr.htm


Sound 관련

타겟보드에서 사용한 smixer

http://centerclick.org/programs/smixer/

Vovida.org -- Your Source for Open Source Communication :

http://www.vovida.org/


문서

X-Hyper255B-TKU - X-Hyper255B_Developer Manual.doc

Qt 프로그래밍 / Matthias Kalle Dalheimer [저]; 김태선 역.

MP3 player / decode 소스

MP3 Player - Open Lecture :

http://cafe.naver.com/ArticleRead.nhn?clubid=10341372&menuid=&searchtype=1&query=mp3&page=2&articleid=1328

조인시 위키 pmp3 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/JCvs/pmp3

D.O.M.O - By GoriTech : http://domo.sourceforge.net/index2.html

Debian -- madplay : http://packages.debian.org/testing/source/madplay

FMOD sound system - [audio library api music mod s3m xm it mp3 ogg vorbis wma midi cdda dsp] : http://www.fmod.org/

Kaffeine Player Homepage : http://kaffeine.sourceforge.net/

id3lib - The ID3v1-ID3v2 Tagging Library : http://id3lib.sourceforge.net/

splay : http://splay.sourceforge.net/tgz/

Kxine Media Player : http://kxine.sourceforge.net/

SDL MPEG Player Library : http://www.lokigames.com/development/smpeg.php3

Madlld libmad low-level API demonstration :

http://www.bsd-dk.dk/%7Eelrond/audio/madlld/

DecMPA : http://sourceforge.net/projects/decmpa/

mp3blaster, a non-graphical mp3 player for UNIX :

http://www.stack.nl/~brama/mp3blaster.html

MPEG . ORG - MPEG Pointers and Resources :

http://www.mpeg.org/MPEG/index.html

madplayer FTP : ftp://ftp.mars.org/mpeg/

mpg123, Fast MP3 Player for Linux and UNIX systems : http://www.mpg123.de/

M P 3  O R G RealOne Mobile Player Available : http://www.mp3.org/

QUI for MPlayer : http://qui4mplayer.sourceforge.net/main.shtml

ksmp3play : http://sourceforge.net/projects/ksmp3play

MAD (MPEG Audio Decoder) : http://sourceforge.net/projects/mad

Kaffeine Player : http://sourceforge.net/projects/kaffeine

xine - a free video player : http://sourceforge.net/projects/xine

SoX - Sound eXchange  HomePage : http://sox.sourceforge.net/

splay : http://splay.sourceforge.net/

MAD: MPEG Audio Decoder : http://www.underbit.com/products/mad/

xine - A Free Video Player - Releases : http://xinehq.de/index.php/releases

xmp3player Homepage : http://cray.tuug.utu.fi/~phoenix/xmp3player/