吴忠躺衫网络科技有限公司

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

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

3天內不再提示

如何配置和操作Linux驅動程序開發板

德州儀器 ? 來源:德州儀器 ? 作者:德州儀器 ? 2022-02-15 13:36 ? 次閱讀

本文檔概述了利用Linux開發板為 Linux 內核開發驅動程序的基礎知識,并簡單介紹了如何配置和操作 Linux 驅動程序開發板。

一 開發背景

驅動是什么?

驅動程序是駐留在內核中的一段軟件,它促進主機設備和外圍設備之間的交互。這些外圍設備可以像鼠標或鍵盤一樣普通。我們為我們的產品編寫驅動程序軟件以便于和各種類型的主機設備進行通信。

Linux內核是什么?

Linux內核是構成Linux操作系統的核心代碼。 常見的基于 Linux 內核構建的高級操作系統 (HLOS) 有 Ubuntu、Android 和 Yocto。一個計算機系統是一個硬件和軟件的共生體,它們互相依賴,不可分割。計算機的硬件,含有外圍設備、處理器、內存、硬盤和其他的電子設備組成計算機的發動機。但是沒有軟件來操作和控制它,自身是不能工作的。完成這個控制工作的軟件就稱為操作系統,在Linux的術語中被稱為“內核”,也可以稱為“核心”。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網絡通信,以及系統的初始化(引導)、系統調用等。內核的開發由維護人員來監督,維護者擁有內核各個部分的開發權,任何添加到內核各自部分的代碼都必須發送給他們。 這個通過維護者向內核提交代碼的過程稱為上游。

二 環境搭建

1. 軟件環境的搭建

強烈建議使用專用的 Linux 機器來進行驅動程序的開發。 除了 Windows PC 之外,使用 Linux 機器或使用 Linux 機器作為主計算機是驅動程序開發的理想配置。不建議在 Windows 中運行 Linux 虛擬機,除非用戶具有設置和維護虛擬機的背景,否則可能會出現兼容性和存儲的問題。

2. 硬件設備的連接

如何配置和操作Linux驅動程序開發板

圖1. Linux驅動開發過程中硬件設備的連接示意圖

硬件設備的連接較為簡單,其中,Linux機器通過USB to OTG和USB to TTL的轉接線相連,Linux開發板通過I2C總線和I2S總線與目標設備相連以完成驅動的開發。USB to TTL模塊的作用就是把通信電平轉換到Linux主機和Linux開發板都能識別的電平進行通信。

3. Linux操作系統中的常用工具

Gedit

Gedit 是一個基于 GUI 的文本編輯器,具有軟件開發的一些基本功能。 Gedit 可以用作純文本編輯器,也可以把它用來當成是一個集成開發環境 (IDE), 它會根據不同的語言高亮顯現關鍵字和標識符。

Picocom

Picocom 是一個常見的串口調試工具,可以在 Linux 終端窗口中運行。利用Picocom可以通過串口通信協議與 Linux開發板進行通信和操作。

Nano

Nano 是一個基于命令行的文本編輯器。 Nano 提供最基礎的文本編輯功能,用于在終端內進行編輯。 在 Ubuntu 中,Nano 是默認的命令行文本編輯器。

三 Linux驅動開發

1. 概述

如何配置和操作Linux驅動程序開發板

圖2. Linux驅動開發流程及主要開發文件

針對Linux驅動的開發,有3大類型的文件是必不可少的,其中一部分就是最基礎的驅動文件(The driver files),驅動文件中包含了驅動本身的文件后綴為.C的源代碼和.H的頭文件,以及Kconfig文件和Makefile文件,其中,Kconfig文件的作用是當我們編譯Linux內核時,我們會發現有的模塊被編譯進了內核,有的只是生成了一個個模塊。因此,我們如何讓內核發現我們編寫的模塊呢?這就需要在Kconfig文件中進行定義說明。至于如何生成模塊,那么就需要利用Makefile文件告訴編譯器,怎么編譯生成這個模塊。另一個部分就是我們的設備樹文件(Devicetree files),所以什么是設備樹文件呢?其實在沒有設備樹文件以前,我們需要將Linux開發板的信息硬編碼到內核的.C源文件中。不同開發板的硬件配置不一樣,因此內核中存在大量的板級配置源碼,從而會造成代碼冗余。因此針對這個現象,我們可以用設備樹的方法將板級配

