저번 강좌에서는 GCC 3.4.3 버젼에서 컴파일 하는 방법을 설명하였습니다.


이번에는 현재 EZ-S3C6410 보드에서 사용되는 GCC 4.3.2 버전으로 컴파일하는 방법과 ARM 보드에 올려 동작시키는 방법을 설명하도록 하겠습니다.


1. ALSA 라이브러리 다운로드 받기


    http://alsa.cybermirror.org/lib/


    alsa-lib-1.0.15.tar.bz2


    [ 컴파일 환경 ]

    우분투 9.10

    크로스컴파일러 : gcc 4.3.2

    작업디렉토리 : /project


    [컴파일]

[root@hw29:#] mkdir project

[root@hw29:#] cd project

[root@hw29:project#] mkdir usr

[root@hw29:project#] chmod 777 usr


        [root@hw29:project#] ls

        alsa-lib-1.0.15.tar.bz2 usr


[root@hw29:project#] tar -jxvf alsa-lib-1.0.15.tar.bz2

[root@hw29:project#] cd alsa-lib-1.0.15

        [root@hw29:alsa-lib-1.0.15#] ./configure --host=arm-generic-linux-gnueabi --build=i386-linux --disable-python

[root@hw29:alsa-lib-1.0.15#] make

[root@hw29:alsa-lib-1.0.15#] make  DESTDIR=/project/usr/  install



2. ALSA 유틸리티 컴파일 하기


    http://alsa.cybermirror.org/utils/

alsa-utils-1.0.15.tar.bz2


http://www.filewatcher.com/m/alsa-utils.alsaconf.diff.gz.899.0.0.html

  alsa-utils.alsaconf.diff.gz


위의 2개의 파일을 다운로드 받습니다.


     [root@hw29:project#] ls

        alsa-lib-1.0.15.tar.bz2 usr alsa-utils-1.0.15.tar.bz2 alsa-utils.alsaconf.diff.gz


   [root@hw29:#] tar -jxvf alsa-utils-1.0.15.tar.bz2

   [root@hw29:#] cd alsa-utils-1.0.15

   [root@hw29:alsa-utils-1.0.15#] zcat ../alsa-utils.alsaconf.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit

   [root@hw29:alsa-utils-1.0.15#] ./configure --host=arm-generic-linux-gnueabi --build=i386-linux

   [root@hw29:alsa-utils-1.0.15#] make

   [root@hw29:alsa-utils-1.0.15#] make  DESTDIR=/project/usr/  install

   [root@hw29:alsa-utils-1.0.15#] cd /project


     [root@hw29:project#] cd usr

     [root@hw29:usr#] ls

     bin include lib sbin share


위와 같이 /project/usr 디렉토리에 파일들이 만들어졌다면 ALSA 관련 포팅을 모두 하였습니다.

이제 컴파일한 ALSA 라이브러리와 유틸리티를 ARM 보드에서 동작시키는 방법을 설명하도록 하겠습니다.


타겟보드와 리눅스머신이 NFS 로 연결되어 있다고 가정하에서 설명하도록 하겠습니다.


위의 /project/usr 디렉토리를 /nfs 에 복사를 합니다.

[root@hw29:project#] cp -a usr  /nfs

        [root@hw29:project#] cd /nfs/usr

        [root@hw29:usr#] ls

        bin include lib sbin share


**) 이 부분이 제일 중요합니다. 

      만약 udev 를 사용한다면 상관없지만 udev를 사용하지 않는다면  Sound 관련 디바이스 장치파일들을 반드시 복사하거나,복사할 수 없다면 아래의 디바이스를 모두 만들어야 합니다.


주번호 부번호 디바이스

116  0 controlC

116 32 controlC

116 64 controlC

116 96 controlC

116  4 hwC0D0  

116  5 hwC0D1  

116  6 hwC0D2  

116  7 hwC0D3  

116 36 hwC1D0  

116 37 hwC1D1  

116 38 hwC1D2  

116 39 hwC1D3  

116 68 hwC2D0  

116 69 hwC2D1  

116 70 hwC2D2  

116 71 hwC2D3  

116 100 hwC3D0  

116 101 hwC3D1  

116 102 hwC3D2  

116 103 hwC3D3  

116  8 midiC0D0

116  9 midiC0D1

116 10 midiC0D2

116 11 midiC0D3

116 12 midiC0D4

116 13 midiC0D5

116 14 midiC0D6

116 15 midiC0D7

116 40 midiC1D0

116 41 midiC1D1

116 42 midiC1D2

116 43 midiC1D3

116 44 midiC1D4

116 45 midiC1D5

116 46 midiC1D6

116 47 midiC1D7

116 72 midiC2D0

116 73 midiC2D1

116 74 midiC2D2

116 75 midiC2D3

116 76 midiC2D4

116 77 midiC2D5

116 78 midiC2D6

116 79 midiC2D7

116 104 midiC3D0

116 105 midiC3D1

116 106 midiC3D2

116 107 midiC3D3

116 108 midiC3D4

116 109 midiC3D5

116 110 midiC3D6

116 111 midiC3D7

116 24 pcmC0D0c

116 16 pcmC0D0p

116 25 pcmC0D1c

116 17 pcmC0D1p

116 26 pcmC0D2c

116 18 pcmC0D2p

116 27 pcmC0D3c

116 19 pcmC0D3p

116 28 pcmC0D4c

116 20 pcmC0D4p

116 29 pcmC0D5c

116 21 pcmC0D5p

116 30 pcmC0D6c

116 22 pcmC0D6p

116 31 pcmC0D7c

116 23 pcmC0D7p

116 56 pcmC1D0c

116 48 pcmC1D0p

116 57 pcmC1D1c

116 49 pcmC1D1p

116 58 pcmC1D2c

116 50 pcmC1D2p

116 59 pcmC1D3c

116 51 pcmC1D3p

116 60 pcmC1D4c

116 52 pcmC1D4p

116 61 pcmC1D5c

116 53 pcmC1D5p

116 62 pcmC1D6c

116 54 pcmC1D6p

116 63 pcmC1D7c

116 55 pcmC1D7p

116 88 pcmC2D0c

116 80 pcmC2D0p

116 89 pcmC2D1c

116 81 pcmC2D1p

116 90 pcmC2D2c

116 82 pcmC2D2p

116 91 pcmC2D3c

116 83 pcmC2D3p

116 92 pcmC2D4c

116 84 pcmC2D4p

116 93 pcmC2D5c

116 85 pcmC2D5p

116 94 pcmC2D6c

116 86 pcmC2D6p

116 95 pcmC2D7c

116 87 pcmC2D7p

116 120 pcmC3D0c

116 112 pcmC3D0p

116 121 pcmC3D1c

116 113 pcmC3D1p

116 122 pcmC3D2c

116 114 pcmC3D2p

116 123 pcmC3D3c

116 115 pcmC3D3p

116 124 pcmC3D4c

116 116 pcmC3D4p

116 125 pcmC3D5c

116 117 pcmC3D5p

116 126 pcmC3D6c

116 118 pcmC3D6p

116 127 pcmC3D7c

116 119 pcmC3D7p

116  1 seq     

116 33 timer   


만드는 방법은 다음과 같습니다.


[root@hw29:usr#] cd /project

[root@hw29:usr#] mkdir snd

[root@hw29:usr#] chmod 777 snd

[root@hw29:usr#] cd snd


controlC 디바이스 장치파일을 만든다면

[root@hw29:snd#] mknod  controlC  c  116   0


        hwC0D0 디바이스 장치파일을 만든다면

[root@hw29:snd#] mknod  hwC0D0  c  116   4


  pcmC0D0c  디바이스 장치파일을 만든다면

[root@hw29:snd#] mknod  pcmC0D0cc  116   24


  위와 같은 방법으로 모두 만드시면 됩니다.


        [root@hw29:snd#] ls    하셨어 위의 디바이스와 같이 만들어졌는지 확인 하세요.



여기까지 확인하였다면 이제 부터 타겟보드에서 작업을 합니다.


      NFS 마운트


     $] mount -t nfs -o nolock xxx.xxx.xxx.xxx:/nfs /mnt/nfs


     $] cp -a /mnf/nfs/usr ./

     $] cp -a /mnf/nfs/snd /dev


     위와같이 ALSA 라이브러리와 유틸리티와 디바이스 장치파일들을 복사하였다면 ( udev를 사용한다면 디바이스 장치파일을 복사할 필요는 없습니다. ) ALSA를 실행합니다.

    

     $] aplay  test.wav


     

     만약 소리가 나지않으면 amixer 로 볼륨 및 기타 옵션을 조절하시면 됩니다.


     $] amixer -c 0 sset Speaker,0 100% unmute

     $] amixer -c 0 sset Headphone,0 70% unmute

     $] amixer -c 0 sset PCM,0 100% unmute

     $] amixer -c 0 sset 'Line',0 50% unmute