声音驱动程序 - 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-awsUbuntu, 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 (AWS EC2) 读取文件?

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

连接AWS EC2 Linux instance Ubuntu远程桌面

AWS ec2的ubuntu14.04上安装git服务