LED驅動程序框架

2020-08-30 韋東山嵌入式Linux

來源:百問網

作者:韋東山

本文字數:961,閱讀時長:3分鐘

6.1 回顧字符設備驅動程序框架

6.2 對於 LED驅動,我們想要什麼樣的接口?


6.3 LED驅動要怎麼寫,才能支持多個板子?分層。

1. 把驅動拆分為通用的框架(leddrv.c)、具體的硬體操作(board_X.c):


2. 以面向對象的思想,改進代碼:

抽象出一個結構體:


6.4 寫代碼

使用 GIT 下載所有源碼後,本節源碼位於如下目錄:

01_all_series_quickstart\

05_嵌入式 Linux 驅動開發基礎知識\source\02_led_drv\01_led_drv_template

6.4.1 驅動程序

驅動程序分為上下兩層:leddrv.c、board_demo.c。

leddrv.c 負責註冊 file_operations 結構體,它的 open/write 成員會調用 board_demo.c 中提供的硬

件 led_opr 中的對應函數。

6.4.1.1 把 LED 的操作抽象出一個 led_operations 結構體

首先看看 led_opr.h,它定義了一個 led_operations 結構體,把 LED 的操作抽象為這個結構體:

6.4.1.2 驅動程序的上層:file_operations 結構體

上層是 leddrv.c,它的核心是 file_operations 結構體,首先看看入口函數: 80

第 88 行向內核註冊一個 file_operations 結構體。

第 102 行從底層硬體相關的代碼 board_demo.c 中獲得 led_operaions 結構體。


再來看看 leddrv.c 中 file_operations 結構體的成員函數:

第 49 行、第 60 行,會調用 led_operations 結構體中對應的函數。


6.4.2 測試程序

測試程序為 ledtest.c:

第 26 行打開設備節點。

如果用戶想點亮 LED,第 37 行會把值「1」通過 write 函數寫入驅動程序。

如果用戶想熄滅 LED,第 42 行會把值「0」通過 write 函數寫入驅動程序。


6.4.3 上機測試

這只是一個示例程序,還沒有真正操作硬體。測試程序操作驅動程序時,只會導致驅動程序中列印信息。

首先設置交叉工具鏈,修改驅動 Makefile 中內核的源碼路徑,編譯驅動和測試程序。

啟動開發板後,通過 NFS 訪問編譯好驅動程序、測試程序,就可以在開發板上如下操作了:

