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

  1. ARCHNAME 수정

    48 ARCHNAME?=$(strip $(shell uname -m))  // 이 행의 내용을
    48 ARCHNAME?=mips     // 로 수정

  2. 103행의 컴파일러를 지정하는 주석을 없애 줍니다.

    103 # TARGET_PREFIX=mipsel-linux-  // 이 행의 내용을
    103 TARGET_PREFIX=mipsel-linux-    // 로 수정

  3. 커널 소스의 위치를 수정해 줍니다.

    109 KERNELSRC?=$(BUILDSDIR)/../../Travis/linux26/linux26-cvs  // 이 행의 내용을
    109 KERNELSRC?=/au1200/movie_player/linux    // EZ-AU1200 커널 소스 디렉토리로 수정

  4. 디바이스 드라이버를 컴파일 하기 위해 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             // 이 행이 주석으로 취소

  5. 아키텍쳐 이름을 지정을 위해 아래의 내용을 수정합니다.

    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

  1. 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

  1. #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
          
  2. 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
  3. 소스를 수정합니다.
     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

  1. 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

  1. #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
#!/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.
]# chmod 777 nodes.sh --> 실행 가능하도록 모드 변경

디바이스 드라이버를 위한 메모리 확보

아래의 작업은 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    <--- 동영상 재생 실행

문장 처음에 보여 드린 동영상과 같이 샘플 동영상이 재생됩니다.