linux yum安装驱动,centos8安装alsa驱动
1.聲卡驅(qū)動(dòng)
1.鏈接
2.鏈接
嘗試在兩個(gè)平臺(tái):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)開(kāi)啟聲卡播放聲音。
fedora由于工具比較全,所以可以做先期嘗試。而centos由于穩(wěn)定性高,適合企業(yè)級(jí)應(yīng)用,所以最終還是要在它上面跑起來(lái)。
我先點(diǎn)明,其實(shí)centos8上支持很多的聲卡,所以首先要看是否自己聲卡已經(jīng)被支持了,支持的話(huà)就沒(méi)必要再去安裝alsa驅(qū)動(dòng),下面的內(nèi)容是我所做過(guò)的嘗試,最后才發(fā)現(xiàn)其實(shí)什么都不需要做。
2.步驟
先說(shuō)明一下,這個(gè)步驟是按照按照rme聲卡驅(qū)動(dòng)的鏈接來(lái)做的,但是實(shí)際上,用處不大。所以這章基本上算是浪費(fèi)掉了。
alsa官網(wǎng)地址:鏈接
alsa-driver地址:鏈接
更詳細(xì)的alsa源碼:鏈接
1.下載alsa-driver代碼
$ git clone git://git.alsa-project.org/alsa-driver.git
下載完成后,需要經(jīng)過(guò)處理:
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代碼的參與,所以沒(méi)有的話(huà),可以參照下面的步驟進(jìn)行安裝。
安裝工具:
$ 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需要)
下載的內(nèi)容會(huì)在/usr/src/kernels/4.18.0-80.11.2.el8_0.x86_64呈現(xiàn)出來(lái)。
下載過(guò)alsa-driver-1.0.25.tar發(fā)現(xiàn)編譯錯(cuò)誤挺多。
還需要安裝:alsa-utils,alsa-libs.
如果報(bào)錯(cuò)缺少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.系統(tǒng)
centos7:鏈接 注意下載everything版本,這樣包含圖形界面等所有軟件。
centos6:鏈接
centos6內(nèi)核源碼:鏈接 ,這樣不一定對(duì)應(yīng)的是centos6的版本,可以使用yum install kernel-devel安裝內(nèi)核代碼。
centos所有版本:鏈接
3.1 問(wèn)題
發(fā)現(xiàn)在centos6,centos7,centos8上均無(wú)法安裝alsa-driver,還有一個(gè)alsa-driver是使用git維護(hù)的,使用aclocal,autoconf等編譯方式,這個(gè)也沒(méi)有安裝成功。
alsa-driver在centos上安裝錯(cuò)誤有.h文件找不到,函數(shù)找不到等等錯(cuò)誤。
在centos8上編譯alsa-driver-1.0.25主要是centos版本過(guò)高,而alsa-driver-1.0.25版本低,故要處理KERNEL_VERSION等宏定義問(wèn)題。
centos6,centos7上則要處理io_remap等函數(shù)問(wèn)題。
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
看支持的內(nèi)核版本。
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鏡像地址:鏈接 ,它的內(nèi)核版本為 linux-5.3.11。
fedora29的一些關(guān)鍵信息如下:
$ 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
另外,如果需要停止當(dāng)前的alsa服務(wù),則:
$ sudo /etc/init.d/alsa-utils stop
查看支持的內(nèi)核版本:
$ 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 中查找自己聲卡解碼芯片對(duì)應(yīng)的model 名字,比如alc655 對(duì)應(yīng)的就是:
- alc_jack For ALC65x, turn on the jack sense mode
查看具體的聲卡信息:
$ lshw -C sound
查看聲卡模塊:
$ cat sndmodules
使用alsamixer設(shè)置參數(shù)并且保存:
$ alsactl store
可以使用命令:
$ speaker-test -c 6
測(cè)試6個(gè)聲道的聲音。
7.擴(kuò)展知識(shí)
alsa聲卡驅(qū)動(dòng)程序一般命名規(guī)則是snd-card-,soundcard表示的是不同類(lèi)型的聲卡。例如對(duì)于所有的16位的soundblaster聲卡,驅(qū)動(dòng)程序模塊為snd-card-sb16。
如果要做到向后兼容,需要兩個(gè)模塊,snd-pcm-oss和snd-mixer-oss。
在成功插入了alsa聲卡模塊后,系統(tǒng)會(huì)出現(xiàn)/proc/asound目錄。
在加載了snd-pcm-oss模塊之后,也能使用與oss兼容的方式讀取聲卡,有這樣的映射關(guān)系:
alsa設(shè)備
oss設(shè)備
次設(shè)備
/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正常工作,需要設(shè)置一些設(shè)備別名,例如:
設(shè)置alsa設(shè)備的主設(shè)備號(hào),固定為116:
alas char-major-116 snd
設(shè)置oss設(shè)備的主設(shè)備號(hào),固定為14,這樣alsa復(fù)用oss設(shè)備:
alas char-major-14 soundcore
建立源碼樹(shù):
1.添加mockbuild用戶(hù)
$ 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 (編譯內(nèi)核模塊)
最好加上-V,這樣有錯(cuò)誤也能顯示出來(lái)。要注意make -jn的使用,并不是n越大越好啊,如果不指定n的值,在centos上也是容易死機(jī)的。
后面使用:
$ modprobe snd-pcm-oss.ko
$ modprobe snd-mixer-oss.ko
$ modprobe snd-seq-oss.ko
如果報(bào)錯(cuò),可以嘗試depmod命令。
實(shí)在不行,可以考慮查看dmesg的輸出信息,如果是版本不正確,可以查看include/config/kernel.release里面的版本是否和模塊的版本一致。
最終還是不行,那就只能使用自己編譯的系統(tǒng)內(nèi)核來(lái)啟動(dòng)整個(gè)系統(tǒng)。
$ make install
這樣可以添加自己的內(nèi)核程序到整個(gè)系統(tǒng)中。也就是在系統(tǒng)啟動(dòng)的時(shí)候會(huì)多加一個(gè)系統(tǒng)的選擇。
下面是查看模塊是否被安裝到內(nèi)核中:
$ lsmod | grep -i "snd"
如果沒(méi)有被安裝,可以到/lib/modules/4.18.0-80.el8.x86_64/modules.dep進(jìn)一步查看。
查看具體聲卡的信息:
$ cat /proc/asound/card0/hdsmp
可以看出lineout是打開(kāi)的。
要想開(kāi)機(jī)自動(dòng)加載snd-pcm-oss.ko,snd-mixer-oss.ko,snd-seq-oss.ko,則需要在/etc/modules-load.d/alsa.conf,沒(méi)有alsa.conf則自己建立,添加如下內(nèi)容:
snd-pcm-oss
snd-mixer-oss
snd-seq-oss
可以將聲音輸出來(lái)。另外要注意使用alsamixer將64個(gè)通道的生意都調(diào)節(jié)一下。否則會(huì)沒(méi)有聲音的。經(jīng)過(guò)仔細(xì)對(duì)比,發(fā)現(xiàn)其左右聲道是集中在63與64上的。
另外注意:
在
/usr/share/sounds/alsa/中有一些測(cè)試信號(hào),例如:Front_Center.wav
發(fā)現(xiàn)使用這個(gè)文件播放聲音是沒(méi)有問(wèn)題的。
還有一個(gè)地方有文件:
/usr/share/sounds/freedesktop/stereo/complete.oga,不過(guò)這個(gè)文件是播不了的。
8.重新建立source-tree并且編譯模塊與安裝
8.1 找到內(nèi)核源碼并且安裝
$ 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 (編譯內(nèi)核模塊)
$ make install
使用make install可以在啟動(dòng)的時(shí)候或者在啟動(dòng)之后能將模塊插入到/lib/modules/4.18.0-80.el8.x86_64/modules.dep中。如果使用lsmod | grep -i "snd"發(fā)現(xiàn)沒(méi)有被安裝,可以在/etc/modules-load.d/alsa.conf(沒(méi)有alsa.conf則自己添加)添加如下內(nèi)容:
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等節(jié)點(diǎn)。其實(shí),最終實(shí)驗(yàn)發(fā)現(xiàn)聲卡hdspm不需要
這幾個(gè)節(jié)點(diǎn)也是沒(méi)有關(guān)系的。
聲卡最終可以使用:
$ cat test.wav > /dev/audio
或者
$ cat test.wav > /dev/dsp
初步驗(yàn)證是否能工作。
后期需要使用:
$ aplay -Dsysdefault:CARD=HDSPMx59356d /usr/share/sounds/alsa/Front_Left.wav
真正能播放出聲音才是表明沒(méi)問(wèn)題了。
另外,貼出實(shí)驗(yàn)過(guò)程中使用的圖片:
$ cat /proc/devices
alsa與sound設(shè)備節(jié)點(diǎn)
$ 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會(huì)報(bào)錯(cuò),因?yàn)橐呀?jīng)不是整個(gè)源碼樹(shù)了,估計(jì)是擔(dān)心整個(gè)系統(tǒng)由于開(kāi)發(fā)人員的問(wèn)題而崩潰
12.jpg
節(jié)點(diǎn)與節(jié)點(diǎn)的作用
13.jpg
直接modprobe xx ,發(fā)現(xiàn)會(huì)導(dǎo)致版本等相關(guān)錯(cuò)誤而安裝不成功,后面就使用源碼樹(shù)編譯整個(gè)內(nèi)核來(lái)安裝模塊,就不會(huì)有問(wèn)題了。
14.jpg
可以查看Makefile來(lái)修改linux版本與名稱(chēng)等內(nèi)容。
15.jpg
源碼樹(shù)的版本與存放的位置
16.jpg
查看模塊是否在某一個(gè)文件中。
17.jpg
$ cat /proc/asound/oss/sndstat
18.jpg
9.x11桌面環(huán)境
當(dāng)前使用的桌面系統(tǒng)環(huán)境可以使用:
$ echo $DESKTOP_SESSION
gnome
$ xhost +
總結(jié)
以上是生活随笔為你收集整理的linux yum安装驱动,centos8安装alsa驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++关键字分析系列
- 下一篇: PTA6-1 鸡兔同笼问题 (20分)