美文网首页
centos8安装alsa驱动

centos8安装alsa驱动

作者: wit_yuan | 来源:发表于2020-01-02 13:58 被阅读0次

    1.声卡驱动

    1.链接
    2.链接

    尝试在两个平台:CentOS-8-x86_64-1905-dvd1.iso(kernel-4.18.0-80.el8)Fedora-Everything-netinst-x86_64-29-1.2.iso(linux-5.3.11)开启声卡播放声音。

    fedora由于工具比较全,所以可以做先期尝试。而centos由于稳定性高,适合企业级应用,所以最终还是要在它上面跑起来。

    我先点明,其实centos8上支持很多的声卡,所以首先要看是否自己声卡已经被支持了,支持的话就没必要再去安装alsa驱动,下面的内容是我所做过的尝试,最后才发现其实什么都不需要做。

    2.步骤

    先说明一下,这个步骤是按照按照rme声卡驱动的链接来做的,但是实际上,用处不大。所以这章基本上算是浪费掉了。

    alsa官网地址:链接
    alsa-driver地址:链接
    更详细的alsa源码:链接

    1.下载alsa-driver代码

    $ git clone git://git.alsa-project.org/alsa-driver.git
    

    下载完成后,需要经过处理:

    cd alsa-driver
    git checkout build
    git pull origin build
    git checkout mirror
    git pull origin mirror
    git checkout release
    git pull origin release
    
    make ALSAKERNELDIR=../alsa-kernel all-deps
    (if the alsa-kernel-dir is really there)
    aclocal
    autoconf
    ./configure
    make dep
    make
    

    编译该源码需要kernel代码的参与,所以没有的话,可以参照下面的步骤进行安装。

    安装工具:

    $ yum install elfutils-libelf-devel
    

    2.解压

    $  xz -d /lib/modules/4.18.0-80.el8.x86_64/kernel/sound/soundcore.ko.xz 
    $ yum install kernel*
    $ yum install patch
    $ yum install ncurses-devel (安装alsa-utils需要)
    

    下载的内容会在/usr/src/kernels/4.18.0-80.11.2.el8_0.x86_64呈现出来。

    下载过alsa-driver-1.0.25.tar发现编译错误挺多。

    还需要安装:alsa-utils,alsa-libs.

    如果报错缺少version.h,则:
    拷贝include/uapi/linux/dvb/version.hinclude/linux/version.h

    $  ./configure --with-cards=hdspm --with-sequencer=yes --with-kernel=/usr/src/kernels/4.18.0-80.11.2.el8_0.x86_64
    

    播放器安装地址:

    https://blog.csdn.net/weixin_41282397/article/details/80804448

    3.系统

    centos7:链接 注意下载everything版本,这样包含图形界面等所有软件。
    centos6:链接
    centos6内核源码:链接 ,这样不一定对应的是centos6的版本,可以使用yum install kernel-devel安装内核代码。

    centos所有版本:链接

    3.1 问题

    发现在centos6,centos7,centos8上均无法安装alsa-driver,还有一个alsa-driver是使用git维护的,使用aclocal,autoconf等编译方式,这个也没有安装成功。

    alsa-driver在centos上安装错误有.h文件找不到,函数找不到等等错误。

    在centos8上编译alsa-driver-1.0.25主要是centos版本过高,而alsa-driver-1.0.25版本低,故要处理KERNEL_VERSION等宏定义问题。

    centos6,centos7上则要处理io_remap等函数问题。

    3.2 centos成功安装alsa-driver方法

    centos版本:CentOS-7.0-1406-x86_64-Everything.iso

    $ git clone git://git.alsa-project.org/alsa-driver.git
    $ 压缩 tar  -zcvf alsa-driver.tar alsa-driver
    $ 解压 tar -zxvf alsa-driver.tar
    $ git checkout build
    $ git pull origin build
    $ git checkout mirror
    $ git pull origin mirror
    $ git checkout release
    $ git pull origin release
    

    使用命令:

    $  ./utils/setup-alsa-kernel /usr/src/kernels/3.10.0-123.el7.x86-64
    $  cp ../Documentation /usr/src/kernels/3.10.0-123.el7.x86-64/ -rf
    $ ./utils/setup-alsa-kernel  -c /usr/src/kernels/3.10.0-123.el7.x86-64
    $ ./gitcompile
    $ make install
    $ ./snddevices
    

    下一步提示:
    the mixer channels for the alsa driver are muted by default,you would use some alsa or oss mixer to set the appropriate volume

    下载alsa-lib,alsa-firmware,alsa-utils文件:

    $ wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.2.1.2.tar.bz2
    $ wget ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.2.1.tar.bz2
    $ wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.2.1.tar.bz2
    

    可以使用命令:

    $ less SUPPORTED_KERNELs
    

    看支持的内核版本。

    4.尝试ubuntu安装alsa

    4.1 ubuntu18.04

    获取源码:apt-get source linux-image-$(uname -r)

    $  sudo apt-get install dpkg-dev
    

    https://blog.csdn.net/CaspianSea/article/details/43014525

    apt-cache search linux-source 和 apt-get install linux-source

    5.快速安装alsa

    https://alsa.opensrc.org/Quick_Install

    6.fedora安装alsa

    fedore29镜像地址:链接 ,它的内核版本为 linux-5.3.11。

    fedora29的一些关键信息如下:

    $ cat /proc/version 
    Linux version 5.3.11-100.fc29.x86_64 (mockbuild@bkernel03.phx2.fedoraproject.org) (gcc version 8.3.1 20190223 (Red Hat 8.3.1-2) (GCC)) #1 SMP Tue Nov 12 20:41:25 UTC 2019
    $ alsactl -v
    alsactl version 1.1.9
    $ ls /dev/snd
    by-path  controlC0  pcmC0D0c  pcmC0D0p  pcmC0D1c  seq  timer
    $ lspci | grep -i audio
    00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
    $  aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 2: HDSPMx59356d [RME MADI_59356d], device 0: RME MADI [RME MADI]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    $ cat /proc/asound/cards 
     0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                          HDA Intel HDMI at 0xf7e14000 irq 49
     1 [PCH            ]: HDA-Intel - HDA Intel PCH
                          HDA Intel PCH at 0xf7e10000 irq 50
     2 [HDSPMx59356d   ]: HDSPM - RME MADI_59356d
                          RME MADI S/N 0x59356d at 0xf7d00000, irq 17
    $ aplay -Dhw:1,0 -r48000 test.wav
    $ cat /proc/asound/pcm 
    

    另外,如果需要停止当前的alsa服务,则:

    $ sudo /etc/init.d/alsa-utils stop
    

    查看支持的内核版本:

    $ less alsa-driver/SUPPORTED_KERNELS
    

    查看声卡解码芯片:

    $ tail -2 /proc/asound/oss/sndstat
    

    或者:

    $ head -1 /proc/asound/card0/codec#0
    

    在 alsa-driver/alsa-kernel/Documentation/ALSA-Configuration.txt 中查找自己声卡解码芯片对应的model 名字,比如alc655 对应的就是:
    - alc_jack For ALC65x, turn on the jack sense mode

    查看具体的声卡信息:

    $ lshw -C sound
    

    查看声卡模块:

    $ cat sndmodules
    

    使用alsamixer设置参数并且保存:

    $ alsactl store
    

    可以使用命令:

    $ speaker-test -c 6
    

    测试6个声道的声音。

    7.扩展知识

    alsa声卡驱动程序一般命名规则是snd-card-<soundcard>,soundcard表示的是不同类型的声卡。例如对于所有的16位的soundblaster声卡,驱动程序模块为snd-card-sb16。

    如果要做到向后兼容,需要两个模块,snd-pcm-oss和snd-mixer-oss。

    在成功插入了alsa声卡模块后,系统会出现/proc/asound目录。

    在加载了snd-pcm-oss模块之后,也能使用与oss兼容的方式读取声卡,有这样的映射关系:

    alsa设备 oss设备 次设备
    /dev/snd/pcmC0D0 /dev/audio0(/dev/audio) 4
    /dev/snd/pcmC0D0 /dev/dsp0(/dev/dsp) 3
    /dev/snd/pcmC0D1 /dev/adsp(/dev/adsp) 12
    /dev/snd/pcmC1D0 /dev/audio1 20
    /dev/snd/pcmC1D0 /dev/dsp1 19

    为了让alsa正常工作,需要设置一些设备别名,例如:

    设置alsa设备的主设备号,固定为116:

    alas char-major-116  snd
    

    设置oss设备的主设备号,固定为14,这样alsa复用oss设备:

    alas char-major-14  soundcore
    

    建立源码树:
    1.添加mockbuild用户

    $ useradd -s /sbin/nologin mockbuild
    

    2.添加需要用到的工具

    $ yum install audit-libs-devel binutils-devel
    $ yum install elfutils-devel elfutils-libelf-devel
    $ yum install java-devel kabi-dw openssl-devel
    $ yum install perl-devel python3-devel xmlto
    $ yum install python3-docutils
    

    3.安装源码

    $ rpm -iV xxx.src.rpm
    $ cd ~/rpmbuild/SPECS
    $ rpmbuild -bp --target=$(uname -m) kernel.spec
    $ cd ~/rpmbuild/BUILD/..
    $ cp /boot/config-3.10.0-327.el7.x86_64 .config
    $ make oldconfig
    $ make -j2
    $ make modules_install (编译内核模块)
    

    最好加上-V,这样有错误也能显示出来。要注意make -jn的使用,并不是n越大越好啊,如果不指定n的值,在centos上也是容易死机的。

    后面使用:

    $ modprobe snd-pcm-oss.ko
    $ modprobe snd-mixer-oss.ko
    $ modprobe snd-seq-oss.ko
    

    如果报错,可以尝试depmod命令。

    实在不行,可以考虑查看dmesg的输出信息,如果是版本不正确,可以查看include/config/kernel.release里面的版本是否和模块的版本一致。

    最终还是不行,那就只能使用自己编译的系统内核来启动整个系统。

    $ make install
    

    这样可以添加自己的内核程序到整个系统中。也就是在系统启动的时候会多加一个系统的选择。

    下面是查看模块是否被安装到内核中:

    $ lsmod | grep -i "snd"
    

    如果没有被安装,可以到/lib/modules/4.18.0-80.el8.x86_64/modules.dep进一步查看。

    查看具体声卡的信息:

    $ cat /proc/asound/card0/hdsmp
    

    可以看出lineout是打开的。

    要想开机自动加载snd-pcm-oss.ko,snd-mixer-oss.ko,snd-seq-oss.ko,则需要在/etc/modules-load.d/alsa.conf,没有alsa.conf则自己建立,添加如下内容:

    snd-pcm-oss
    snd-mixer-oss
    snd-seq-oss
    

    可以将声音输出来。另外要注意使用alsamixer将64个通道的生意都调节一下。否则会没有声音的。经过仔细对比,发现其左右声道是集中在6364上的。

    另外注意:

    /usr/share/sounds/alsa/中有一些测试信号,例如:Front_Center.wav

    发现使用这个文件播放声音是没有问题的。

    还有一个地方有文件:
    /usr/share/sounds/freedesktop/stereo/complete.oga,不过这个文件是播不了的。

    8.重新建立source-tree并且编译模块与安装

    8.1 找到内核源码并且安装

    $ rpm -iV xxx.src.rpm
    $ cd ~/rpmbuild/SPECS
    $ rpmbuild -bp --target=$(uname -m) kernel.spec
    $ cd ~/rpmbuild/BUILD/..
    $ cp /boot/config-3.10.0-327.el7.x86_64 .config
    $ make oldconfig
    $ make -j2
    $ make modules_install (编译内核模块)
    $ make install
    

    使用make install可以在启动的时候或者在启动之后能将模块插入到/lib/modules/4.18.0-80.el8.x86_64/modules.dep中。如果使用lsmod | grep -i "snd"发现没有被安装,可以在/etc/modules-load.d/alsa.conf(没有alsa.conf则自己添加)添加如下内容:

    snd-pcm-oss
    snd-mixer-oss
    snd-seq-oss
    

    模块snd-pcm-oss.kosnd-mixer-oss.kosnd-seq-oss.ko作用是建立/dev/dsp/dev/audio等节点。其实,最终实验发现声卡hdspm不需要
    这几个节点也是没有关系的。

    声卡最终可以使用:

    $ cat test.wav > /dev/audio
    或者
    $ cat test.wav > /dev/dsp
    

    初步验证是否能工作。

    后期需要使用:

    $ aplay -Dsysdefault:CARD=HDSPMx59356d /usr/share/sounds/alsa/Front_Left.wav
    

    真正能播放出声音才是表明没问题了。

    另外,贴出实验过程中使用的图片:

    $ cat /proc/devices
    
    alsa与sound设备节点
    $ cat /proc/asound/cards
    
    1.jpg
    $ lspci | grep -i audio
    
    2.jpg
    $ aplay -l
    
    3.jpg
    $ aplay -Dhw:0,0 -r44100 test.wav
    
    4.jpg
    $ alsamixer
    
    5.jpg
    $ aplay -L
    
    6.jpg
    $ speaker-test -Dplug:sysdefault -c2
    
    7.jpg
    $ speaker-test -Dsysdefault:CARD=HDSPMx59356d -c2
    
    8.jpg
    $ aplay -Dsysdefault:CARD=HDSPMx59356d test.wav
    
    9.jpg
    $ alsactl -v
    
    10.jpg
    $ 安装 pavucontrol
    
    11.jpg
    直接编译kernel-dev会报错,因为已经不是整个源码树了,估计是担心整个系统由于开发人员的问题而崩溃
    
    12.jpg
    节点与节点的作用
    
    13.jpg
    直接modprobe xx ,发现会导致版本等相关错误而安装不成功,后面就使用源码树编译整个内核来安装模块,就不会有问题了。
    
    14.jpg
    可以查看Makefile来修改linux版本与名称等内容。
    
    15.jpg
    源码树的版本与存放的位置
    
    16.jpg
    查看模块是否在某一个文件中。
    
    17.jpg
    $ cat /proc/asound/oss/sndstat
    
    18.jpg

    9.x11桌面环境

    当前使用的桌面系统环境可以使用:

    $ echo $DESKTOP_SESSION
    gnome
    
    $ xhost +
    

    相关文章

      网友评论

          本文标题:centos8安装alsa驱动

          本文链接:https://www.haomeiwen.com/subject/wdcloctx.html