Hi,
Using the kernel request_firmware() function, it seems one can send any file by:
cat myfile.bin > /sys/class/firmware/xxxx/data
How does the user space code obtain the filename parameter specified in the request_firmware() call?
The documentation says $DEVPATH and $FIRMWARE variables are provided in
the environment, but "echo $FIRMWARE" prints an empty string.
I loaded the driver with an & just so I can get the shell prompt back to start the sysfs script.
How would one load the driver and run the sysfs script to send the file from the same shell?
Thanks,
Peter
Peter Hsiang wrote:
> Using the kernel request_firmware() function, it seems one can send any file by:
> cat myfile.bin > /sys/class/firmware/xxxx/data
>
> How does the user space code obtain the filename parameter specified in the request_firmware() call?
>
> The documentation says $DEVPATH and $FIRMWARE variables are provided in
> the environment, but "echo $FIRMWARE" prints an empty string.
drivers/base/firmware_class.c has:
static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
{
struct firmware_priv *fw_priv = to_firmware_priv(dev);
if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->fw_id))
return -ENOMEM;
if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
return -ENOMEM;
if (add_uevent_var(env, "ASYNC=%d", fw_priv->nowait))
return -ENOMEM;
return 0;
}
Are these available at least in the udev rule?
Regards,
Clemens