Linux kernel 没有用户空间应用程序的Sysfs内核交互

Linux kernel 没有用户空间应用程序的Sysfs内核交互,linux-kernel,linux-device-driver,sysfs,Linux Kernel,Linux Device Driver,Sysfs,我正在为一个硬件开发一个Linux设备驱动程序,它依赖于每个实现的特定配置。在第一次启动时,我们需要一个用户空间应用程序通过校准过程生成此配置数据。当然,我会将此配置数据存储在一个文件中,并在加载驱动程序或配置硬件时读取此文件。 然而,从内核空间内部读取文件是非常困难的 所有用户空间/内核空间交互都应该通过sysfs接口进行。这让我有点困惑,原因有两个: sysfs文件系统是虚拟的,因此每次引导内核时,用户(或用户空间应用程序)都必须将配置数据写入sysfs文件系统,以便内核使用它 驱动程序探测

我正在为一个硬件开发一个Linux设备驱动程序,它依赖于每个实现的特定配置。在第一次启动时,我们需要一个用户空间应用程序通过校准过程生成此配置数据。当然,我会将此配置数据存储在一个文件中,并在加载驱动程序或配置硬件时读取此文件。 然而,从内核空间内部读取文件是非常困难的

所有用户空间/内核空间交互都应该通过sysfs接口进行。这让我有点困惑,原因有两个:

  • sysfs文件系统是虚拟的,因此每次引导内核时,用户(或用户空间应用程序)都必须将配置数据写入sysfs文件系统,以便内核使用它
  • 驱动程序探测函数在用户空间应用程序能够写入sysfs之前很久就已经运行了

  • 我对sysfs的假设正确吗?我如何才能在不依赖用户空间应用程序将此配置数据写入sysfs的情况下将其获取到内核?

    如果在您的情况下可以使用ramdisk,您可以在该ramdisk中的某些脚本中进行配置,例如:

    # insmod module.ko
    # cat config.file > /sys/sys_file
    

    这样的解决方案将允许您尽早配置内核模块。

    您是否可以使用类似于固件加载的用户模式帮助程序,或者滥用固件请求接口本身?如果它是UEFI兼容平台,您可以像许多WiFi供应商一样使用EFI变量来存储它。也可以通过本机API将文件作为固件加载。