クロスコンパイルはテストLinuxを使用してALSAオーディオツールalsa-lib-1.2とalsa-utils-1.2.2を使用します.

24131 ワード

記事の目次
  • 公式サイト
  • コンパイルalsa-lib-1.2.2
  • コンパイルalsa-utils-1.2.2
  • コンパイルncurses-622
  • を使用します.
  • 参照リンク
  • 公式サイト
    Advinced Linux Sound Architecture(ALSA)project homepage
    現在の最新バージョンは、alsa-lib-1.2.tar.bz 2 alsa-utils-12.tar.bz 2です.
    コンパイルalsa-lib-1.2.2
    tar xjf alsa-lib-1.2.2.tar.bz2
    cd alsa-lib-1.2.2
    ./configure --help > alsa_help.txt
    
    ヘルプドキュメントを取得:
    Installation directories:
      --prefix=PREFIX         install architecture-independent files in PREFIX
                              [/usr]
      --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                              [PREFIX]
    
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
    
    継続実行コマンド:
    ./configure --prefix=$PWD/tmp --host=arm-linux
    make && make install
    
    エラー:
    timer_hw.c: In function 'snd_timer_hw_open':
    timer_hw.c:249: error: '__kernel_long_t' undeclared (first use in this function)
    timer_hw.c:249: error: (Each undeclared identifier is reported only once
    timer_hw.c:249: error: for each function it appears in.)
    
    カーネルでinclude/asm-generanic/posix_を検索します.types.hは、この定義を含み、alsa-lib-1.2/src/timer/timer_に追加する.local.h
    #ifndef __kernel_long_t
    typedef long        __kernel_long_t;
    typedef unsigned long    __kernel_ulong_t;
    #endif
    
    インストール後のヘッダファイル、ライブラリファイルをコンパイラと開発ボードにコピーします.
    # NFS        
    export XHR_NFS_ROOT=/nfsroot/rootfs-1.20.0
    cp -r tmp/include/* /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
    cp -rd tmp/lib/*so* /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
    cp -rd tmp/lib/*so* $XHR_NFS_ROOT/lib
    
    コンパイルalsa-utils-1.2.2
    tar xjf alsa-utils-1.2.2.tar.bz2
    cd alsa-utils-1.2.2
    ./configure --prefix=$PWD/tmp --host=arm-linux
    
    エラー:
    checking panel.h usability... no
    checking panel.h presence... no
    checking for panel.h... no
    configure: error: required curses helper header not found
    
    クロスコンパイルalsa-utilsはデフォルトではalsamixerが生成されますので、このときはncursesが使用されますが、クロスコンパイルされたncursesライブラリであり、alsa-utilsコールパスに参加しても問題があります.ncursesクロスコンパイルはalsamixerをサポートしていませんので、alsa-utilsをクロスコンパイルする時にconfigureオプションを追加します.–disable-alsamixerは上記のエラーを報告しません.
    加入--disable-alsamixerは配置できます.
    ./configure --prefix=$PWD/tmp --host=arm-linux --disable-alsamixer --with-curses=ncurses --disable-xmlto --disable-nls
    make && make install
    
    メーク時報が間違っています
    alsactl.c: In function 'do_nice':
    alsactl.c:164: error: 'SCHED_IDLE' undeclared (first use in this function)
    alsactl.c:164: error: (Each undeclared identifier is reported only once
    alsactl.c:164: error: for each function it appears in.)
    
    カーネルで検索したinclude/linux/sched.hは、定義を含むalsa-utils-1.2.2/alsactl/alsactl.hに追加する.
    /*
     * Scheduling policies
     */
    #define SCHED_NORMAL            0
    #define SCHED_FIFO              1
    #define SCHED_RR                2
    #define SCHED_BATCH             3
    /* SCHED_ISO: reserved but not implemented yet */
    #define SCHED_IDLE              5
    /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
    #define SCHED_RESET_ON_FORK     0x40000000
    
    再度makeのエラー:
    monitor.c: In function 'monitor':
    monitor.c:431: error: 'IN_NONBLOCK' undeclared (first use in this function)
    monitor.c:431: error: (Each undeclared identifier is reported only once
    monitor.c:431: error: for each function it appears in.)
    
    カーネルで検索したinclude/linux/inotify.hは、定義を含み、alsa-utils-1.2.2/alsactl/list.hに追加する.
    /* Flags for sys_inotify_init1.  */
    #define IN_CLOEXEC O_CLOEXEC
    #define IN_NONBLOCK O_NONBLOCK
    
    再度makeのエラー:
    alsactl-monitor.o: In function `monitor':
    /home/book/xhrStudy/tools/alsa/alsa-utils-1.2.2/alsactl/monitor.c:431: 
    undefined reference to `inotify_init1'
    
    可能な解決方法:
  • 次のコードを追加します.
  • int inotify_init1(int flags)
    {
        int flags1 = 0;
        int inotify_fd = inotify_init();
    
        if ((inotify_fd != -1) && (flags != 0)) 
        {
            if((flags1 = fcntl(inotify_fd, F_GETFL)) != -1)
            {
                fcntl(inotify_fd, F_SETFL, flags1 | flags);
            }
        }
        return inotify_fd;
    }
    
  • または直接にシステムコールを行う(試みなし)
  • #define _GNU_SOURCE
    #include 
    #include 
    
    int inotify_init1(int flags) {
        return syscall(332, flags);
    }
    
    原文で提示されたソフト中断番号は332ですが、3.4.2カーネルを検索したところ、arch/arm/kersnel/call.Sではこのシステムの呼び出し番号は360です.正しいかどうかは分かりません.記録してください.
    arch/arm/kernel/calls.S:372:/* 360 */  CALL(sys_inotify_init1)
    arch/arm/include/asm/unistd.h:389:#define __NR_inotify_init1  (__NR_SYSCALL_BASE+360)
    
    alsa-utils-1.2.2バージョンが新すぎて、多くの記号が定義されていないので、alsa-utils-1.0.27.2に変更することにしました.コンパイル方法は同じです.エラーがないので、実行可能ファイルを開発ボードにコピーします.
    cp -d tmp/bin/* $XHR_NFS_ROOT/bin
    cp tmp/sbin/* $XHR_NFS_ROOT/sbin
    
    コンパイルncurses-6.2
    Announcing ncurses 6.2(Download)Index of/gnu/ncurses
    tar xzf ncurses-6.2.tar.gz
    cd ncurses-6.2
    ./configure --prefix=$PWD/tmp --host=arm-linux --with-shared
    make && make install
    
    メークエラー:
    make[1]Enttering directory‘/home/book/xhrStudy/tools/alsa/ncurses-6.2/progs’mkdir-p/home/book/xhrStudy/tools/tools/ncurses/ncurses-6/tmpn/sun/usto/bir/bir/bir/bin/bin/bin/bin/bistastall-c-totototoshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshatototototototototototototototototototose the format of the input file`/home/book/xhrStudy/tools/alsa/ncurses-622/tmp/bin/tic'/usr/bin//install:strip process terminated abnormally Makefile:202:recipe for target‘install.progs’failed
    実行するのは/usr/bin/installです.明らかにインストールプログラムに問題があります.vim Makefile検索installが65行目を発見しました.
    INSTALL    = /usr/bin/install -c
    
    root~: grep "echo tic" * -nR
    progs/Makefile:176:actual_tic       = `echo tic$x|       $(TRANSFORM)`
    progs/Makefile.in:176:actual_tic       = `echo tic$x|       $(TRANSFORM)`
    
    解決できませんでした.時間があれば試してみます.まずncurses-599をインストールして使用します.インストール方法は同じです.エラーはありません.ヘッダファイル、ライブラリファイルをコンパイラとルートファイルシステムにコピーします.
    cp -r tmp/include/* /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
    cp -rd tmp/lib/*so* /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
    cp -rd tmp/lib/*so* $XHR_NFS_ROOT/lib
    cp -rd tmp/share $XHR_NFS_ROOT$PWD/tmp/
    
    使用
    mkdir /dev/snd
    cd /dev/snd/
    ln -s /dev/controlC0 
    ln -s /dev/pcmC0D0p 
    ln -s /dev/pcmC0D0c
    
    レコードを使う
    arecord -d 20 -c 2 -t wav -r 44100 -f "Signed 16 bit Little Endian" test.wav
     20    (-d 20),   (-c 2),    44.1kHz   Wave    
    
    applayを使って録音を再生する
    aplay test.wav
    
    エラー:
    /xhr/sound:arcocorded test.wav ALSA lib conf.cc:4081:(sndon figuuuuuuuuuudatetetu)Cannot access file/home/book/xhrStuuudy/tools/alsa-lib-1.1.2/tmpmp/shre/alalalalalsasasasa/alalalalalalalalalalalalalalalalalaaaapppppppppppppppdadadadadadadadadadadadadadadadadadashshshshshshaaaappppppppppppppppppppppppp2:audio open error:No such file or directory
    解決方法:nfsに同じパス/home/book/xhrStudy/tools/alsa/alsa-lib-1.1.2/tmpを追加し、libでコンパイルしたshareディレクトリを配置します.
    参照リンク
    Advinced Linux Sound Architecture(ALSA)project homepage alsa-lib-12.alsa-utils-12.undefined reference to`inotiy_init 1’Announcing ncurses 6.2(Download)Index of/gnu/ncurses fmpegクロスコンパイルmake install:strip:Unbale to recognise the format the input file解決strip:Unise to cognise the format問題