在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

IIO驅動框架創建和相關配置

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-30 11:53 ? 次閱讀

IIO驅動框架創建

分析 IIO 子系統的時候大家應該看出了,IIO框架主要用于 ADC 類的傳感器,比如陀螺儀、加速度計、磁力計、光強度計等,這些傳感器基本都是IIC 或者 SPI 接口的。因此 IIO驅動的基礎框架就是 IIC 或者 SPI ,我們可以在 IIC 或 SPI 驅動里面在加上 regmap。當然了,有些 SOC內部的 ADC 也會使用 IIO 框架,那么這個時候驅動的基礎框架就是 platfrom。

IIO 設備的申請、初始化以及注冊在 probe 函數中完成,在注銷驅動的時候還需要在 remove 函數中注銷掉
IIO 設備、釋放掉申請的一些內存。

以 SPI 接口為例,demo 如下

/* 自定義設備結構體 */
struct xxx_dev { 
 struct spi_device *spi; /* spi 設備 */
 struct regmap *regmap; /* regmap */
 struct regmap_config regmap_config;
 struct mutex lock;
};

/*
* 通道數組
*/
static const struct iio_chan_spec xxx_channels[] = {

};

/*
* @description : 讀函數,當讀取 sysfs 中的文件的時候最終此函數會執行,
* :此函數里面會從傳感器里面讀取各種數據,然后上傳給應用。
* @param - indio_dev : IIO 設備
* @param - chan : 通道
* @param - val : 讀取的值,如果是小數值的話,val 是整數部分。
* @param - val2 : 讀取的值,如果是小數值的話,val2 是小數部分。
* @param - mask : 掩碼。
* @return : 0,成功;其他值,錯誤
*/
static int xxx_read_raw(struct iio_dev *indio_dev,
   struct iio_chan_spec const *chan,
   int *val, int *val2, long mask)
{
 return 0;
} 

/*
* @description : 寫函數,當向 sysfs 中的文件寫數據的時候最終此函數
* :會執行,一般在此函數里面設置傳感器,比如量程等。
* @param - indio_dev : IIO 設備
* @param - chan : 通道
* @param - val : 應用程序寫入值,如果是小數的話,val 是整數部分。
* @param - val2 : 應用程序寫入值,如果是小數的話,val2 是小數部分。
* @return : 0,成功;其他值,錯誤
*/
static int xxx_write_raw(struct iio_dev *indio_dev,
   struct iio_chan_spec const *chan,
   int val, int val2, long mask)
{
 return 0;
}

/*
* @description : 用戶空間寫數據格式,比如我們在用戶空間操作 sysfs 來設
* :置傳感器的分辨率,如果分辨率帶小數,那么這個小數傳遞到
* : 內核空間應該擴大多少倍,此函數就是用來設置這個的。
* @param - indio_dev : iio_dev
* @param - chan : 通道
* @param - mask : 掩碼
* @return : 0,成功;其他值,錯誤
*/
static int xxx_write_raw_get_fmt(struct iio_dev *indio_dev,
   struct iio_chan_spec const *chan, long mask)
{
 return 0;
}

/*
* iio_info 結構體變量
*/
static const struct iio_info xxx_info = {
  .read_raw = xxx_read_raw,
  .write_raw = xxx_write_raw,
  .write_raw_get_fmt = &xxx_write_raw_get_fmt,
};

