色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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 框架設備。

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

    關注

    2562

    文章

    52559

    瀏覽量

    763671
  • 驅動
    +關注

    關注

    12

    文章

    1899

    瀏覽量

    86526
收藏 1人收藏
  • jf_086613021

評論

相關推薦
熱點推薦

創建和配置數據源

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 ?3938次閱讀
如何<b class='flag-5'>創建和</b>使用Xilinx的UltraScale PCI Express解決方案

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

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

Arduino板是什么如何使用IDE軟件創建和上傳Arduino程序到Arduino板

本章我們將研究Arduino板和IDE軟件,我們要用IDE軟件創建和上傳Arduino程序到Arduino板(Arduino用草圖表示程序,我們還是繼續用程序這個傳統術語)。我們會學到程序的基本框架和程序里可以實現的基本功能,我們要創建
發表于 05-14 18:11 ?4次下載
Arduino板是什么如何使用IDE軟件<b class='flag-5'>創建和</b>上傳Arduino程序到Arduino板

FreeRTOS任務如何創建和刪除?

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

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>程序

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

AD5421 IIO DAC Linux驅動程序

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

AD7291 IIO ADC Linux驅動程序

AD7291 IIO ADC Linux驅動程序
發表于 05-23 16:44 ?3次下載
AD7291 <b class='flag-5'>IIO</b> ADC 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 ?699次閱讀
Linux,<b class='flag-5'>IIO</b><b class='flag-5'>驅動</b>完結有感
主站蜘蛛池模板: 中国老太太xxx | 恋夜秀场1234手机视频在线观看 | 亚洲精品久久无码AV片WWW | 精品亚洲欧美中文字幕在线看 | 欧美亚洲视频在线二区 | 国产传媒18精品A片在线观看 | 精品国产乱码久久久久久夜深人妻 | 亚洲免费在线视频观看 | 国产 高清 无码 在线播放 | 俄罗斯破处| 久久久精品免费视频 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 成人国产免费 | 亚洲精品久久久久久蜜臀 | 天天综合亚洲综合网站 | 亚洲欧美日本中文子不卡 | 99精品小视频 | 伊久久 | 欧美一区二区三区免费播放 | 欧美重口绿帽video | 一个吃奶两个添下面H | 久青草国产在视频在线观看 | 国产成人精品123区免费视频 | 国产成人精品免费视频大全可播放的 | 男人插曲女人身体视频 | 国产色婷婷精品人妻蜜桃成熟 | 69xx欧美| 国内高清在线观看视频 | 午夜免费体验30分 | 亚洲国产亚综合在线区尤物 | 天堂无码人妻精品AV一区 | 在线免费观看a视频 | 国产成人精品永久免费视频 | 一边摸一边桶一边脱免费 | 理论937| 亚洲va在线va天堂XX xX | 在线播放一区 | 99热久久精品国产一区二区 | 麻豆精品传媒2021网站入口 | 中国午夜伦理片 | 无羞耻肉动漫在线观看 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品