首页 > 代码库 > openwrt驱动与应用程序的联系
openwrt驱动与应用程序的联系
应用程序与驱动之间需要进行命令的传递,因而它们之间需要共同定义一套双方都可以识别的数据结构,实际使用时它们include的是名字和内容相同但位置不同的头文件。
比如spi_gpio_ad7193.h这个头文件中包含有仅给驱动所使用的结构 _mode/_conf
struct _mode { // Mode Register Settings unsigned char mode:3; unsigned char dat_sta:1; unsigned char clk:2; unsigned char avg:2; unsigned int fs:10;};
还包含驱动和应用程序都使用的定义等
// reset the device #define CMD_DEVICE_RESET _IOW(SPI_IOC_MAGIC, 1, __u32)// Calibrate channel// (‘cmd‘refer to: Operations Modes[MOD_INTERNAL_ZS_CAL:MOD_SYSTEML_FS_CAL])#define CMD_CHANNEL_CALIB _IOW(SPI_IOC_MAGIC, 2, __u32)
我的openwrt中,驱动和应用程序的C源码都放在openwrt/package/utils中
SPI驱动的头文件#include <linux/spi/spi_gpio_ad7193.h>对应于build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.49/include/uapi/linux/spi/spi_gpio_ad7193.h
SPI应用程序头文件#include <linux/spi/spi_gpio_ad7193.h>对应于build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.49/user_headers/include/linux/spi/spi_gpio_ad7193.h
应用程序的头文件可以放在自己utils文件目录下面,这样应该比较容易管理。
如果想在make clean之后自动拷贝你的spi_gpio_ad7193.h到你的/linux-3.10.49/include/uapi/linux/spi/下面的话,那么在make clean之前应该在target/linux/generic/files/include/uapi/linux/spi下放置spi_gpio_ad7193.h这个文件。
这样当你make clean && make V=s之后,该文件就会自动拷贝到对应的目录下去了,编译驱动的时候就不会出现找不到头文件的错误了。