置信息獨立的存放到.dts/.dtsi文件中。此時,針對不同的開發板,只需要配置相應的.dts/.dtsi文件即可,這樣可以避免大量重復的編碼工作,但是如果更換Linux開發板那么就需要更換相對應的設備樹文件進行配置。最后一部分我們需要的文件就是作為參考文檔的說明文檔(Reference documentation),這個參考文檔中會對如何配置設備樹文件做出定義,是我們編寫設備樹文件時必須參考的說明文檔。驅動文件(The driver files)經過編譯會生成名為zImage的鏡像編譯文件,設備樹文件(Devicetree files)經過編譯會生成文件后綴為.dtb的二進制文件,在成功的通過編譯得到這兩個文件后,我們就可以將這兩個文件燒錄到我們的Linux開發板中,這就是我們Linux驅動開發的原理過程。

2. 開發驅動源代碼、Makefile和Kconfig文件

要開始開發驅動程序源代碼、Makefile 和 Kconfig 文件,用戶必須導航到內核中驅動程序所在的目錄。 進入該目錄后,創建一個適當的源代碼文件并打開現有的 Kconfig 和 Makefile 文件。在 Kconfig 文件中,開發人員需要為設備驅動程序創建一個條目,這個條目向內核描述了設備需要的驅動程序,并專門列出了驅動程序的依賴項。在 Makefile 文件中,開發人員同樣需要為設備驅動程序創建一個條目,該條目負責告訴編譯器需要從驅動源代碼創建哪些目標文件。雖然驅動源代碼對于所要開發的驅動程序和開發人員來說是獨一無二的,但每個驅動程序都有相似的流程。首先,設備必須在一系列模塊表中注冊。例如,of_device_idtable 用于將設備實例與設備樹文件匹配,i2c_device_idtable 用于建立 I2C 通信,acpi_device_table 用于 ACPI 系統。所有模塊表都由最終的 module_i2c_driver 表鏈接。在建立模塊表之后,驅動程序會執行probe() 函數,在此函數中,驅動程序檢查設備是否可用和可配置,如果設備可用,則為驅動程序分配資源。如果設備不可用,則函數應返回錯誤并釋放任何已分配的資源。在此之后,init() 函數將分別運行并獲取和設置可以在用戶空間中配置和讀取的屬性。

3. 開發Defconfig和Devicetree文件

Defconfig 和 Devicetree 文件特定用于開發人員用來驗證驅動程序的平臺。Defconfig 確定編譯內核時要在內核中安裝或啟用哪些模塊。開發者可以選擇手動編輯設備樹或使用 pinmux 工具生成設備樹代碼。

4. 說明文檔 / dt-bindings

說明文檔描述了如何操作和配置設備驅動程序。 此文檔應提供設備驅動程序及其驅動設備的簡要說明。 在簡要說明之后,會列出驅動程序的屬性。其中最重要的屬性即 compatible 屬性。 所有兼容的實例都列在其中。 在 compatible 屬性之后,用戶將列出所有可配置的屬性。在每個屬性中,開發人員需提供屬性的簡要說明,指導用戶如何配置該屬性。

結語

本文簡要介紹了如何利用Linux開發板為 Linux 內核開發驅動程序的原理和基礎過程,要了解更多關于Linux驅動開發相關的詳細信息,請參閱“Third Edition of Linux Device Drivers”或“The Linux Kernel Module Programming Guide”,以便更加深入地了解該主題。

審核編輯:湯梓紅

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

    關注

    87

    文章

    11345

    瀏覽量

    210385
  • 主機
    +關注

    關注

    0

    文章

    1010

    瀏覽量

    35306
  • 開發板
    +關注

    關注

    25

    文章

    5121

    瀏覽量

    98189
