centos8安装alsa驱动


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 ([email protected]) (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表示的是不同类型的声卡。例如对于所有的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驱动)