Linux firmware

firmware

  硬件市场的激烈竞争, 使得制造商连一点用于设备控制固件的 EEPROM 的成本都不愿意花费。因此固件一般发布在和硬件配套的驱动包中,由操作系统(其实是驱动程序)负责传送固件到设备。

内核固件接口

  获取固件的正确方法是当需要时从用户空间获取它。一定不要试图从内核空间直接打开包含固件的文件,那是一个易出错的操作, 因为它把策略(以文件名的形式)包含进了内核。正确的方法是使用固件接口:

#include <linux/firmware.h>
int request_firmware(const struct firmware **fw,
                     const char *name, /* name 为固件文件名*/
                     struct device *device);
/*要求用户空间定位并提供一个固件映象给内核;若成功加载, 返回值是 0(否则返回错误码)*/

/*因为 request_firmware 需要用户空间的操作, 所以返回前将保持休眠。若驱动必须使用固件而不能进入休眠时,可使用以下异步函数:*/
int request_firmware_nowait(
    struct module *module, /* = THIS_MODULE*/
    int uevent,
    const char *name, 
    struct device *device, 
    void *context,/*不由固件子系统使用的私有数据指针*/
    void (*cont)(const struct firmware *fw, void *context));
/*如果一切正常,request_firmware_nowait 开始固件加载过程并返回 0. 过了一段时间后(默认10秒),将用加载的结果(若加载失败, fw 为 NULL)作为参数调用 cont。*/

/* fw 参数指向以下结构体:*/
struct firmware {
    size_t size;
    u8 *data;
};
/*那个结构包含实际的固件, 它现在可被下载到设备中.但是请注意:在发送它到硬件之前,必须检查这个文件以确保它是正确的固件映象(设备固件常常包含标识字符串、 校验和等等)*/

/*当固件已经发送到设备后,应当释放 firmware 结构体, 使用:*/
void release_firmware(struct firmware *fw);

固件接口工作原理

  固件子系统使用 sysfs 和热插拔机制工作。当调用 request_firmware时, 函数将在 /sys/class/firmware 下创建一个以设备名为目录名的新目录,其中包含 3 个属性:

  • loading :这个属性应当被加载固件的用户空间进程设置为 1。当加载完毕, 它将被设为 0。被设为 -1 时,将中止固件加载。
  • data :一个用来接收固件数据的二进制属性。在设置 loading 为1后, 用户空间进程将固件写入这个属性。
  • device :一个链接到 /sys/devices 下相关入口项的符号链接。

一旦创建了 sysfs 入口项, 内核将为设备产生一个热插拔事件,并传递包括变量 FIRMWARE 的环境变量给处理热插拔的用户空间程序。FIRMWARE 被设置为提供给 request_firmware 的固件文件名。
  用户空间程序定位固件文件, 并将其拷贝到内核提供的二进制属性;若无法定位文件, 用户空间程序设置 loading 属性为 -1。

  若固件请求在 10 秒内没有被服务, 内核就放弃并返回一个失败状态给驱动。超时周期可通过 sysfs 属性 /sys/class/firmware/timeout 属性改变。

  request_firmware 接口允许使用驱动发布设备固件。当正确地集成进热插拔机制后, 固件加载子系统允许设备不受干扰地工作。显然这是处理问题的最好方法,但固件受版权保护,小心违反版权法。

本文摘自:http://www.linuxidc.com/Linux/2011-03/33932.htm

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux固件是指嵌入式系统中的软件,它们被编译成二进制文件并存储在设备的非易失性存储器中。这些固件通常用于控制硬件设备,例如网络适配器、无线网卡、路由器等。Linux固件可以通过更新来修复漏洞、添加新功能或提高性能。 ### 回答2: Linux firmware是一种嵌入式软件,用于控制硬件设备的操作。它是一种在Linux内核中运行的软件,其主要目的是为设备提供支持和配置。对于Linux用户和管理员来说,了解Linux firmware的运作和管理方式至关重要。 Linux firmware通常包含设备驱动程序、控制程序和固件文件。驱动程序用于与硬件设备进行通信,控制程序则用于执行各种操作和配置。固件文件则包含了设备相关的固件、设置以及其他必要信息。 Linux firmware的使用需要使用特定的命令和工具。其中最常见的是fwupd,这是一个用于更新和管理Linux固件的开源工具。fwupd可以识别当前安装的固件,并允许用户在需要时更新固件文件。 除了fwupd之外,Linux firmware还可以通过其他工具进行管理,例如udev和modprobe。使用这些工具,用户可以加载、卸载、暂停或启用特定的内核固件模块。 Linux firmware的主要优势在于其免费且开放源代码。这使得Linux用户可以自由地访问并修改其固件文件,以支持新的硬件和功能。此外,Linux firmware还可以提高设备的性能和稳定性。 总之,Linux firmware是一个重要的组成部分,它为Linux用户提供了访问、管理和更新设备固件的能力。对于企业和个人用户来说,了解如何使用Linux firmware和相关工具是非常重要的。 ### 回答3: Linux Firmware是指运行在Linux系统上的固件程序,它通常是硬件设备的低级控制程序,可以控制硬件设备的各种功能。Linux Firmware的作用是帮助操作系统驱动硬件,并协调硬件设备之间的通信。Linux FirmwareLinux系统中的一个重要组成部分,它可以提高硬件设备的使用效率,减少系统资源的占用,从而提高整个系统的性能表现。 Linux操作系统是一个自由开源的操作系统,拥有广泛的硬件支持。但是,由于不同的硬件设备具有不同的技术实现和操作方式,在Linux系统上支持这些硬件设备需要特定的固件。这些固件通常由硬件制造商提供,或者由Linux社区开发。Linux Firmware包含了Linux系统所需要的这些特定的固件。在Linux系统中,Linux Firmware通常是以二进制文件的形式存储,它们是通过内核模块自动加载到系统中,使得设备驱动程序能够控制硬件设备。Linux Firmware的更新通常由操作系统的更新程序来完成,可以通过在线更新或者手动下载更新文件来更新。 在现代计算机中,硬件驱动和固件是操作系统正常工作的不可或缺的组成部分。Linux Firmware作为一种在Linux系统上的固件程序,可以提高硬件设备的响应速度和性能表现,并减少系统资源的占用,为用户提供更好的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值