收藏 人收藏

    評論

    相關推薦

    迅為RK3568開發板驅動指南Linux中通用SPI設備驅動

    迅為RK3568開發板驅動指南Linux中通用SPI設備驅動
    的頭像 發表于 01-23 11:02 ?1518次閱讀
    迅為RK3568<b class='flag-5'>開發板</b><b class='flag-5'>驅動</b>指南<b class='flag-5'>Linux</b>中通用SPI設備<b class='flag-5'>驅動</b>

    Linux驅動程序程序員指南

    電子發燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發表于 11-22 15:53 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>驅動程序</b><b class='flag-5'>程序</b>員指南

    LSP 2.10 DaVinci Linux驅動程序

    電子發燒友網站提供《LSP 2.10 DaVinci Linux驅動程序.pdf》資料免費下載
    發表于 10-09 09:30 ?0次下載
    LSP 2.10 DaVinci <b class='flag-5'>Linux</b><b class='flag-5'>驅動程序</b>

    嵌入式linux開發板怎么操作

    嵌入式Linux開發板是一種基于Linux操作系統的嵌入式系統開發平臺。它通常包括一個處理器、內存、存儲器、輸入/輸出接口等硬件組件,以及一
    的頭像 發表于 09-02 09:09 ?467次閱讀

    嵌入式linux開發板芯片的工作原理

    嵌入式Linux開發板是一種基于Linux操作系統的嵌入式系統開發平臺,它廣泛應用于工業控制、智能家居、智能交通、醫療設備等領域。 嵌入式
    的頭像 發表于 09-02 09:07 ?475次閱讀

    linux開發板與樹莓派的區別

    操作系統的微型計算機,主要用于教育、編程、媒體播放等領域。 硬件配置 Linux開發板Linux開發板
    的頭像 發表于 08-30 15:34 ?1140次閱讀

    linux開發板如何編譯curl

    Linux開發板上編譯 curl 庫通常涉及到幾個步驟,包括準備開發環境、下載源代碼、配置編譯選項以及執行編譯和安裝過程。以下是一個基本的指南,幫助你在
    的頭像 發表于 08-30 15:33 ?789次閱讀

    linux開發板和單片機開發的區別

    、PIC等,處理能力和內存容量相對較低。 操作系統 Linux開發板通常使用Linux操作系統,具有豐富的軟件資源和
    的頭像 發表于 08-30 15:30 ?1214次閱讀

    Linux設備驅動程序分類有哪些

    Linux設備驅動程序操作系統與硬件設備之間的橋梁,負責實現硬件設備與操作系統之間的通信和控制。Linux設備
    的頭像 發表于 08-30 15:11 ?703次閱讀

    linux驅動程序如何加載進內核

    Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是
    的頭像 發表于 08-30 15:02 ?589次閱讀

    linux驅動程序主要有哪些功能

    Linux驅動程序操作系統與硬件設備之間進行通信的橋梁,負責實現硬件設備與操作系統之間的數據交換和控制。Linux
    的頭像 發表于 08-30 14:47 ?463次閱讀

    linux驅動程序的編譯方法是什么

    Linux驅動程序的編譯方法主要包括兩種: 與內核一起編譯 和 編譯成獨立的內核模塊 。以下是對這兩種方法的介紹: 一、與內核一起編譯 與內核一起編譯意味著將驅動程序的源代碼直接集成到Linu
    的頭像 發表于 08-30 14:46 ?763次閱讀

    linux驅動程序運行在什么空間

    Linux 驅動程序操作系統的一部分,負責管理硬件設備與操作系統之間的交互。驅動程序運行在內核空間(Kernel Space),這是
    的頭像 發表于 08-30 14:37 ?527次閱讀

    虹科技術 Linux環境再升級:PLIN驅動程序正式發布

    Linux驅動程序領域再添新成員,PLIN驅動程序現已正式發布。
    的頭像 發表于 06-28 13:34 ?407次閱讀
    虹科技術 <b class='flag-5'>Linux</b>環境再升級:PLIN<b class='flag-5'>驅動程序</b>正式發布

    ESP-32DevKitc開發板驅動程序無法安裝是怎么回事?

    在購買了ESP32芯片以及ESP32-DevKitc開發板之后,將開發板用數據線連接到電腦之后,并沒有自動安裝驅動程序,然后我在網上也下載了CP210X驅動程序,也沒有用,請問怎么解決
    發表于 06-21 14:27
    百家乐官网连黑记录| 粤港澳百家乐官网娱乐| 娱乐城开户| 永和县| 三合四局24向黄泉| 中山水果机定位器| 百家乐官网二游戏机| 山西百家乐用品| 江孜县| 百家乐游戏机分析仪| 大发扑克网| 百家乐官网乐翻天| 威尼斯人娱乐平台网上百家乐| 太阳城百家乐官网手机投注| 金宝博百家乐娱乐城| 利记娱乐场| 澳门百家乐秘诀| 明升网站| 格龙24山五行| 娱乐城在线| 百家乐官网视频游戏网站| 澳门百家乐必赢技巧| 百家乐官网可以算牌么| AG百家乐大转轮| 百家乐官网视频游戏帐号| 豪门百家乐的玩法技巧和规则| 百家乐官网的保单打法| 百家乐怎样玩的| 百家乐官网赌缆十三式| 新加坡百家乐的玩法技巧和规则 | 神娱乐百家乐官网的玩法技巧和规则| 大发888亚洲赌场| 帝王百家乐官网的玩法技巧和规则| 大连娱网棋牌大厅| 免费百家乐官网分析工具| 网上棋牌赌博| 网上百家乐骗人的吗| 百家乐官网有多少网址| 百家乐群bet20| 百家乐官网游戏介绍与分析| 百家乐英皇娱乐平台|