강좌 & 팁
저번 강좌에서는 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
안녕하세요...
alsa-utils-1.0.15 configure 실행시
<변경전>#./configure --host=arm-none-linux-gnueabi --build=i386-linux
<변경후>
CC=arm-none-linux-gnueabi-gcc ./configure --target=arm-linux --host=i686-linux --with-alsa-prefix=/home/kra/alsa-snd/usr/lib --with-alsa-inc-prefix=/home/kra/alsa-snd/usr/include --disable-nls --disable-alsamixer
저는 이렇게 해야 에러가 안나네요.. [헤더파일의 버젼안 맞다고 나오는 문제와 almixer의 ncurses lib 문제 회피용, nls관련 다국어 문제(?) 회피용]
하여튼 감사합니다. 구글에서 검색해본것중 제일 좋았습니다..