相關焦點

  • Android非標準硬體驅動程序的設計
    1 Android系統驅動程序架構1.1 驅動程序分層體系結構Android是基於Linux的,它使用了Linux內核,但應用程式使用Java語言開發,所以應用程式在調用設備驅動時不能像一般的Linux應用程式那樣直接使用系統調用,必須通過Java虛擬機的JNI的本地(Native)方法使用設備。
  • 基於GPIO子系統的LED驅動程序
    在驅動代碼上不需要我們做任何事情。GPIO本身需要確定引腳,這也需要在設備樹裡指定。設備樹節點會被內核轉換為platform_device。對應的,驅動代碼中要註冊一個platform_driver,在probe函數中:獲得引腳、註冊file_operations。在file_operations中:設置方向、讀值/寫值。
  • 「正點原子FPGA連載」第二十七章子系統下的LED驅動實驗
    在上一章當中已經給大家介紹了linux的gpio子系統,那本章我們就來編寫一個基於gpio子系統API的LED驅動程序,本章將在第二十五章實驗的基礎上進行修改完成。27.1實驗簡介在《第二十五章 設備樹下的LED驅動實驗》中,雖然我們在dtsled.c驅動代碼中獲取到了GPIO有關寄存器物理地址,然後使用of_iomap函數進行內存映射,得到對應的虛擬地址,最後操作寄存器對應的虛擬地址完成對GPIO的初始化,但本質上還是跟裸機沒啥區別,還非常的麻煩。
  • 「正點原子FPGA連載」第二十二章Linux LED驅動開發
    所以本章的LED燈驅動最終也是對ZYNQ的IO口進行配置,與裸機實驗不同的是,在Linux下編寫驅動要符合Linux的驅動框架。領航者開發板上的PS_LED0連接到ZYNQ的MIO7這個引腳上,因此本章實驗的重點就是編寫Linux下ZYNQ引腳控制驅動。關於ZYNQ的GPIO詳細講解請參考《領航者ZYNQ之嵌入式開發指南》第二章。
  • led驅動電源輸出電壓_led驅動電源匹配
    打開APP led驅動電源輸出電壓_led驅動電源匹配 網絡整理 發表於 2020-04-03 15:57:27   led驅動電源輸出電壓   市場上普遍有兩種電壓,12VDC和24VDC,其中24VDC要對來說比較多一些。
  • 關於led工礦燈等led燈具驅動的常識您了解嗎?
    Led工礦燈、投光燈、路燈等led照明燈具除了前文中提到的led晶片,還有一個關鍵部件就是led驅動,可以說在led照明燈具裡面,如果說led晶片是基礎,那麼led驅動就是整燈的關鍵,因為在整個系統中,led驅動電源更複雜,需要解決的問題更多,也是造成工礦燈、路燈、投光燈等led照明燈具失效最多最關鍵的因素
  • 嵌入式Linux之我行——LED驅動在2440上的實例開發
    去掉內核已有的LED驅動設置,因為IO口與mini2440開發板的不一致,根本就不能控制板上的LED。module_exit(led_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Huang Gang");MODULE_DESCRIPTION("My2440 led driver");4.
  • 「正點原子Linux連載」第五十六章Linux自帶的LED燈驅動實驗
    Linux內核的LED燈驅動採用platform框架,因此我們只需要按照要求在設備樹文件中添加相應的LED節點即可,本章我們就來學習如何使用Linux內核自帶的LED驅動來驅動I.MX6U-ALPHA開發板上的LED0。
  • 「正點原子FPGA連載」第二十五章設備樹下的LED驅動實驗
    本章在第二十三章實驗的基礎上完成,只是將其驅動開發改為設備樹形式而已。25.1設備樹LED驅動原理在《第二十三章 新字符設備驅動實驗》中,我們直接在驅動文件newchrled.c中定義有關寄存器物理地址,然後使用io_remap函數進行內存映射,得到對應的虛擬地址,最後操作寄存器對應的虛擬地址完成對GPIO的初始化。
  • Linux內核驅動程序的配置
    在Linux 內核中增加程序需要完成以下 3 項工作:> 1. 將編寫的原始碼複製到 Linux 內核原始碼的相應目錄> 2. 在目錄的Kconfig 文件中增加新原始碼對應項目的編譯配置選項> 3. 在目錄的 Makefile 文件中增加對新原始碼的編譯條目1.
  • Linux USB總線驅動框架分析
    1.2 USB接入識別大致過程當識別出有USB設備插入後,linux內的USB總線驅動程序發出命令至該設備,與設備對話,並詢問設備信息(描述符),設備收到請求後,回復設備描述符給總線驅動程序。且總線驅動程序會為該設備分配一個地址,如上地址為2,當後期訪問某個USB設備時,均會通過這個地址編號,當新接入的USB設備被第一次訪問時,以地址0來訪問。
  • USB驅動框架(三)
    《USB驅動框架(一)》,《USB驅動框架(二)》。接下來我們看一下USB設備驅動框架。    這裡的USB設備驅動指的是主機角度來看的,怎樣訪問被插入的USB設備,而不是指USB設備內部本身運行的固件程序。
  • USB設備驅動程序開發
    USB設備驅動程序的模型  USB設備驅動程序是一種典型的WDM(Windows Driver Model)驅動程序,其程序模型如圖1所示。設備驅動程序包括兩層:函數驅動程序層和總線驅動程序層,函數驅動程序一方面通過IRP及API函數與應用程式通信,另一方面調用相應的總線驅動程序,總線驅動程序完成和外設硬體通信。USB總線驅動程序已經由作業系統提供,驅動程序開發的重點是函數驅動程序。
  • 領域驅動設計框架Axon實踐
    背景2004年,Eric Evans發表了Domain Driven Design(領域驅動設計,DDD)這一著作,並在書中對領域驅動作出了開創性的理論闡述,至今領域驅動設計已問世十幾年。愛奇藝號技術團隊,在實施微服務化過程中,應用領取驅動思想,採用Axon框架落地了多個服務,下面是實施過程中的經驗總結。
  • 技術文章:基於Cortex-A9 LED彙編、C語言驅動編寫
    對於驅動工程師來說,我們只需要知道外設與SOC交互的一些數據線和信號線即可。用主控晶片控制這些外設的一般步驟:看電路原理圖,弄明白主控晶片和外設是怎麼連接的,對於驅動工程師來說,主要是看外設的一些clk、數據引腳、控制引腳是如何連接的;外設一般都會連接到SOC的1個或者多個控制器上,比如i2c、spi、gpio等,有的是數據線有的是信號線,中斷線等;根據電路連接和需求對主控晶片進行設置,往往對外設的設置都是通過寄存器操作實現;書寫相應代碼,實現功能
  • Led驅動晶片市場值得期待,明微電子需選擇合適市場時機
    明微電子是一家以led驅動晶片生產為主的企業,此外還生產小部分的非led驅動類的電源管理晶片,產品主要應用於led顯示屏、景觀照明、通用照明、家電領域。Led是一種常用的發光器件,通過電子與空穴複合釋放能量發光,可以高效的將電能轉化為光能。
  • i.MX8 系列 | 如何通過 GPIO 驅動配置實現控制 i.MX8 晶片引腳電平變化
    本文我們要講的是如何通過 GPIO 驅動配置實現控制 i.MX8 晶片引腳電平變化。>; }; 以上便完成 DTS 配置,接下來需要編寫驅動代碼 myled.c ,首先建立好驅動代碼框架:1.
  • LabVIEW程序的主要框架
    下面簡單介紹下幾種簡易的框架:Master/Slave Deisgn Pattern(主從設計模式)如上圖模板用於創建主/從模式的應用程式。主循環始終保持執行狀態,並向一到多個從循環發送通知,使其執行代碼。從循環收到通知後,將連續執行循環內部的代碼直到完成任務,然後等待下一個通知。與改模式相比,生產者/消費者模式僅當隊列中仍有數據時,消費者循環才會執行。
  • 北京球形屏led製作工廠-北京忠為世緣科技發展有限公司
    通常室內led顯示屏都是離地一定高度貼牆安裝。這種安裝方式的屏幕,背面*好是有實體承重牆;  小面積的,一般3-10㎡面積採用鋁合金邊框結構安裝,大面積的建議焊方管結構框架安裝,大同小異。  下面介紹小面積led顯示屏用鋁合金框架結構安裝步驟:  1、先在平地上將整個屏幕的鋁合金邊框四邊拼接好,方管均用螺絲上緊到邊框,這樣就做成了LED屏幕主體框架結構;  2)、屏體結構安全設計  a.防風設計 b.防震設計 c.防水設計 d.防潮/防結露設計 e.防塵設計 f.防氧化/防腐蝕設計  3)、溫度控制系統設計  A.屏體的散熱系統及防高溫設計  a.優良的驅動IC選擇 b.完善的工藝設計
  • 「正點原子FPGA連載」第二十七章gpio子系統下的驅動實驗
    在上一章當中已經給大家介紹了linux的gpio子系統,那本章我們就來編寫一個基於gpio子系統API的led驅動程序,本章將在第二十五章實驗的基礎上進行修改完成。27.1實驗簡介在《第二十五章 設備樹下的LED驅動實驗》中,雖然我們在dtsled.c驅動代碼中獲取到了GPIO有關寄存器物理地址,然後使用of_iomap函數進行內存映射,得到對應的虛擬地址,最後操作寄存器對應的虛擬地址完成對GPIO的初始化,但本質上還是跟裸機沒啥區別,還非常的麻煩。