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:固件动态加载
方式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
相关文章推荐
- linux驱动的动态加载和编译内核的方式加载
- Linux驱动的加载方式
- 分析解决:XXX驱动已经被编译到缺省内核中,不能再使用insmod 方式加载
- Linux驱动的两种加载方式过程分析
- Linux 设备驱动的固件加载
- linux 3.18内核使用device tree方式修改网络驱动遇到的问题
- Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)
- 让uBoot通过tftp的方式加载Linux内核文件
- 让uBoot通过tftp的方式加载Linux内核文件 .
- linux 内核驱动动态加载和静态加载和 .config makefile kconfig 三个文件之间关系
- 编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。
- linux启动时对编译进内核驱动模块的加载
- linux启动时对编译进内核驱动模块的加载
- Linux 2.6 内核驱动模块的编译和加载
- Linux内核里写i2c client 驱动的两种方式
- 让uBoot通过tftp的方式加载Linux内核文件
- Linux内核驱动加载顺序
- linux内核演进中设备驱动关于电源管理方式的变更
- 【原创】Linux驱动入门之以模块方式加载驱动
- linux 内核驱动加载过程中 向文件系统中的文件进行读写操作