内核模块在引导过程中未加载



观察到在最新的内核5.15.34-v7中没有加载一些内核模块。

所以我从meta-raspberrypi (0135a02)构建了一个核心图像库,而尝试使用Picamera访问相机时出现了一些错误。这些错误主要抱怨正常驱动程序不存在。

root@raspberrypi3:~# python3
Python 3.10.4 (main, Mar 23 2022, 20:25:24) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from picamera import PiCamera
>>> camera = PiCamera()
mmal: mmal_vc_shm_init: could not initialize vc shared memory service
mmal: mmal_vc_component_create: failed to initialise shm for 'vc.camera_info' (7:EIO)
mmal: mmal_component_create_core: could not create component 'vc.camera_info' (7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.10/site-packages/picamera/camera.py", line 408, in __init__
self._init_revision(options)
File "/usr/lib/python3.10/site-packages/picamera/camera.py", line 480, in _init_revision
with mo.MMALCameraInfo() as camera_info:
File "/usr/lib/python3.10/site-packages/picamera/mmalobj.py", line 2425, in __init__
super(MMALCameraInfo, self).__init__()
File "/usr/lib/python3.10/site-packages/picamera/mmalobj.py", line 696, in __init__
mmal_check(
File "/usr/lib/python3.10/site-packages/picamera/exc.py", line 184, in mmal_check
raise PiCameraMMALError(status, prefix)
picamera.exc.PiCameraMMALError: Failed to create MMAL component b'vc.camera_info': I/O error
>>> 
>>> 
root@raspberrypi3:~# 

在挖掘我的系统后发现了一个旧的构建(不知道为什么我没有删除它,但谢天谢地它给了一些洞察问题),我尝试启动该图像,一切似乎都很好。

所以我检查了旧版本使用的提交(63a3d8cb17c5d1affe8f2848f45fcc6a706f9412),相机工作得很好(尽管我不得不做一些改变,这对这个问题并不重要)。在分析引导日志时,发现最新版本(0135a02)没有加载所有驱动程序。

我还观察到内核模块在5.15.34内核中被压缩,例如:root@raspberrypi3:~# ls /lib/modules/5.15.34-v7/kernel/drivers/usb/gadget/libcomposite.ko.xz,而尝试使用modprobe加载模块时出现以下错误:

root@raspberrypi3:~# ls /lib/modules/5.15.34-v7/kernel/drivers/usb/gadget/legacy/
g_acm_ms.ko.xz        g_cdc.ko.xz           g_hid.ko.xz           g_midi.ko.xz          g_printer.ko.xz       g_webcam.ko.xz        gadgetfs.ko.xz
g_audio.ko.xz         g_ether.ko.xz         g_mass_storage.ko.xz  g_multi.ko.xz         g_serial.ko.xz        g_zero.ko.xz
root@raspberrypi3:~# modprobe gadgetfs
modprobe: FATAL: Module gadgetfs not found in directory /lib/modules/5.15.34-v7

我的问题是63a3d8cb17c5d1affe8f2848f45fcc6a706f9412(5.10)和0135a02(5.15)之间的内核发生了什么变化,在哪里发生了变化,以便我可以查看并适应所需的变化?

注意:上面提到的所有提交哈希值都是meta-raspberrypi repo的。

lsmod日志

  • 5.15.34
root@raspberrypi3:~# lsmod
Module                  Size  Used by
root@raspberrypi3:~#
  • 5.10.81
root@raspberrypi3:~# lsmod
Module                  Size  Used by
rfcomm                 49152  2
cmac                   16384  3
algif_hash             16384  1
nfc                    86016  0
aes_arm_bs             24576  2
crypto_simd            16384  1 aes_arm_bs
cryptd                 24576  2 crypto_simd
algif_skcipher         16384  1
af_alg                 28672  6 algif_hash,algif_skcipher
bnep                   20480  2
hci_uart               40960  1
btbcm                  16384  1 hci_uart
bluetooth             421888  31 hci_uart,bnep,btbcm,rfcomm
ecdh_generic           16384  2 bluetooth
ecc                    36864  1 ecdh_generic
ipv6                  503808  26
brcmfmac              331776  0
brcmutil               24576  1 brcmfmac
sha256_generic         16384  0
bcm2835_v4l2           49152  0
cfg80211              782336  1 brcmfmac
bcm2835_codec          40960  0
bcm2835_isp            32768  0
v4l2_mem2mem           36864  1 bcm2835_codec
rfkill                 32768  4 bluetooth,nfc,cfg80211
bcm2835_mmal_vchiq     36864  3 bcm2835_isp,bcm2835_codec,bcm2835_v4l2
videobuf2_dma_contig    20480  2 bcm2835_isp,bcm2835_codec
videobuf2_vmalloc      16384  1 bcm2835_v4l2
videobuf2_memops       16384  2 videobuf2_dma_contig,videobuf2_vmalloc
videobuf2_v4l2         32768  4 bcm2835_isp,bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem
videobuf2_common       61440  5 bcm2835_isp,bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
raspberrypi_hwmon      16384  0
videodev              253952  6 bcm2835_isp,bcm2835_codec,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
mc                     45056  6 bcm2835_isp,bcm2835_codec,videobuf2_common,videodev,v4l2_mem2mem,videobuf2_v4l2
vc_sm_cma              32768  2 bcm2835_isp,bcm2835_mmal_vchiq
uio_pdrv_genirq        16384  0
uio                    20480  1 uio_pdrv_genirq
fixed                  16384  0
root@raspberrypi3:~# 

确保您已经安装了kernel-modules:

IMAGE_INSTALL_append = " kernel-modules"

编辑

提供所有内核模块的包是kernel-modules,或者每个模块都在一个单独的包kernel-module-<module_name>中。对于meta-raspberrypi,他们将kernel-modules设置为启动所需的非必需包,这意味着如果没有找到该包,则板应该正常启动:

  • meta-raspberrypi/conf/机/include/rpi-base.inc
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules udev-rules-rpi"

在之前的meta-raspberrypi分支中,它是一个rpi映像配方rpi-basic-image.bb:

# Base this image on core-image-minimal
include recipes-core/images/core-image-minimal.bb
# Include modules in rootfs
IMAGE_INSTALL += " 
kernel-modules 
"
SPLASH = "psplash-raspberrypi"
IMAGE_FEATURES += "ssh-server-dropbear splash"
do_image:prepend() {
bb.warn("The image 'rpi-basic-image' is deprecated, please use 'core-image-base' instead")
}
因此,集成内核模块所需要的唯一东西是kernel-modules包,可以通过图像示例,或者尝试:
  • local.conf
MACHINE_EXTRA_RRECOMMENDS_remove = "kernel-modules"

相关内容

最新更新