Linux内核如何加载固件,Linux内核如何知道在哪里寻找驱动程序固件?

从内核的angular度来看,请参阅/ usr / src / linux / Documentation / firmware_class / README :

内核(驱动程序):调用request_firmware(&fw_entry,$ FIRMWARE,设备)

用户空间:

- / sys / class / firmware / xxx / {loading,data}出现。

- 在$ FIRMWARE中使用固件标识符调用hotplug

和通常的热插拔环境。

- hotplug:echo 1> / sys / class / firmware / xxx / loading

内核:丢弃任何以前的部分负载。

用户空间:

- hotplug:cat appropriate_firmware_image> \

/ SYS /class/固件/ XXX /数据

内核:以PAGE_SIZE增量生长一个缓冲区来保存图像

进来。

用户空间:

- hotplug:echo 0> / sys / class / firmware / xxx / loading

内核:request_firmware()返回并且驱动程序具有固件

image in fw_entry - > {data,size}。 如果出了点问题

request_firmware()返回非零值,fw_entry被设置为

空值。

内核(驱动程序):驱动程序代码调用release_firmware(fw_entry)释放

固件映像和任何相关资源。

内核实际上并没有加载任何固件。 它只是简单地通知用户空间,“我想要一个名为xxx的固件”,并等待用户空间将固件映像传回给内核。

现在,在Ubuntu 8.04上,

$ grep固件/etc/udev/rules.d/80-program.rules

#根据需要加载固件

SUBSYSTEM ==“firmware”,ACTION ==“add”,RUN + =“firmware_helper”

所以如你udev , udev被configuration为在内核要求firmware_helper时运行firmware_helper。

$ apt-get source udev

正在读取软件包列表...完成

build立依赖关系树

阅读状态信息...完成

需要获得312kB的源文件。

获取:1 http://us.archive.ubuntu.com hardy-security / main udev 117-8ubuntu0.2(dsc)[716B]

获取:2 http://us.archive.ubuntu.com hardy-security / main udev 117-8ubuntu0.2(tar)[245kB]

获取:3 http://us.archive.ubuntu.com hardy-security / main udev 117-8ubuntu0.2(差异)[65.7kB]

在1秒内获得312kB(223kB / s)

gpg:签名使用DSA密钥ID 17063E6D星期二14四月2009 05:31:34 PM EDT

gpg:无法检查签名:找不到公钥

dpkg-source:提取udev-117中的udev

dpkg-source:解压udev_117.orig.tar.gz

dpkg-source:应用./udev_117-8ubuntu0.2.diff.gz

$ cd udev-117 /

$ cat debian / patches / 80-extras-firmware.patch

如果你阅读了源代码,你会发现Ubuntu写了一个firmware_helper ,它是硬编码的,首先查找/lib/modules/$(uname -r)/$FIRMWARE ,然后是/lib/modules/$FIRMWARE ,其他地点。 把它翻译成sh ,大概是这样的:

echo -n 1 > /sys/$DEVPATH/loading cat /lib/firmware/$(uname -r)/$FIRMWARE > /sys/$DEVPATH/data \ || cat /lib/firmware/$FIRMWARE > /sys/$DEVPATH/data if [ $? = 0 ]; then echo -n 1 > /sys/$DEVPATH/loading echo -n -1 > /sys/$DEVPATH/loading fi

这正是内核所期望的格式。

长话短说:Ubuntu的udev软件包具有自定义function,首先查看/lib/firmware/$(uname -r) 。 这个政策正在用户空间中处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值