声音驱动程序 - AWS EC2 ubuntu 16.04 实例的 snd-aloop 内核模块设置问题
Posted
技术标签:
【中文标题】声音驱动程序 - AWS EC2 ubuntu 16.04 实例的 snd-aloop 内核模块设置问题【英文标题】:sound driver - snd-aloop kernel module setup issue with AWS EC2 ubuntu 16.04 instance 【发布时间】:2018-09-07 09:00:29 【问题描述】:无法在 AWS EC2 ubuntu 16.04 实例中使用 snd-aloop 音频驱动程序
在 snd-aloop 上运行 modprobe
$modprobe snd-aloop
modprobe: FATAL: Module snd-aloop not found in directory /lib/modules/4.4.0-1052-aws
AWS matchine 中的内核是 -
/lib/modules/4.4.0-1049-aws
/lib/modules/4.4.0-1052-aws
/lib/modules/4.4.0-116-generic
当前内核加载
$uname -r
4.4.0-1052-aws
-
经过大量搜索,确认 snd-aloop 已预装在 ubuntu 16.04 中。(https://askubuntu.com/questions/891445/alsa-snd-aloop-kernel-module-for-16-04-or-14-04-server)
所以我验证并发现该模块存在于
“/lib/modules/4.4.0-116-generic”内核。位置 - /lib/modules/4.4.0-116-generic/kernel/sound/drivers/snd-aloop.ko
-
经过深思熟虑,一种使用 snd-aloop 音频驱动程序的可能方法是
使用 4.4.0.116 通用内核。
为了做同样的事情,我修改了 /boot/grub/menu.lst 并编辑了 内核
列表。(注释掉除 4.4.0.116-generic 之外的所有其他内核)
然后做了 update-grub 但什么也没发生,内核加载是
/lib/modules/4.4.0-1052-aws.
然后我修改了 /etc/default/grub 文件和
将 GRUB_DEFAULT=0 更改为内核标题
GRUB_DEFAULT="gnulinux-4.4.0-116-generic-advanced-b6adc449-5e3d-4331-ba6b-6e99a75fa48e>gnulinux-4.4.0-116-generic-recovery-b6adc449-5e3d-4331-ba6b-6e99a75fa48e"
并再次进行了 grub 更新,但再次没有发生任何事情。
我已经浏览了以下文档
1.https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html - 更改内核的 Aws 文档指南。
我不记得其他链接,但我搜索了很多。
请指出正确的方向。如何在 AWS EC2 Ubuntu 16.04 实例中使用音频驱动程序 sdn-aloop?
【问题讨论】:
【参考方案1】:更新默认内核启动项的步骤(不修改/boot/grub/menu.lst):
在 grub.cfg 中找到需要的菜单和子菜单项:
cat /boot/grub/grub.cfg
例如,您可以有这样的菜单结构(AWS Ubuntu 16.04 的默认设置):
(0) Ubuntu (1) Ubuntu 的高级选项 (0) Ubuntu,带有 Linux 4.4.0-1052-aws (1) Ubuntu,带有 Linux 4.4.0-1052-aws(恢复模式) (2) Ubuntu,带有 Linux 4.4.0-116-generic (3) Ubuntu,带有 Linux 4.4.0-116-generic(恢复模式)在这种情况下,如果您需要加载“Ubuntu, with Linux 4.4.0-116-generic”,您的默认启动设置将是“1>2”
编辑默认 grub 文件:
vim /etc/default/grub
并设置
GRUB_DEFAULT=“1>2”
运行update-grub
reboot now
使其生效
重新启动后,您可以使用uname -a
对其进行测试,这应该会提供 4.4.0-116-generic
在此之后modprobe snd-aloop
应该可以正常工作了。
【讨论】:
嗨。我听从了指示。在 ubuntu 18. 没有成功 @websquared,谢谢!。这对我来说适用于 aws ubuntu 18.04 我的 EC2 实例只有Ubuntu, with Linux 5.3.0-1023-aws
和 Ubuntu, with Linux 5.3.0-1023-aws (recovery mode)
,因此这不起作用。
适用于 18.04 但不适用于 Ubuntu 20.04。从一个到另一个发生了什么变化?【参考方案2】:
Jibri on AWS 并得到以下问题。
org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegProcessUpdate() Ffmpeg 突然退出。最后输出行:plug:bsnoop: Input/output error
解决方案:将内核启动设置从 Linux 4.4.0-xxxx-aws 更改并更新为 Linux 4.4.0-xxxx-generic 并重新启动实例。
我已通过以下步骤修复:
$ grep -A200 submenu /boot/grub/grub.cfg |grep menuentry
输出:
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1107-aws' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1107-aws-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1107-aws (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1107-aws-recovery-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1106-aws' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1106-aws-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1106-aws (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1106-aws-recovery-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1105-aws' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1105-aws-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-1105-aws (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-1105-aws-recovery-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-179-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-179-generic-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
menuentry 'Ubuntu, with Linux 4.4.0-179-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-179-generic-recovery-e6dc6474-8016-46c6-8ab0-0a871bae4cd1'
Ubuntu 高级选项的菜单条目 ID 是 gnulinux-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1 Ubuntu 的菜单条目,Linux 4.4.0-179-generic 是 gnulinux-4.4.0-179-generic-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1
编辑 Grub 并将 GRUB_DEFAULT 替换为上述值
$ nano /etc/default/grub
GRUB_DEFAULT="gnulinux-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1>gnulinux-4.4.0-179-generic-advanced-e6dc6474-8016-46c6-8ab0-0a871bae4cd1"
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
GRUB_CMDLINE_LINUX=""
更新并重启
$ sudo update-grub $ sudo 重启
重新启动后,您可以使用 uname -a 对其进行测试,结果应该是 4.4.0-179-generic
$ uname -a
Linux 4.4.0-179-通用
在这个 modprobe snd-aloop 之后应该可以正常工作了。
【讨论】:
【参考方案3】:我是怎么做到的
grep-A100 submenu /boot/grub/grub.cfg |grep menuentry
这列出了类似
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 5.3.0-1017-aws' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.3.0-1017-aws-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 5.3.0-1017-aws (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.3.0-1017-aws-recovery-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 4.15.0-1065-aws' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-1065-aws-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 4.15.0-1065-aws (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-1065-aws-recovery-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 4.15.0-99-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-99-generic-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
menuentry 'Ubuntu, with Linux 4.15.0-99-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-99-generic-recovery-6156ec80-9446-4eb1-95e0-9ae6b7a46187'
所以选择了第一个 menuentryid 即 gnulinux-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187 和通用 id gnulinux-4.15.0-99-generic-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187
然后用 > 加入它们,看起来像这样
gnulinux-4.15.0-99-generic-recovery-6156ec80-9446-4eb1-95e0-9ae6b7a46187>gnulinux-4.15.0-99-generic-advanced-6156ec80-9446-4eb1-95e0-9ae6b7a46187
并将其设置为 GRUB_DEFAULT 值,然后更新 grub 并重新启动。你应该得到想要的输出。
【讨论】:
以上是关于声音驱动程序 - AWS EC2 ubuntu 16.04 实例的 snd-aloop 内核模块设置问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在运行 Ubuntu 的 AWS EC2 上配置多个虚拟主机? [关闭]
从本地机器上的 ubuntu (AWS EC2) 读取文件?
无法从我的ubuntu EC2计算机连接到AWS DocumentDB