본문 바로가기
dev, tech/embedded

Mplayer Arm 포팅 (작성중)

by 구띵 2006. 8. 10.

*** B/D : Hybus pxa270tku

Fedora Core 5, 2.6.17

 

1. termcap 포팅

(다운)

http://fresh.t-systems-sfr.com/linux/src/termcap-2.0.8.tar.gz

 

(설치)

#tar zxvf termcap-2.0.8.tar.gz

#vi Makefile

 

  CC=gcc를 CC=/opt/iwmmxt-1.0.0/bin/arm-linux-gcc  로 수정 ->> (자신의 크로스 컴파일러)

  CFLAGS=-O -I. -g를 #CFLAGS=-O -I. -g 로 주석 처리

 

  AR=ar을 AR=/opt/iwmmxt-1.0.0/bin/arm-linux-ar 로 수정


  prefix = / 를 prefix = /usr/local/arm/termcap(arm용 termcap을 설치할 디렉토리)으로 수정

#vi tparam.c

 

 28 번째 라인에서

        #define bcopy(s, d, n) memcpy ((d), (s), (n)) 을 주석 처리
       
# vi termcap.texi

 

  2615 라인에서

        but in that regard it is obsolete (@xref{Cursor Motion}).    문장에서 "(" ")" 를 없애준다.
         -> but in that regard it is obsolete @xref{Cursor Motion}.

# make install

 

  directory 관련 다음과 같은 에러가 뜰 것이다.


chown: cannot access `/usr/local/arm/termcap/lib/libtermcap.so.2.0.8': Not a directory
make: *** [install] Error 1
또는
chown: cannot access `/usr/local/arm/termcap/include/termcap.h': Not a directory

  디렉토리를 만들어 주자.

 

#mkdir -p /usr/local/arm/termcap/lib
#mkdir /usr/local/arm/termcap/include


인스톨 한다.
#make install

정확히 설치되었는지를 확인한다.

#ls -al /usr/local/arm/termcap/lib/
-rw-r--r--    1 bin      bin         12680 Nov 26 16:35 libtermcap.a
lrwxrwxrwx    1 bin      bin            38 Nov 261 6:35 libtermcap.so->libtermcap.so.2.0.8
-rwxr-xr-x    1 bin      bin         15097 Nov 26 16:35 libtermcap.so.2.0.8

 

2. libmad 포팅

libmad는 interger연산을 위해 필요한 라이브러리로 Arm용으로 Mplayer를 포팅하면 floating 연산때문에 동영상재생이 원할치 않다.
libmad 를 enable 시켜서 컴파일 하면 현저하게 좋아짐을 느낄수 있다

 

(다운)

 

ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz


(설치)

 

#tar zxvf libmad-0.15.1b.tar.gz
#cd libmad-0.15.1b
#./configure --prefix=/usr/local/arm/libmad --enable-fpm=arm --host=arm-linux


--prefix로 libmad를 설치할 디렉토리를 지정해주고 --host 옵션에 크로스컴파일러의 선행문자를 적어준다.
#make
#make install

 

 

MPlayer 포팅

http://www.mplayerhq.hu
Mplayer 홈페이지에서 소스(MPlayer-1.0pre7try2.tar.bz2)랑 코덱(all-20050412.tar.bz2)을 받아온다.

코덱은 /usr/local/lib/codecs에 설치한다.
#tar jxvf all-20050412.tar.bz2
#mv all-20050412 /usr/local/lib/codecs

이제 Mplayer 설치로 들어가 보자.
#tar jxvf Mplayer-1.0pre7try2.tar.bz2
#cd Mplayer-1.0pre7try2
#./configure --cc=armv5l-linux-gcc --target=arm-linux --enable-static \
--prefix=/usr/local/arm/mplayer --disable-win32 --disable-dvdread \
--enable-fbdev --disable-mencoder --disable-mpdvdkit --disable-x11 \
--disable-sdl --enable-mad --with-madlibdir=/usr/local/arm-linux/lib

