LINUX IIO子系統專欄分析之一 IIO子系統概述

2020-08-29 jerry的編程路

從本章開始,我們進行IIO子系統專欄的分析文檔,本次IIO子系統專欄分析文檔大概包含如下幾章:

一、 IIO子系統概述

二、IIO子系統相關數據結構分析

三、iio trigger 介紹

四、iio event介紹

五、iio buffer介紹

六、iio device的註冊與註銷介紹

七、iio trigger驅動實現

八、虛擬iio device驅動實現

一、IIO子系統介紹

本章我們對IIO子系統做一個簡單的概述,IIO子系統主要提供對ADC、DAC相關的設備驅動框架,該子系統的設計目的主要是驅動那些分類時處於hwmon和input子系統之間的設備。同時查看linux內核的驅動代碼,其實iio、hwmon之間的界限並不是那麼明顯。而iio子系統所面向的設備包含:

  1. ADC晶片;
  2. DAC晶片;
  3. 溫度傳感器;
  4. 光感器;
  5. 陀螺儀;
  6. 加速度計;
  7. CDCs;
  8. IMUs
  9. 壓力傳感器等等


二、IIO子系統架構

如下即為IIO子系統框架,針對IIO子系統而言,其主要提供兩種方式與應用層交互:

  1. 通過字符設備文件,應用程式可讀取IIO device 各通道的信息;
  2. 通過sysfs下的屬性文件,應用程式也可以讀取IIO device各通道的信息;

而在IIO子系統內部,則主要包括如下四部分的內容:

  1. iio buffer用於處理需要進行連續採集的數據,當一個IIO device的各通道數據支持連續採集時,則調用iio buffer模塊提供的接口,創建iio buffer用於存儲連續存儲的數據,同時該模塊提供字符設備文件的註冊,因此應用程式通過字符設備文件即可讀取該IIO device各通道連續採集的數據;
  2. 當IIO DEVICE支持連續採集時,一般需要綁定一種觸發方法,作為數據到達的信號,而IIO子系統提個iio trigger實現該功能,當iio trigger信號到後,則將數據push到iio buffer中(目前IIO子系統提供了iio trigger的註冊、註銷與查找接口,且系統中已提供了iio-trig-sysfs、iio-trig-gpio、iio-trig-irq等通用的觸發方法。這種方式是不是很眼熟,在led子系統中,也包含為led-trigger,一個led-class可以和一個led-trigger綁定,從而實現對led亮度的控制策略);
  3. 針對溫度傳感器等器件,也會進行事件觸發(如溫度傳感器設置溫度上限閾值,當溫度高於該閾值後,則觸發中斷信號),因此IIO子系統提供了iio event模塊,iio event模塊提供了字符設備操作接口用於對event的監控(該字符設備操作接口並沒有創建字符設備文件,而是在iio buffer的ioctl中開啟event monitor,然後調用anon_inode_getfd創建了一個匿名inode節點,並設置inode的ops接口等)。
  4. 以上3個都是iio 子系統各子功能,而iio core則主要實現iio device的創建,並根據傳遞的參數決定是否需要創建iio buffer等,提供了iio device的內存申、請註冊與註銷接口。


三、IIO DEVICE相關通道數據訪問方式

IIO子系統針對IIO DEVICE中各通道的訪問方式主要提供兩種,即sysfs方式訪問、字符設備方式訪問.

  1. sysfs方式數據訪問
    1. 針對IIO DEVICE的通道數據,僅需要通過ONE-SHOT方式訪問時,則只需要通過sysfs方式訪問即可,即在sysfs目錄下通過IIO DEVICE提供的屬性文件進行訪問(如cat in_voltage0_raw)
  2. 字符設備方式數據訪問
    1. 針對IIO DEVICE的通道數據,需要支持連續採集功能時,則藉助iio-trigger、iio-buffer實現數據的觸發與存儲功能,同時應用程式可通過對應的iio buffer提供的字符設備文件,訪問存儲的連續採集的數據。


本篇文章主要是對IIO子系統進行簡要說明,介紹IIO子系統的框架及主要子模塊功能進行簡要說明。下一章我們將通過IIO子系統的數據結構入手,分析IIO子系統的設計框架。

