博文

目前显示的是标签为“firmware”的博文

使用firmware

我们在使用Ralink芯片的WiFi时,很多型号是需要在加载模块时也加载固件的,这样做是有好处的,一可以省成本(少了保存固件的存储芯片和生产烧录),二是解决硬件BUG(通过更新固件来解决批量硬件存在的严重BUG),三是功能升级。总之好处多多,怎么都可以挖掘到。 在Linux中关于固件常用到如下函数,其在include/linux/firmware.h声明,在drivers/base/firmware_class.c实现,相应的函数原型如下: static inline int request_firmware(const struct firmware **fw, const char *name, struct device *device) ; static inline void release_firmware(const struct firmware *fw) ; 其中firmware结构体定义如下: struct firmware { size_t size; const u8 *data; struct page **pages; /* firmware loader private fields */ void *priv; }; 而相应的device结构体在include/linux/device.h中定义,我们等会只是构建一个临时的device,该部分在后期的内核模型中再说明,其使用device_initialize函数来初始化,在drivers/base/core.c中定义。 接下来上代码吧: #include <linux/module.h> #include <linux/firmware.h> #include <linux/device.h> #define SLAM_TEST_FIRMWARE "rt73.bin" static const struct firmware * fwp; static struct device slam_device = { .init_name = "slam0", }; static void pri...