声音 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
- 经过大量搜索,确认 snd-aloop 在 ubuntu 16.04 中出现 pre-installed。(https://askubuntu.com/questions/891445/alsa-snd-aloop-kernel-module-for-16-04-or-14-04-server)
- 所以我验证并发现模块出现在
"/lib/modules/4.4.0-116-generic" kernel. location - /lib/modules/4.4.0-116-generic/kernel/sound/drivers/snd-aloop.ko
- 经过深思熟虑,一种使用 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):
在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”
编辑默认 grub 文件:
vim /etc/default/grub
并设置
GRUB_DEFAULT=“1>2”
运行 update-grub
- 然后
reboot now
使这个生效
- 重新启动后,您可以使用
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 应该可以正常工作。
无法在 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
- 经过大量搜索,确认 snd-aloop 在 ubuntu 16.04 中出现 pre-installed。(https://askubuntu.com/questions/891445/alsa-snd-aloop-kernel-module-for-16-04-or-14-04-server)
- 所以我验证并发现模块出现在
"/lib/modules/4.4.0-116-generic" kernel. location - /lib/modules/4.4.0-116-generic/kernel/sound/drivers/snd-aloop.ko
- 经过深思熟虑,一种使用 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):
在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”
编辑默认 grub 文件:
vim /etc/default/grub
并设置GRUB_DEFAULT=“1>2”
运行
update-grub
- 然后
reboot now
使这个生效 - 重新启动后,您可以使用
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 应该可以正常工作。