/*
* @description : spi 驅動的 probe 函數,當驅動與
* 設備匹配以后此函數就會執行
* @param - spi : spi 設備
* 
*/ 
static int xxx_probe(struct spi_device *spi)
{
  int ret;
  struct xxx_dev *data;
  struct iio_dev *indio_dev;

  /* 1、申請 iio_dev 內存 */
  indio_dev = devm_iio_device_alloc(&spi- >dev, sizeof(*data));
  if (!indio_dev)
  return -ENOMEM;

  /* 2、獲取 xxx_dev 結構體地址 */
  data = iio_priv(indio_dev);
  data- >spi = spi;
  spi_set_drvdata(spi, indio_dev);
  mutex_init(&data- >lock);

  /* 3、初始化 iio_dev 成員變量 */
  indio_dev- >dev.parent = &spi- >dev;
  indio_dev- >info = &xxx_info;
  indio_dev- >name = "xxx";
  indio_dev- >modes = INDIO_DIRECT_MODE; /* 直接模式 /
  indio_dev- >channels = xxx_channels;
  indio_dev- >num_channels = ARRAY_SIZE(xxx_channels);

  iio_device_register(indio_dev);

  /* 4、regmap 相關設置 */

  /* 5、SPI 相關設置*/

  /* 6、芯片初始化 */

  return 0;

}

/*
* @description : spi 驅動的 remove 函數,移除 spi 驅動的時候此函數會執行
* @param - spi : spi 設備
* @return : 0,成功;其他負值,失敗
*/
static int xxx_remove(struct spi_device *spi)
{
  struct iio_dev *indio_dev = spi_get_drvdata(spi);
  struct xxx_dev *data;

  data = iio_priv(indio_dev); ;

  /* 1、其他資源的注銷以及釋放 */

  /* 2、注銷 IIO */
  iio_device_unregister(indio_dev);

  return 0;
}

3、使能內核

IIO 相關配置

Linux 內核默認使能了 IIO 子系統,但是有一些 IIO 模塊沒有選擇上,這樣會導致我們編譯
驅動的時候會提示某些 API 函數不存在,需要使能的項目如下:

- > Device Drivers 
   - > Industrial I/O support (IIO [=y])
       - > [*]Enable buffer support within IIO //選中
       - >  * >Industrial I/O buffering based on kfifo //選中

IIO 驅動框架提供了 sysfs 接口,因此加載成功以后我們可以在用戶空間訪問對應的 sysfs
目錄項,進入目錄“/sys/bus/iio/devices/”目錄里面,此目錄下都是 IIO 框架設備。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2552

    文章

    51294

    瀏覽量

    755200
  • 驅動
    +關注

    關注

    12

    文章

    1845

    瀏覽量

    85415
