您的位置:首页 > 运维架构 > Linux

Linux 内核驱动固件加载方式

2014-11-13 15:44 1226 查看
对于内核驱动需要的固件文件,有两种方式加载:

方式1:固件编写进内核

1, 在驱动的 Driver

---> Generic Driver Options

---> External firmware blobs to build into the kernel binary 下编写 固件名字,(全称)。

同时在此后的root direction下编写文件路径, eg: firmware

2,在内核根文件夹 firmware下把固件拷贝到此文件夹下。

3,在驱动中加载 固件 文件

struct firmware *cfg = NULL;

ret = request_firmware(&cfg, Config_2014061101.raw, dev);

这样驱动获取到固件的 cfg 结构体,再 解析 ,写入硬件设备。

方式2:固件动态加载

#!/bin/sh -e

FIRMWARE_DIRS="/lib/firmware/$(uname -r) /lib/firmware"

err() {
echo "$@" >&2
logger -t "${0##*/}[$$]" "$@" 2>/dev/null || true
}

if [ ! -e /sys$DEVPATH/loading ]; then
err "udev firmware loader misses sysfs directory"
exit 1
fi

for DIR in $FIRMWARE_DIRS; do
[ -e "$DIR/$FIRMWARE" ] || continue       # 如果目录存在就执行
echo 1 > /sys$DEVPATH/loading             # 开始加载
cat "$DIR/$FIRMWARE" > /sys$DEVPATH/data  #  “ 将固件数据写入到 data”属性文件中
echo 0 > /sys$DEVPATH/loading             # 停止加载
exit 0                                    # 成功,则返回
done

echo -1 > /sys$DEVPATH/loading
err "Cannot find firmware file '$FIRMWARE'"
exit 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: