EZ-AU1200 소개 페이지에서도 말씀을 드렸습니다만 MIPS core 를 사용했다는 점입니다. MIPS core는 다른 임베디드용 MCU보다 메모리 억세스 처리가 빨라서 메모리 사용이 많은 프로그램, 예를 들어 그래픽 프로그램이나 멀티미디어 프로그램에 적합합니다. 또한 EZ-AU1200은 DDR 버스의 시스템 연결 방식과 내부적인 주변 IPCore 좋아서 더욱 멀티미디어에 강하다고 합니다. 이번에는 EZ-AU1200 보드를 이용하여 동영상을 재생하는 방법을 알아 보도록 하겠습니다.
냉각 팬도 없는 작은 임베디드 보드에서 동영상이 재생되는 것을 보면 참 신기합니다. ^^
필요 파일 준비
EZ-AU1200용 Movie Player를 만들기 위해서는 Au1200 Processor 홈페이지인 RMI Corporation에서 코덱 및 드라이버 파일을 생성할 수 있는 소스파일을 내려 받아야 합니다. 설명의 편의를 위해 RMI Corporation에서 구한 파일을 amdms 라고 하겠습니다. 또한 amdms를 컴파일하기 위해서는 EZ-AU1200 파일의 커널 소스가 필요합니다. 그러므로 amdms와 커널 소스를 아래의 디텍토리에 내려 받은 후 압축을 풀어 컴파일하겠습니다.
디렉토리 내용 | 디렉토리 이름 |
작업 기본 디렉토리 | /au1200/movie_player |
MAE 관련 파일 | /au1200/movie_player/amdms2 |
EZ-AU1200 커널 소스 | /au1200/movie_player/linux |
우선 root 에 /au1200/movie_player 디렉토리부터 생성하겠습니다.
]# cd / ]# mkdir au1200 ]# cd au1200 ]# mkdir movie_player ]# cd movie_player
amdms 소스파일 내려받기
Au1200 Processor 홈페이지인 RMI Corporation에서 Alchemy Developer Support Site를 방문하십시오. 처음 방문하시고 아직 계정이 없으시다면, 아래의 그림을 참고하셔서 (1) 번 [New Registration] 링크를 이용하여 신청하십시오. 계정을 신청하시고 등록되었다면 (2)번 항에 E-Mail 주소를 입력하시고 [Submit] 버튼을 클릭하십시오.
계정으로 로그인하시면 소프트웨어에 대한 리이센스 동의 페이지가 출력됩니다. [ACCEPT Software License Agreement & Access Site] 링크를 클릭하십시오.
페이지가 바뀌면 좌측에 Software 링크 모음이 있습니다. 이 중에 Linux 2.6.11 Release 링크를 클릭하십시오.
화면 하단에 Application Software 부분에 있는 MAI SDK, GPL Codec Source Files and MAE Driver v1.1 ( (ZIP) 를 내려 받습니다. 링크가 페이지 하단에 있으니 참고하여 링크를 찾으세요.
이 글을 작성하는 시점에서의 파일은 amdms2-02.00.30-src.tar.gz 입니다.
amdms2-02.00.30-src.tar.gz 파일을 /au1200/movie_player 디렉토리에 저장한 후 압축을 풀어 놓습니다.
]# tar zxvf amdms2-02.00.30-src.tar.gz ]# mv mv amdms2-02.00.30-src/ amdms2
EZ-AU1200 커널 소스 준비
앞서 말씀드린 바와 같이 amdms를 컴파일하기 위해서는 EZ-AU1200 보드의 커널 소스가 필요합니다. 커널 소스를 /au1200/movie_player/linux 에 풀어 놓은 후, zImage 파일을 생성합니다. EZ-AU1200 커널 소스는 자료실 중 EZ-AU1200 에서 최신 버전을 구하실 수 있습니다.
]# tar zxvf linux-2.6.21.tar.gz ]# mv linux-2.6.21/ linux // 이후에 커널 이미지를 만드는 과정은 EZ보드 통합 메뉴얼 중 커널 이미지 제작 및 설치 글을 참고하여 주십시오. // 설명을 제외한 zImage 파일 생성 과정만 정리합니다. ]# cd linux ]# ./falinux-config.sh ez-au1200 ]# make menuconfig // 변경이 필요한 내용을 선택 및 수정 ]# make clean ]# make zImage // 에러 없이 아래와 같이 이미지 파일이 생성되었다는 메시지가 나오면 정상입니다. mipsel-linux-objcopy -O binary arch/mips/boot/compressed/images/zImage arch/mips/boot/compressed/images/zImage.bin ]#
amdms 소스 파일 수정
amdms를 컴파일하기 위해서는 먼저 mips core에 맞추어 Makefile 과 몇 가지 c 파일을 수정해 주어야 합니다. amdms의 소스 디텔토리로 이동한 후, 수정 작업을 하겠습니다.
]# cd /au1200/movie_player/amdms2
Makefile 수정
Makefile을 수정해야 하는데, 파일에 쓰기 속성이 없습니다. 먼저 쓰기 속성으로 변경합니다. 이후에 에디터로 아래의 내용을 참고하여 수정합니다.
]# chmod 644 Makefile
]# vi Makefile
- ARCHNAME 수정
48 ARCHNAME?=$(strip $(shell uname -m)) // 이 행의 내용을
48 ARCHNAME?=mips // 로 수정 - 103행의 컴파일러를 지정하는 주석을 없애 줍니다.
103 # TARGET_PREFIX=mipsel-linux- // 이 행의 내용을
103 TARGET_PREFIX=mipsel-linux- // 로 수정 - 커널 소스의 위치를 수정해 줍니다.
109 KERNELSRC?=$(BUILDSDIR)/../../Travis/linux26/linux26-cvs // 이 행의 내용을
109 KERNELSRC?=/au1200/movie_player/linux // EZ-AU1200 커널 소스 디렉토리로 수정 - 디바이스 드라이버를 컴파일 하기 위해 all: 부분을 윗부분에 설정해 놓은 all:로 대치합니다.
193 #all: $(subdirs-build) fbio mae-driver // 이 행과
194 all: $(subdirs-build) fbio // 이 행의 주석 위치를
193 all: $(subdirs-build) fbio mae-driver // 이렇게 서로 바꾸어 줍니다.
194 #all: $(subdirs-build) fbio // 이 행이 주석으로 취소 - 아키텍쳐 이름을 지정을 위해 아래의 내용을 수정합니다.
236 make -C $(patsubst %-build,%,$@) BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSDIR) GCFLAGS= "$(GCFLAGS)" // 이 행의 내용을
236 make -C $(patsubst %-build,%,$@) ARCHNAME=$(ARCHNAME) BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSDIR) GCFLAGS="$(GCFLAGS)" // 로 수정
241 @ make -C $(patsubst %-clean,%,$@) clean BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSDIR)
// 이 행의 내용을
241 @ make -C $(patsubst %-clean,%,$@) clean ARCHNAME=$(ARCHNAME) BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSDIR) // 로 수정
246 @ make -C $(patsubst %-install,%,$@) install BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSD IR)
// 이 행의 내용을
246 @ make -C $(patsubst %-install,%,$@) install ARCHNAME=$(ARCHNAME) BUILD_MODE=$(BUILD_MODE) BUILDSDIR=$(BUILDSDIR) // 로 수정
system/lib/travissec/Makefile 수정
역시 쓰기 속성를 추가한 후 수정합니다.
]# chmod 644 system/lib/travissec/Makefile
]# vi system/lib/travissec/Makefile
- TARGET_PREFIX 수정
34 TARGET_PREFIX= // 이 행의 내용을
34 TARGET_PREFIX=mipsel-linux- // 로 수정
mae/mae-driver-2/au1xxx_mae.c 수정
PHYSCAL 어드레스를 0x4000000(64M 이후) 번지 부터 영상쪽에서 사용하는 메모리로 매핑해 주기 위해 mae/mae-driver-2/au1xxx_mae.c 파일을 수정합니다.
역시 쓰기 속성를 추가한 후 수정합니다.]# chmod 644 mae/mae-driver-2/au1xxx_mae.c
]# vi mae/mae-driver-2/au1xxx_mae.c
- #include 문 수정
61 #include <linux/module.h> 62 #include <linux/config.h> // 을 아래와 같이 변경합니다. 61 #include <linux/kernel.h> 62 #include <linux/module.h> 63 #if 0 // 2.6.11 64 #include <linux/config.h> 65 #else // 2.6.21 66 #include <linux/autoconf.h> 67 #endif
- PHYSCAL 어드레스를 지정합니다.
100 // Linux 2.6 - set the start to 48M 101 #define MAE_PHYS_ADDRESS 0x3000000 // 을 아래와 같이 주석 처리합니다. 100 // Linux 2.6 - set the start to 48M 101 // #define MAE_PHYS_ADDRESS 0x3000000
100 // Linux 2.6 - set the start to 48M 101 #define MAE_PHYS_ADDRESS 0x3000000 102 103 #else // 을 아래와 같이 주석 처리합니다. 100 // Linux 2.6 - set the start to 48M 101 // #define MAE_PHYS_ADDRESS 0x3000000 102 103 //#else
- 소스를 수정합니다.
127 static unsigned int mae_phys_address = MAE_PHYS_ADDRESS; /* start address set to ... 128 static unsigned int mae_xsize = 640; 129 static unsigned int mae_ysize = 480; 130 static unsigned int mae_bpp = 16; 131 static unsigned int size_rgb_frame; 132 static unsigned int size_rgb_frames_base; // 를 아래와 같이 주석 처리합니다. 127 // static unsigned int mae_phys_address = MAE_PHYS_ADDRESS; /* start address set to ... 128 // static unsigned int mae_xsize = 640; 129 // static unsigned int mae_ysize = 480; 130 // static unsigned int mae_bpp = 16; 131 // static unsigned int size_rgb_frame; 132 // static unsigned int size_rgb_frames_base;
138 MODULE_PARM(mae_phys_address, "i"); 139 MODULE_PARM(mae_xsize, "i"); 140 MODULE_PARM(mae_ysize, "i"); 141 MODULE_PARM(mae_bpp, "i"); // 를 아래와 같이 수정합니다. 138 #if 0 139 // Kernel 2.6.11 140 MODULE_PARM(mae_phys_address, "i"); 141 MODULE_PARM(mae_xsize, "i"); 142 MODULE_PARM(mae_ysize, "i"); 143 MODULE_PARM(mae_bpp, "i"); 144 #else 145 146 147 #if 1 148 #define DRV_VERSION "2.20" /* must be exactly four chars */ 149 150 // Kernel 2.6.21 151 int mae_phys_address = MAE_PHYS_ADDRESS; 152 module_param(mae_phys_address, int, 0444); 153 MODULE_PARM_DESC(mae_phys_address, "MAE Phys Address"); 154 155 int mae_xsize = 1024; 156 module_param(mae_xsize, int, 0444); 157 MODULE_PARM_DESC(mae_xsize, "MAE X Width"); 158 159 int mae_ysize = 768; 160 module_param(mae_ysize, int, 0444); 161 MODULE_PARM_DESC(mae_ysize, "MAE Y Width"); 162 163 int mae_bpp = 16; 164 module_param(mae_bpp, int, 0444); 165 MODULE_PARM_DESC(mae_bpp, "MAE BPP Depth"); 166 167 MODULE_AUTHOR("AMD"); 168 MODULE_DESCRIPTION("AMD MAE Driver"); 169 MODULE_LICENSE("GPL"); 170 MODULE_VERSION(DRV_VERSION); 171 172 #endif 173 174 #endif
3296 irqreturn_t mae_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3297 { // 를 아래와 같이 수정합니다. 3296 //irqreturn_t mae_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3297 static irqreturn_t mae_interrupt_handler(int irq, void *dev_id) 3298 {
3469 irqreturn_t swcnt_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3470 { // 를 아래와 같이 수정합니다. 3469 // irqreturn_t swcnt_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3470 irqreturn_t swcnt_interrupt_handler(int irq, void *dev_id) 3471 {
3559 #ifdef USE_LCD 3560 irqreturn_t lcd_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3561 { // 를 아래와 같이 수정합니다. 3559 #ifdef USE_LCD 3560 // irqreturn_t lcd_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3561 irqreturn_t lcd_interrupt_handler(int irq, void *dev_id) 3562 {
3661 irqreturn_t lcd_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3662 { // 를 아래와 같이 수정합니다. 3661 // irqreturn_t lcd_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs) 3662 irqreturn_t lcd_interrupt_handler(int irq, void *dev_id) 3663 {
mae/mae-driver-2/build-2.6/Makefile 수정
역시 쓰기 속성를 추가한 후 수정합니다.
]# chmod 644 mae/mae-driver-2/build-2.6/Makefile
]# vi mae/mae-driver-2/build-2.6/Makefile
- TARGET_PREFIX 수정
97 static __inline__ int __ilog2(unsigned int x) 98 { 99 int lz; 100 101 asm volatile ( 102 ".settnoreordernt" 103 ".settnoatnt" 104 ".settmips32nt" 105 "clzt%0,%1nt" 106 ".settmips0nt" 107 ".settatnt" 108 ".settreorder" 109 : "=r" (lz) 110 : "r" (x)); 111 112 return 31 - lz; 113 } // 를 아래와 같이 모두 주석 처리합니다. // 이유는 Kernel 2.6.21에서는 이미 커널에 구현되어 있기 때문에 필요 없습니다. 97 #if 0 98 static __inline__ int __ilog2(unsigned int x) 99 { 100 int lz; 101 102 asm volatile ( 103 ".settnoreordernt" 104 ".settnoatnt" 105 ".settmips32nt" 106 "clzt%0,%1nt" 107 ".settmips0nt" 108 ".settatnt" 109 ".settreorder" 110 : "=r" (lz) 111 : "r" (x)); 112 113 return 31 - lz; 114 } 115 #endif
mae/mae-driver-2/au1000.h 수정
컴파일 에러를 막기 위해 au1000.h 에서 __ilog2()을 삭제하거나 주석 처리합니다.
]# chmod 644 mae/mae-driver-2/au1000.h
]# vi mae/mae-driver-2/au1000.h
- #include 문 수정
96 /* Return the bit position of the most significant 1 bit in a word */ 97 static __inline__ int __ilog2(unsigned int x) --> 주석 처리합니다. 98 { 99 int lz; 100 101 asm volatile ( 102 ".settnoreordernt" 103 ".settnoatnt" 104 ".settmips32nt" 105 "clzt%0,%1nt" 106 ".settmips0nt" 107 ".settatnt" 108 ".settreorder" 109 : "=r" (lz) 110 : "r" (x)); 111 112 return 31 - lz; 113 } 를 아래와 같이 주석 처리합니다. 96 /* Return the bit position of the most significant 1 bit in a word */ 97 #if 0 98 static __inline__ int __ilog2(unsigned int x) 99 { 100 int lz; 101 102 asm volatile ( 103 ".settnoreordernt" 104 ".settnoatnt" 105 ".settmips32nt" 106 "clzt%0,%1nt" 107 ".settmips0nt" 108 ".settatnt" 109 ".settreorder" 110 : "=r" (lz) 111 : "r" (x)); 112 113 return 31 - lz; 114 } 115 #endif
amdms 컴파일
파일을 수정하시느라고 고생이 많으셨습니다. ^^; 이제 make 를 실행하여 amdms 를 컴파일하겠습니다.
]# make ...... LD [M] /au1200/movie_player/amdms2/mae/mae-driver-2/build-2.6/../mae-driver.o Building modules, stage 2. MODPOST 1 modules LD [M] /au1200/movie_player/amdms2/mae/mae-driver-2/build-2.6/../mae-driver.ko make[2]: Leaving directory `/au1200/movie_player/linux' make[1]: Leaving directory `/au1200/movie_player/amdms2/mae/mae-driver-2/build-2.6' ]#
에러없이 컴파일이 완료되면 mipsrel 디렉토리에 EZ-AU1200에서 동영상을 재생하기 위해 필요한 디바이스 드라이버 파일 및 코덱, 동적 라이브 파일과 동영상을 재생해 주는 플레이어 까지 생성됩니다. 이 디렉토리의 파일을 EZ-Board 보드에 복사한 후 실행하면 되겠습니다.
동영상 재생
동영상 관련 파일 준비
본 글에서는 EZ-AU1200 보드에서 nfs 로 개발 호스트의 디렉토리를 마운트한 후, 동영상을 재생하겠습니다. 우선 nfs 공유 디렉토리에 플레이어와 라이브러리 파일, 디바이스 드라이버 파일을 복사하겠습니다.
]# cp maiplayer /[nfs 공유 디렉토리]/ ]# cp *.so /[nfs 공유 디렉토리]/ ]# cp *.ko /[nfs 공유 디렉토리]/테스트를 위해 동영상 재생 관련 파일 뿐만 아니라 동영상 파일, test.mpg 를 복사해 놓습니다. 재생하려는 동영상은 mpeg-2 로 만들어져야 하며, 테스트의 도움을 드리기 위해 샘플 동영상을 첨부해 놓겠습니다.
드라이버 관련 디바이스 노드를 생성하는 스크립트 파일. nodes.sh 파일을 미리 준비합니다.
]# cd /[nfs 공유 디렉토리] ]# vi nodes.sh]# chmod 777 nodes.sh --> 실행 가능하도록 모드 변경#!/bin/sh echo Creating device nodes: fb, mae, dsp, mixer... if [ -c /dev/fb0 ]; then echo Removing fb0 and fb1... rm -f /dev/fb0 rm -f /dev/fb1 echo "Recreating fb0(29,0) and fb1(29,1)..." fi [ ! -c /dev/fb0 ] && mknod /dev/fb0 c 29 0 [ ! -c /dev/fb1 ] && mknod /dev/fb1 c 29 1 if [ -c /dev/mae ]; then echo Removing mae... rm -f /dev/mae echo "Recreating mae(251,2)..." fi [ ! -c /dev/mae ] && mknod /dev/mae c 251 2 [ ! -c /dev/dsp ] && mknod /dev/dsp c 14 3 [ ! -c /dev/mixer ] && mknod /dev/mixer c 14 0 echo Nodes created.디바이스 드라이버를 위한 메모리 확보
아래의 작업은 EZ-AU1200에서의 작업입니다. 제일 먼저 동영상 재생을 위해 커널 외에 화면 출력을 담당하는 디바이스 드라이버나 기타 프로그램을 위해 메로미를 확보해 주어야 합니다. 이렇게 하기 위해 EZ-BOOT 모드의 set 메뉴를 이용하여 메모리 용량이 96M 이상으로 설정되어 있다면 96M로 하향 조정해 줍니다. 즉, 96M는 커널이 사용하게 해 주고, 나머지를 다른 쪽에서 활용할 수 있도록 해 준다는 것이죠.
아래의 작업은 EZ-AU1200에서의 작업입니다. 제일 먼저 동영상 재생을 위해 EZ-보드 커널에 충분한 메모리를 확보해 주어야 합니다. 이렇게 하기 위해 EZ-BOOT 모드의 set 메뉴를 이용하여 메모리 용량을 96M로 확장해 줍니다.
WELCOME EZBOOT V2.2.48 (FALINUX Co.,Ltd) ..........AU1250(EZ-AU1200) Program by You Young-chang, Oh Jae-Kyoung, Jang Hyung-Gi Last Modify Apr 25 2008 Detect EON29LV400_B Flash : vid=7F pid=22BA SIZE 4-Mbits [512-Kbytes] Detect Samsung NAND 128M 3.3V 8 bit Flash : vid=EC pid=F1 SIZE 128-Mbytes (page=2048, block=128K) Quickly Autoboot [ENTER] / Goto BOOT-MENU press [space bar]. --> 스페이스 키를 누릅니다. AX88796B MAC : [ 00 FA 01 A2 33 15 ] AX88796B_Init : OK! EZBOOT>set ^^; 1) mac address : 00:FA:01:A2:33:15 2) local ip : 192.168.10.71 3) local netmask : 255.255.255.0 4) local gateway : 192.168.10.1 5) server ip : 192.168.10.51 6) zImage file name : zImage.ez-au1250 7) ram disk file name : ramdisk-1.11-16M-mipsel.gz 8) boot loader file name : ezboot.ez-au1250 9) logo image file name : 10) auto execute full name : 11) autoboot wait time : 3 12) copy ramdisk [Y/N] : N 13) arm kernel arch number : 2007 14) nand part (B,C,L,K,R,A): 0,1,0,3,5,55 15) watchdog (sec, off=0) : 0 16) KCMD 1 : mem=128M <-- 128M로 설정되어 있습니다. 96M로 조정하겠습니다. 17) KCMD 2 : noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 18) KCMD 3 : console=ttyS0,115200 19) KCMD 4 : video=au1200fb:panel:11 20) KCMD 5 : 21) KCMD 6 : 22) KCMD 6 : L) Load default LF) load KCMD2 root=flash LR) load KCMD2 root=ramdisk S) Save to flash P) aPply & exit Q) Quit Select >>16 16. KCMD 1 : mem=128M new value : 96M <-- 96M로 입력했습니다. ^^; 1) mac address : 00:FA:01:A2:33:15 2) local ip : 192.168.10.71 3) local netmask : 255.255.255.0 4) local gateway : 192.168.10.1 5) server ip : 192.168.10.51 6) zImage file name : zImage.ez-au1250 7) ram disk file name : ramdisk-1.11-16M-mipsel.gz 8) boot loader file name : ezboot.ez-au1250 9) logo image file name : 10) auto execute full name : 11) autoboot wait time : 3 12) copy ramdisk [Y/N] : N 13) arm kernel arch number : 2007 14) nand part (B,C,L,K,R,A): 0,1,0,3,5,55 15) watchdog (sec, off=0) : 0 16) KCMD 1 : 96M 17) KCMD 2 : noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 18) KCMD 3 : console=ttyS0,115200 19) KCMD 4 : video=au1200fb:panel:11 20) KCMD 5 : 21) KCMD 6 : 22) KCMD 6 : L) Load default LF) load KCMD2 root=flash LR) load KCMD2 root=ramdisk S) Save to flash P) aPply & exit Q) Quit Select >> s <-- 변경된 내용을 저장합니다. ...write 32768 complete ...verify complete ...Saved^^; 1) mac address : 00:FA:01:A2:33:15 2) local ip : 192.168.10.71 3) local netmask : 255.255.255.0 4) local gateway : 192.168.10.1 5) server ip : 192.168.10.51 6) zImage file name : zImage.ez-au1250 7) ram disk file name : ramdisk-1.11-16M-mipsel.gz 8) boot loader file name : ezboot.ez-au1250 9) logo image file name : 10) auto execute full name : 11) autoboot wait time : 3 12) copy ramdisk [Y/N] : N 13) arm kernel arch number : 2007 14) nand part (B,C,L,K,R,A): 0,1,0,3,5,55 15) watchdog (sec, off=0) : 0 16) KCMD 1 : 96M 17) KCMD 2 : noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 18) KCMD 3 : console=ttyS0,115200 19) KCMD 4 : video=au1200fb:panel:11 20) KCMD 5 : 21) KCMD 6 : 22) KCMD 6 : L) Load default LF) load KCMD2 root=flash LR) load KCMD2 root=ramdisk S) Save to flash P) aPply & exit Q) Quit Select >> q <-- set 메뉴를 빠져 나갑니다. EZBOOT>rst <-- 재 부팅합니다. WELCOME EZBOOT V2.2.48 (FALINUX Co.,Ltd) ..........AU1250(EZ-AU1200) Program by You Young-chang, Oh Jae-Kyoung, Jang Hyung-Gi Last Modify Apr 25 2008 Detect EON29LV400_B Flash : vid=7F pid=22BA ........... Welcome to FALinux (www.falinux.com) Linux Kernel 2.6.21-falinux falinux login: root ]$동영상 재생
이제 진짜 동영상을 재생해 보겠습니다. 뭐 이렇게 복잡한지 말이죠. ^^; EZ-AU1200에서 개발 호스트의 nfs 공유 디렉토리를 마운트합니다.
]$ mount -t nfs -o nolock [개발 호스트 IP]:/[nfs 공유 디렉토리] /mnt/nfs ]$ cd /mnt/nfs ]$ cd /mnt/nfs ]$ ./nodes.sh Creating device nodes: fb, mae, dsp, mixer... Removing fb0 and fb1... Recreating fb0(29,0) and fb1(29,1)... Removing mae... Recreating mae(251,2)... Nodes created. ]$ insmod ./mae-driver.ko MAE memory configured at 96MB, size 15.665MB, max video size 640x480@16bpp AMD Alchemy Au1200 MAE driver, version 2 ]$ ./maiplayer auto test.mpg <--- 동영상 재생 실행문장 처음에 보여 드린 동영상과 같이 샘플 동영상이 재생됩니다.
근데 윗분 프리첼님처럼 같은 문제가 발생했습니다.
vi mae/mae-driver-2/build-2.6/Makefile 부분에서 말씀하시는 그러한 부분이 없는듯 합니다.
그래서 수정하려고 해도 수정할 수가 없네요.. 그냥 추가를 하면 안될것 같은데요..
혹시나 해서 화면 캡쳐해서 올려드립니다 ^^ 빠른 처리 부탁드립니다. 수고하세요
첨부파일은
]# chmod 644 mae/mae-driver-2/build-2.6/Makefile
]# vi mae/mae-driver-2/build-2.6/Makefile
내용 입니다.
참고로 fedora8 kernel-2.6.26.6-49입니다.
해당 Makefile의 경우 52라인 밖에 되지 않는데 강좌에는 다른 부분이 설명 되어 있는듯 합니다.
현재 이부분을 어떻게 수정해야 할지.. 망설이고 있습니다.
또한 mae/mae-driver-2/au1xxx_mae.c파일에서
// static unsigned int size_rgb_frame;
// static unsigned int size_rgb_frames_base;
부분을 주석처리하라고했는데 이부분을 주석 처리 하는경우 에러가 발생합니다. 확인좀 부탁 드립니다.