linux yum安装驱动,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.h 到include/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
播放器安裝地址:
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
apt-cache search linux-source 和 apt-get install linux-source
5.快速安裝alsa
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表示的是不同類型的聲卡。例如對于所有的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個通道的生意都調節一下。否則會沒有聲音的。經過仔細對比,發現其左右聲道是集中在63與64上的。
另外注意:
在
/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.ko,snd-mixer-oss.ko,snd-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 +
總結
以上是生活随笔為你收集整理的linux yum安装驱动,centos8安装alsa驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++关键字分析系列
- 下一篇: linux 其他常用命令