zoukankan      html  css  js  c++  java
  • 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之后,该文件就会自动拷贝到对应的目录下去了,编译驱动的时候就不会出现找不到头文件的错误了。

  • 相关阅读:
    Ubuntu 16.04 swoole扩展安装注意!!!
    go mod使用指南
    基于gin框架-验证码demo
    go(基于gin开发提升效率)--Air
    go mod路径引入并代码提示
    golang在win10下安装问题(一)
    win10下beego安装注意坑(一)
    API统一管理平台-YApi
    vim编辑
    swool安装(centos7)
  • 原文地址:https://www.cnblogs.com/tfanalysis/p/3924110.html
Copyright © 2011-2022 走看看