相關焦點

  • LINUX IIO子系統分析之三 IIO trigger分析
    irq chip,在trigger內部,當多個trigger consumer註冊時,則trigger內部會為其分配一個虛擬的irq,並根據trigger consumer提供給pollfunc,為該irq註冊中斷處理函數,這樣當該trigger觸發後,則會遍歷所有該trigger上已註冊的虛擬irq,調用其中斷處理函數從而執行trigger consumer提供的處理函數(關於linux中斷子系統的內容可參考我之前寫的中斷子系統專欄
  • LINUX IIO子系統分析之二 IIO子系統數據結構分析
    基本就是這些內容,iio子系統主要藉助字符設備文件以及sysfs屬性文件實現數據的獲取與參數設定等操作。),現在僅需要關注pollfunc即可,基本上沒有使用pollfunc_event的;channels是該iio device所有channel相關的參數信息,我們在iio_chan_spec中將詳細說明;channel_attr_list鍊表包含了IIO子系統為所有channel創建的動態屬性(針對hwmon子系統我們之前也分析過,其主要通過在sysfs下創建屬性文件實現與
  • LINUX IIO子系統分析之五 iio buffer介紹
    ,且文件操作接口為iio_buffer_fileops(而藉助sysfs的kobject uevent,則會將cdev add的信息發送給應用程式,應用層的mdev/udev接收到cdev add的uevent之後,則會調用mknod完成字符設備文件節點的創建,詳細內容可參考我之前寫的字符設備文件專欄的內容《》)。
  • LINUX IIO子系統分析之四 IIO EVENT設計分析
    ,應用層的mdev/udev接收到cdev add的uevent之後,則會調用mknod完成字符設備文件節點的創建,詳細內容可參考我之前寫的字符設備文件專欄的內容《》)。所謂匿名即該字符設備文件節點並不會顯示在文件系統中(無法在應用層中找到該文件名稱),且一個iio device同一時刻僅可創建一個匿名字符設備文件節點。
  • LINUX IIO子系統分析之七 虛擬iio設備驅動實現
    buffer對應的數據連續採集功能,實際的晶片可能並不提供該中斷)二、虛擬IIO DEVICE DRIVER實現所需的知識點 為了讓本次實現的IIO DEVICE能夠儘量實現數據單次採集、iio buffer、iio event等功能,本次虛擬iio device driver主要涉及如下幾個知識點:
  • LINUX IIO子系統分析之六 IIO設備驅動開發流程說明
    一、IIO子系統的關鍵技術點總結 以上幾篇文章已經對IIO子系統的設計實現做了大致說明,IIO子系統主要使用如下幾個關鍵技術點實現其主要功能:藉助sysfs、kobject機制,實現IIO DEVICE各類的設備屬性,並藉助於sysfs暴露給應用程式。
  • Linux V4l2子系統專欄之一 子系統概述
    從本章開始,我們開始分析V4L2子系統(Video for Linux two),主要用於音視頻設備的框架。V4l2主要用於驅動視頻輸出設備(video outpt interface)、Video overlay interface、Video output overlay device、VBI interface、Radio interface等。
  • Linux regmap子系統分析之一 系統概述
    本系統專欄主要涉及如下幾個子章節:一、regmap子系統概述二、regmap子系統數據結構分析三、regmap子系統接口說明四、regmap bus實例說明(以i2c為例)本章我們主要對regmap子系統做一個簡單的說明。
  • LINUX CommonClock Framework子系統分析之一 系統概述
    本專欄主要介紹linux的ccf子系統,主要用於系統clock的管理等操作。本專欄我們大概分為如下幾章進行學習:一、CCF子系統概述二、CCF子系統數據結構分析及關聯說明三、CCF子系統的clk註冊與註銷接口實現分析四、虛擬的clk設備驅動實現 本章我們主要進行CCF子系統的概述。
  • Linux regulator子系統分析之一 總體概述
    Linux regulator 子系統主要用於管理電壓、電流電源設備的電壓、電流輸入使能、動態調整電壓、電流等,屬於電源管理的一部分。從本章開始我們分析regulator子系統。主要分為如下幾部分:一、regulator子系統總體概述二、regulator相關數據結構分析三、regulator相關註冊、註銷函數分析四、regulator設備驅動實現本章主要對regulator子系統進行簡要說明。
  • Linux regmap子系統分析之三 regmap bus實例分析
    在前面一章我們分析了regmap子系統的數據結構,基本上熟悉了數據結構的關聯,也就大概理解了regmap子系統的實現流程,本章我們簡要介紹下regmap子系統中接口的調用過程,然後介紹下regmap bus的實現及其提供的regmap的創建及註銷接口。
  • Linux GUI子系統概述 GUI子系統的構成及工作流程
    Linux GUI子系統概述 GUI子系統的構成及工作流程 Nick 發表於 2020-12-05 10:45:54 作者:Nick 開始前的幾點說明
  • Linux input子系統編程、分析與模板
    內核中的輸入子系統自底向上分為設備驅動層,輸入核心層,事件處理層。由於每種輸入的設備上報的事件都各有不同,所以為了應用層能夠很好識別上報的事件,內核中也為應用層封裝了標準的接口來描述一個事件,這些接口在"/include/upai/linux/input"中。
  • LINUX 中斷子系統專欄之一 子系統架構簡述
    因此這周就簡要介紹irq子系統框架,然後再開發一個虛擬的irq controller driver 。針對irq 子系統專欄,主要包括如下兩部分內容:一、IRQ子系統框架簡述二、虛擬IRQ CONTROLLER DRIVER實例本篇主要是IRQ子系統框架簡述,本篇文章主要分為如下幾個小章節:一、IRQ相關概念說明二、IRQ子系統相關數據結構及其關聯說明三、IRQ子系統提供的相關接口對於irq
  • win10安裝linux子系統(wsl)
    win10安裝linux子系統(wsl)1、打開Microsoft Store方式一:在電腦左下角打開方式二:在電腦左下角的搜索裡2、允許windows運行linux子系統打開控制面板->程序和功能->啟動或關閉windows功能勾上「適用於Linux的Windows子系統」,點擊確定,然後按提示重啟電腦。
  • 簡單分析「Windows將被微軟放棄淪為Linux子系統」
    昨天看一個消息:有觀點認為Windows將被微軟放棄而淪為Linux子系統 – Windows – cnBeta.COMhttps://www.cnbeta.com/articles/tech/1034593.htmWindows
  • Linux regmap子系統分析之二 從數據結構分析系統實現
    上一章我們簡要分析了regmap子系統,本章我們將從regmap子系統的數據結構介紹regmap子系統的實現。 一、數據結構間的關聯及說明 針對regmap子系統,我們首先要知道regmap子系統要解決的痛點是什麼?
  • Linux regulator子系統分析之三 regulator註冊、註銷接口分析
    在上一章我們介紹了regulator子系統相關的數據結構間的關聯以及每一個數據結構的定義。針對數據結構間的關聯則需要regulator子系統提供的接口實現。而本章我們就說明這些接口。本章的章節如下:一、regulator device的註冊與註銷二、regulator的註冊與註銷(regulator device的使用者)三、regulator子系統提供的接口一、regulator device的註冊與註銷針對regulator device的註冊與註銷函數主要涉及regulator_register、regulator_unregister
  • 剛知道,原來win 10內置了一個Linux子系統
    win 10上安裝linux是沒必要這麼麻煩的,win 10自帶了一個linux子系統,只是大家沒有發現而已。下面筆者就為大家介紹一下win 10的Linux子系統。筆者的電腦上已經裝好了這個子系統,打開它的方式非常簡單,就像打開普通的程序一樣,接下來筆者給大家說一下安裝子系統的具體步驟。
  • win10子系統kali-linux安裝圖形化界面總結
    之前是有個虛擬機的,後來發現win10專業版自帶有linux子系統。於是就安裝使用了一下。由於網上一些安裝圖形化界面的教程因為時間太久等原因有些不能用了。所以整理了這份文檔,供後來人避坑。環境系統:win10專業版開啟:開發者模式和Windows功能(適用於Linux的Windows子系統)下載&安裝打開win10自帶的MicrosoftStore(應用商店),搜索linux,就可以找到