request_firmware 的用法,

本文详细介绍了request_firmware函数的使用方法及其应用场景。包括如何在内核中正确调用该函数,用户层如何设置环境变量及放置固件文件,以及如何处理返回的固件数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

request_firmware 的用法,struct firmware,内核,固件,usb 收藏
网上有许多说明,ldd3也有:http://www.deansys.com/doc/ldd3/ch14s08.html

对于刚使用的人来说,上面都说的笼统,说了等于没说,我总结一下:

1、request_firmware在内核使用,需要文件系统支持,就是说,启动的时候如果在驱动里面的probe函数调用request_firmware ,那么系统将等待30s左右,因为文件系统还没有挂载,当然找不到固件了,所以最好在中断里面启动tasklet,然后request_firmware 。如果不想等待,就用request_firmware_nowait,好像是这样写的。

2、那么用户层怎么用?

实际上这个分x86和嵌入式,比如arm,平台。x86的用到了udev,

比如你要请求固件 fw.hex,那么必须在文件系统中导出环境变量,比如 export FIRMWARE=/lib/firmware,而且目录/lib/firmware不能少,因为busybox要用到。然后把固件fw.hex放到/lib/firmware目录下即可。内核request_firmware的时候,busybox就知道去FIRMWARE找了。

 

3、对linux来讲,所谓的固件什么也不是,他只是按fopen()返回二进制文件给你,看看busybox的处理就知道了。所以你的文件随便定义,比如一个mp3文件,你也可以称为固件:request_firmware("xxx.mp3"),那么你文件系统里面也要有这个xxx.mp3文件,只不过系统给你返回二进制数据,具体的处理要在内核进行。

request_firmware 返回二进制firmware文件的地址和大小

//firmware->data和firmware->size来读取有uevent处理程序init加载进来的firmware数据了

request_firmware( & priv- > firmware, fw_name, priv- > hotplug_device) ; 给priv- > hotplug_device设备申请名字为fw_name的firmware  数据, 然后将结果放到& priv- > firmware中,
  struct firmware {
    size_t size;
    u8 * data;
  } ;
  可以看到, 如果应用层的程序成功load了firmware固件文件, 那么firmware. data将指向固件数据, firmware. size为固件大小.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值