make 하기전 소스 파일들을 조금 손 보아야 한다.

Arm용 codec-cfg에 문제가 있어서  x86 용 gcc로 변경한다.
#vi Makefile
280번 라인 수정
$(HOST_CC) $(HOST_CFLAGS) -I. -g codec-cfg.c ..................를
gcc $(HOST_CFLAGS) -I. -g codec-cfg.c ..................으로 고친다.

Arm용으로 컴파일한 mad나 termcap라이브러리를 참조할 수 있게한다.
#vi config.mak
111번 라인 수정
TERMCAP_LIB=-Itermcap -L/usr/local/arm/termcap/lib으로 수정

155번 라인 수정
MAD_LIB=-Imad -L/usr/local/arm/libmad/lib 으로 수정


역시 mad관련 헤드파일의 경로를 올바르게 지정해준다.
#vi libmpcodecs/ad_libmad.c
23번 라인 수정
#include<mad.h> 을
#include "/usr/local/arm/libmad/include/mad.h"로 수정한다.

이제 컴파일하고 시스템 사양에 따라 기다리는 일만 남았다.
#make
...............

#ls -l mplayer
-rwxr-xr-x  1 root root 10425412 Feb 23 16:37 mplayer
mplayer 실행 파일이 생긴 것을 알수있다. ^_^
#file mplayer
mplayer: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.19, statically linked, not stripped

make install을 하면 strip 관련 에러가 난다. make 까지만 하고 직접 strip한다.
#armv5l-linux-strip mplayer
#ls -l mplayer
-rwxr-xr-x  1 root root 5362716 Feb 23 16:43 mplayer
파일 용량을 반정도 줄일 수 있다.

에러 메시지

다음은 make관련 에러 메시지를 정리해 보았다.
위 내용대로 하였다면 아래 에러는 나오지 않아야 정상이다.

에러 - codec-cfg.c:500: for each function it appears in.)
codec-cfg.c:501: `builtin_audio_codecs' undeclared (first use in this function)
make: *** [codec-cfg.o] Error 1
해결 - Makefile에서 codec-cfg관련 부분을 수정해야한다.

에러 - /usr/lib/libtermcap.a(termcap.o)(.text+0x25): R_ARM_PC24 relocation against SEC_MERGE section
collect2: ld returned 1 exit status
make: *** [mplayer] 오류 1
해결 - Arm용 termcap 관련 라이브러리를 설치한다.

에러 - ad_libmad.c:41: confused by earlier errors, bailing out
make[1]: *** [ad_libmad.o] Error 1
make[1]: Leaving directory `/root/download/MPlayer-1.0pre7/libmpcodecs'
make: *** [libmpcodecs/libmpcodecs.a] Error 2
해결 - libmpcodecs/ad_libmad.c 파일에서 헤드파일 경로을 수정해야 한다.

에러 - /usr/local/arm-linux/lib/gcc-lib/arm-linux/3.2.1/../../../../arm-linux/bin/ld: cannot find -lmad
collect2: ld returned 1 exit status
make: *** [mplayer] Error 1
해결 - config.mak파일에서 mad 라이브러리 경로를 수정해야 한다.

실행하기

./mplayer -vo fbdev -ac mad test.mpg(재생할 파일명)
-ac 옵션을 주고 mad사용해서 돌리면 확실히 낫다.


참고
falinux.com의  termcap강좌, kelp mplayer 관련 글

'dev, tech > embedded' 카테고리의 다른 글

보드에 SDL library 포팅하기  (0) 2006.08.11
SDL  (0) 2006.08.11
ffmpeg download  (0) 2006.08.10
FFmpeg  (0) 2006.08.02
Q: get_user() 함수와 put_user() 함수는 어떻게 사용..  (0) 2006.07.28

댓글