首页 > 代码库 > 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之后,该文件就会自动拷贝到对应的目录下去了,编译驱动的时候就不会出现找不到头文件的错误了。