收藏 人收藏

    評論

    相關推薦

    創建和配置數據源

    JAVA教程之創建和配置數據源,很好的JAVA的資料,快來學習吧。
    發表于 04-12 17:41 ?6次下載

    如何創建和使用Xilinx的UltraScale PCI Express解決方案

    了解如何創建和使用Xilinx的UltraScale PCI Express解決方案。 使用Vivado IP目錄GUI創建和使用PCI Express IP內核。 打開示例設計并在Vivado軟件中實現它。
    的頭像 發表于 11-28 06:36 ?3779次閱讀
    如何<b class='flag-5'>創建和</b>使用Xilinx的UltraScale PCI Express解決方案

    如何使用Vivado Device Programmer創建和配置存儲設備

    了解如何使用Vivado Device Programmer創建和配置配置存儲設備。 首先,我們將學習如何設置正確的比特流屬性并生成配置存儲器文件。
    的頭像 發表于 11-22 07:11 ?7708次閱讀

    FreeRTOS任務如何創建和刪除?

    在FreeRTOS移植到Cortex-M3硬件平臺的文章中,我們已經見過任務創建API,但那篇文章的重點在于如何移植FreeRTOS,本文將重點放在任務的創建和刪除API函數上面。 任務創建和刪除
    的頭像 發表于 03-11 18:08 ?2958次閱讀

    AD7887 IIO ADC Linux驅動程序

    AD7887 IIO ADC Linux驅動程序
    發表于 04-20 20:29 ?6次下載
    AD7887 <b class='flag-5'>IIO</b> ADC Linux<b class='flag-5'>驅動</b>程序

    AD7998 IIO ADC Linux驅動程序

    AD7998 IIO ADC Linux驅動程序
    發表于 04-21 20:33 ?16次下載
    AD7998 <b class='flag-5'>IIO</b> ADC Linux<b class='flag-5'>驅動</b>程序

    AD9832 IIO直接數字合成Linux驅動程序

    AD9832 IIO直接數字合成Linux驅動程序
    發表于 04-21 21:20 ?3次下載
    AD9832 <b class='flag-5'>IIO</b>直接數字合成Linux<b class='flag-5'>驅動</b>程序

    AD9834 IIO直接數字合成Linux驅動程序

    AD9834 IIO直接數字合成Linux驅動程序
    發表于 04-26 14:16 ?1次下載
    AD9834 <b class='flag-5'>IIO</b>直接數字合成Linux<b class='flag-5'>驅動</b>程序

    IIO單通道串行ADC Linux驅動程序

    IIO單通道串行ADC Linux驅動程序
    發表于 05-19 18:26 ?7次下載
    <b class='flag-5'>IIO</b>單通道串行ADC Linux<b class='flag-5'>驅動</b>程序

    AD7303 IIO DAC Linux驅動程序

    AD7303 IIO DAC Linux驅動程序
    發表于 05-23 11:08 ?1次下載
    AD7303 <b class='flag-5'>IIO</b> DAC Linux<b class='flag-5'>驅動</b>程序

    AD5360 IIO多通道Linux驅動程序DAC

    AD5360 IIO多通道Linux驅動程序DAC
    發表于 05-23 11:18 ?7次下載
    AD5360 <b class='flag-5'>IIO</b>多通道Linux<b class='flag-5'>驅動</b>程序DAC

    AD5380 IIO多通道Linux驅動程序DAC

    AD5380 IIO多通道Linux驅動程序DAC
    發表于 05-23 17:55 ?8次下載
    AD5380 <b class='flag-5'>IIO</b>多通道Linux<b class='flag-5'>驅動</b>程序DAC

    AD5449 IIO DAC Linux驅動程序

    AD5449 IIO DAC Linux驅動程序
    發表于 05-24 10:38 ?3次下載
    AD5449 <b class='flag-5'>IIO</b> DAC Linux<b class='flag-5'>驅動</b>程序

    如何創建和使用LabVIEW中的LLB文件

    如何創建和使用LabVIEW中的LLB文件
    發表于 11-22 16:12 ?0次下載

    Linux,IIO驅動完結有感

    1. 我錄制45天,你學完只需要1天 歷時1個半月,驅動大全IIO驅動完結了!20個視頻,時長5小時45分鐘。大綱如下: 01.1_IIO子系統簡化
    的頭像 發表于 12-06 09:45 ?237次閱讀
    Linux,<b class='flag-5'>IIO</b><b class='flag-5'>驅動</b>完結有感
    主站蜘蛛池模板: 九九久久久久午夜精选| 午夜性爽快| 美女牲交视频一级毛片| 性xxxxbbbb免费播放视频| 黄a大片| 97av在线| 97久久伊人精品影院| 夜色综合| 天天干天天操天天摸| sesese在线观看| 中文在线天堂网www| 天天干天天谢| 成人窝窝午夜看片| 九九精品在线观看| 奇米4色| 国产高清一级视频在线观看| 97se亚洲综合| 视频一区亚洲| 神马影院午夜dy888| 黄 色 成 年人在线| 2019天天操| 视频免费1区二区三区| 亚洲男人精品| 夜夜春色| 一级做a爰片久久毛片鸭王| 欧美三四级片| 日本一区二区三区不卡在线看| 国产在线一区视频| 色婷五月| 四虎四虎| 色综合久久天天综合绕观看| 欧美一区二区三区综合色视频| 色多多18免费观看| 看日本黄大片在线观看| japan高清视频乱xxxxx| 日韩特黄| 亚洲一区二区视频| 天天摸日日舔| 日韩在线视频一区二区三区| 狠狠色丁香久久婷婷| 国产三级日本三级在线播放|