声音 driver - snd-aloop AWS EC2 ubuntu 16.04 实例的内核模块设置问题

sound driver - snd-aloop kernel module setup issue with AWS EC2 ubuntu 16.04 instance

无法在 AWS EC2 ubuntu 16.04 实例

中使用 snd-aloop 音频 driver

开启 运行 modprobe 开启 snd-aloop

$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
  1. 经过大量搜索,确认 snd-aloop 在 ubuntu 16.04 中出现 pre-installed。(https://askubuntu.com/questions/891445/alsa-snd-aloop-kernel-module-for-16-04-or-14-04-server)
  2. 所以我验证并发现模块出现在

"/lib/modules/4.4.0-116-generic" kernel. location - /lib/modules/4.4.0-116-generic/kernel/sound/drivers/snd-aloop.ko

  1. 经过深思熟虑,一种使用 snd-aloop 音频 driver 的可能方法是 使用 4.4.0.116 通用内核。
    • 为了做同样的事情,我修改了 /boot/grub/menu.lst 并编辑了 内核 list.(注释掉除 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 实例中使用音频 driver sdn-aloop?

更新默认内核引导项的步骤(不修改/boot/grub/menu.lst):

  1. grub.cfg中找到需要的菜单和sub-menu项: 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”

  2. 编辑默认 grub 文件:

    vim /etc/default/grub 并设置

    GRUB_DEFAULT=“1>2”

  3. 运行 update-grub

  4. 然后reboot now使这个生效
  5. 重新启动后,您可以使用 uname -a 对其进行测试,这应该会给出 4.4.0-116-generic

在此之后 modprobe snd-aloop 应该可以正常工作。

我是怎么做到的 运行

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 上的 Jibri 并遇到以下问题。

org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegProcessUpdate() Ffmpeg quit abruptly. Last output line: 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 reboot

重新启动后,您可以使用 uname -a 对其进行测试,它应该会给出 4.4.0-179-generic

$ uname -a

Linux 4.4.0-179-通用

在此之后 modprobe snd-aloop 应该可以正常工作。