【Linux-LCD 驅動】

Linux-LCD 驅動

  • ■ Framebuffer 簡稱 fb
  • ■ LCD 驅動程序編寫
    • ■ 1、LCD 屏幕 IO 配置
    • ■ 2、LCD 屏幕參數節點信息修改
    • ■ 3、LCD 屏幕背光節點信息
    • ■ 4、使能 Linux logo 顯示
  • ■ 設置 LCD 作為終端控制臺
    • ■ 1、設置 uboot 中的 bootargs
    • ■ 2、修改/etc/inittab 文件
  • ■ LCD 背光調節
  • ■ LCD 自動關閉解決方法
    • ■ 1、按鍵盤喚醒
    • ■ 2、關閉 10 分鐘熄屏功能

■ Framebuffer 簡稱 fb

fb 是一種機制,將系統中所有跟顯示有關的硬件以及軟件集合起來,虛擬出一個 fb 設備,
當我們編寫好 LCD 驅動以后會生成一個名為/dev/fbX(X=0~n)的設備,應用程序通過訪問/dev/fbX 這個設備就可以訪問 LCD.
因此我們是可以看到/dev/fb0 這樣一個設備
/dev/fb0 是個字符設備.因此肯定有file_operations 操作集
Linux 內核將所有的 Framebuffer 抽象為一個叫做 fb_info 的結構體, fb_info 結構體包含了 Framebuffer 設備的完整屬性和操作集合,
fb_info 結構體定義在 include/linux/fb.h 文件里面
fb_info 結構體的成員變量很多,我們重點關注 var、 fix、 fbops、 screen_base、 screen_size和 pseudo_palette。 mxsfb_probe 函數

■ LCD 驅動程序編寫

■ 1、LCD 屏幕 IO 配置

// 修改dts 文件      24 根數據線配置項。
pinctrl_lcdif_dat: lcdifdatgrp {      fsl,pins = <MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79      電氣屬性都設置為 0X79        0X49 驅動能力改為 R0/1MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79>;
}; // 4 根控制線配置項,包括 CLK、ENABLE、 VSYNC 和 HSYNC
pinctrl_lcdif_ctrl: lcdifctrlgrp {fsl,pins = <MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79>;
};pinctrl_pwm1: pwm1grp {fsl,pins = <MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0>;
};

■ 2、LCD 屏幕參數節點信息修改

&lcdif {pinctrl-names = "default";pinctrl-0 = <&pinctrl_lcdif_dat       /* 使用到的 IO */&pinctrl_lcdif_ctrl// &pinctrl_lcdif_reset>;	 刪除掉原來的 pinctrl_lcdif_reset,因為沒有用到屏幕復位 IO,display = <&display0>;status = "okay";display0: display {    /* LCD 屬性信息 */bits-per-pixel = <24>;    /* 一個像素占用 24bit */bus-width = <24>;     /* 總線寬度 */display-timings {native-mode = <&timing0>; /* 時序信息 */timing0: timing0 {clock-frequency = <9200000>;    /* LCD 像素時鐘,單位 Hz */hactive = <1024>;     /* LCD X 軸像素個數 */vactive = <600>; 	 /* LCD Y 軸像素個數 */hfront-porch = <160>;  /* LCD hfp 參數 */hback-porch = <140>;   /* LCD hbp 參數 */hsync-len = <20>;    /* LCD hspw 參數 */vback-porch = <20>;   /* LCD vbp 參數*/vfront-porch = <12>;  /* LCD vfp 參數 */vsync-len = <3>;    /* LCD vspw 參數 */hsync-active = <0>;   /* hsync 數據線極性 */vsync-active = <0>;   /* vsync 數據線極性 */de-active = <1>;      /* de 數據線極性 */pixelclk-active = <0>;  /* clk 數據線先極性 */};};};
};

■ 3、LCD 屏幕背光節點信息

LCD 接口背光控制 IO 連接到了 I.MX6U 的 GPIO1_IO08 引腳上, GPIO1_IO08 復用為 PWM1_OUT,通過 PWM 信號來控制 LCD 屏幕背光的亮度

backlight {compatible = "pwm-backlight";pwms = <&pwm1 0 5000000>;      設置背光使用pwm1, PWM 頻率為 200Hz。brightness-levels = <0 4 8 16 32 64 128 255>;   設置背 8 級背光(0~7), 對應占空比為0%1.57%3.13%6.27%12.55%25.1%50.19%100%default-brightness-level = <6>; 設置默認背光等級為 6,也就是 50.19%的亮度status = "okay";
};&pwm1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_pwm1>;status = "okay";
};&iomuxc {pinctrl-names = "default";pinctrl-0 = <&pinctrl_hog_1>;imx6ul-evk { 節點下面添加pinctrl_pwm1: pwm1grp {fsl,pins = <MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0>;};

在這里插入圖片描述

■ 4、使能 Linux logo 顯示

Linux 內核一般都會默認,開啟 小企鵝 logo 顯示如何使能 Linux 小企鵝 logo 顯示
在這里插入圖片描述
三個選項分別對應黑白、 16 位、 24 位色彩格式的 logo。

■ 設置 LCD 作為終端控制臺

■ 1、設置 uboot 中的 bootargs

	setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.250:
/home/zuozhongkai/linux/nfs/rootfs ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off

console=tty1 console=ttymxc0,115200
第一次設置 console=tty1,也就是設置 LCD 屏幕為控制臺,第二遍又設置 console=ttymxc0,115200,也就是設置串口也作為控制臺。
相當于我們打開了兩個 console,一個是 LCD,一個是串口,大家重啟開發板就會發現 LCD 和串口都會顯示 Linux 啟動 log 信息。

■ 2、修改/etc/inittab 文件

打開開發板根文件系統中的/etc/inittab 文件,在里面加入下面這一行:

tty1::askfirst:-/bin/sh

在這里插入圖片描述
重啟以后開發板 LCD 屏幕最后一行會顯示下面一行語句:Please press Enter to activate this console 按下回車鍵使能當前終端

我們可以通過下面這一行命令向LCD 屏幕輸出“hello linux!”
echo hello linux > /dev/tty1

至此,我們就擁有了兩套終端,一個是基于串口的 SecureCRT,一個就是我們開發板的 LCD屏幕,但是為了方便調試,我們以后還是以 SecureCRT 為主。

■ LCD 背光調節

背光設備樹節點設置了 8 個等級的背光調節,可以設置為 0~7,我們可以通過設置背光等級來實現 LCD 背光亮度的調節

/sys/devices/platform/backlight/backlight/backlight
brightness 表示當前亮度等級, max_bgigntness 表示最大亮度等級。
比如設置屏幕亮度等級為 7,那么可以使用如下命令: echo 7 > brightness

■ LCD 自動關閉解決方法

默認情況下 10 分鐘以后 LCD 就會熄屏,這個并不是代碼有問題,而是 Linux 內核設置的,就和我們用手機或者電腦一樣,一段時間不操作的話屏幕就會熄滅,以節省電能。

■ 1、按鍵盤喚醒

開發板上的 KEY按鍵注冊為了回車鍵,因此按下開發板上的 KEY 按鍵即可喚醒屏幕。如果開發板上沒有按鍵的話可以外接 USB 鍵盤,然后按下 USB 鍵盤上的回車鍵喚醒屏幕。

■ 2、關閉 10 分鐘熄屏功能

Linux 源碼中找到 drivers/tty/vt/vt.c 這個文件,在此文件中找到 blankinterval 變量

static int vesa_blank_mode;
static int vesa_off_interval;
static int blankinterval = 10*60;   

blankinterval 變量控制著 LCD 關閉時間,默認是 10*60,也就是 10 分鐘 將 blankinterval的值改為 0 即可關閉 10 分鐘熄屏的功能,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17321.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ROS的noetic版本

設置 sources.list 執行下面命令&#xff0c;設置從清華源下載 ROS 軟件包。 sudo sh -c echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list設置密鑰 sudo apt-key adv --keyse…

鴻蒙知識點總結

1 Stage模型應用程序包結構 在開發態&#xff0c;一個應用包含一個或者多個Module&#xff0c;可以在DevEco Studio工程中創建一個或者多個Module。Module是HarmonyOS應用/服務的基本功能單元&#xff0c;包含了源代碼、資源文件、第三方庫及應用/服務配置文件&#xff0c;每一…

快速上手 HuggingFace

HuggingFace HuggingFace 是類似于 GitHub 的社區&#xff0c;它主要提供各種的模型的使用&#xff0c;和 github 不同的是&#xff0c;HuggingFace 同時提供了一套框架&#xff0c;進行模型推理&#xff0c;模型訓練、和模型庫文件的管理等等。本文將介紹&#xff0c;如何快速…

【MySQL精通之路】全文搜索(9)-全文解析器-MeCab

主博客&#xff1a; 【MySQL精通之路】全文搜索功能-CSDN博客 目錄 1.介紹 2.安裝MeCab Parser插件 3.創建使用MeCab分析器的FULLTEXT索引 4.MeCab Parser空間處理 5.MeCab分析程序停止字處理 6.MeCab Parser術語搜索 7.MeCab分析程序通配符搜索 8.MeCab語法分析器短語…

echarts學習篇

一、使用echarts 1.引入 Apache ECharts <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <!-- 引入剛剛下載的 ECharts 文件 --> <script src"echarts.js"></script> </head> </html> 2.…

深度神經網絡——什么是自動編碼器?

自動編碼器 自動編碼器&#xff08;Autoencoders&#xff09;是無監督學習領域中一種重要的神經網絡架構&#xff0c;它們主要用于數據壓縮和特征學習。 自動編碼器的定義&#xff1a; 自動編碼器是一種無監督機器學習算法&#xff0c;它通過反向傳播進行訓練&#xff0c;目標…

【夏之以寒-Kafka專欄 02】什么情況下會發生 QueueFullException?

作者名稱&#xff1a;夏之以寒 作者簡介&#xff1a;專注于Java和大數據領域&#xff0c;致力于探索技術的邊界&#xff0c;分享前沿的實踐和洞見 文章專欄&#xff1a;夏之以寒-kafka專欄 專欄介紹&#xff1a;本專欄旨在以淺顯易懂的方式介紹Kafka的基本概念、核心組件和使用…

2023山東ICPC省賽Problem B.建筑公司(拓撲排序)

2023 山東 I C P C 省賽 P r o b l e m B . 建筑公司 \Huge{2023山東ICPC省賽Problem B.建筑公司} 2023山東ICPC省賽ProblemB.建筑公司 文章目錄 題意思路標程 比賽鏈接&#xff1a;Dashboard - The 13th Shandong ICPC Provincial Collegiate Programming Contest - Codeforce…

OWASP top10--SQL注入(三、手工注入)

目錄 access數據庫 手工注入過程&#xff1a; 猜解數據庫表名 猜解數據庫表名里面的字段 猜解字段內容 SQL注入中的高級查詢 mssql數據庫 手工注入過程&#xff1a; sa權限 ?編輯dbowner權限 public權限 mysql數據庫 1、對服務器文件進行讀寫操作(前提條件) 需要知…

文刻創作ai工具官網免費工具

文刻創作ai工具官網免費工具 Docshttps://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 文刻是一種可以幫助用戶進行創作的AI工具。 它使用自然語言處理和機器學習技術&#xff0c;可以生成文章、故事、詩歌等文本內容。 用戶可以通過輸入一些關鍵詞或指定一定的…

浙江大學數據結構MOOC-課后習題-第七講-圖4 哈利·波特的考試

題目匯總 浙江大學數據結構MOOC-課后習題-拼題A-代碼分享-2024 題目描述 代碼展示 照著教程視頻來的&#xff0c;沒啥好說的捏 #include <cstdlib> #include <iostream>#define MAXSIZE 100 #define IFINITY 65535 typedef int vertex; typedef int weightType;/…

為什么大部分新手做抖音小店賺不到錢?

大家好&#xff0c;我是噴火龍。 今天來給大家聊聊&#xff0c;為什么大部分新手做抖店賺不到錢&#xff1f; 不知道大家想過這個問題沒有&#xff0c;可能有些人把賺不到錢的原因歸結于市場、或者平臺、又或者運營技術以及做店經驗。 但我覺得這些都不是重點&#xff0c;重…

FFmpeg 使用文檔介紹二:命令行選項

關于FFmpeg的細節描述可以參考:FFmpeg 使用文檔介紹一:細節描述和流選擇 命令行選項 所有數值選項,除非另有說明,都接受一個表示數字的字符串作為輸入,該字符串后面可以跟一個國際單位制(SI)的單位前綴,例如:‘K’(千)、‘M’(兆)或’G’(吉)。 如果將i附加到S…

爬蟲實戰教程:深入解析配樂網站爬取1000首MP3

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、實戰前準備 1. 選擇目標網站 2. 分析網頁結構 三、爬蟲工作流程詳解 1. 發…

高質量軟件開發的全面指南(MIT-6.031)

首先&#xff0c;通過靜態檢查&#xff08;Static Checking&#xff09;和動態檢查&#xff08;Dynamic Checking&#xff09;了解類型和變量的使用規則&#xff0c;學習如何編寫文檔和注釋來記錄假設和方法&#xff08;Assumptions and Methods&#xff09;。詳細內容請見&…

Curator Framework如何寫單元測試

概述 使用curator framework框架去操作zookeeper時&#xff0c;我們知道因其的方法風格是那種流式的編寫風格&#xff0c;所以我們在寫單元測試的時候要把鏈接zookeeper的操作給mock掉&#xff0c;那么著實是不太好寫單測。不過好在curator framework有一個專門用于測試的模塊…

誠心分享!主食凍干橫向對比:希喂、愛立方、K9等誰最值得入手?

主食凍干到底有必要喂嗎&#xff1f;七年鏟齡鏟屎官告訴你&#xff0c;是真的很有必要喂&#xff01; 這些年隨著寵物經濟的發展、科學養寵的普及&#xff0c;現在養貓不僅局限在讓貓吃飽就行&#xff0c;更多人開始關注到貓的飲食健康。大量的實際喂養案例證明了&#xff0c;傳…

第2章 物理層

王道學習 考綱內容 &#xff08;一&#xff09;通信基礎 信道、信號、帶寬、碼元、波特、速率、信源與信宿等基本概念&#xff1b; 奈奎斯特定理與香農定理&#xff1b;編碼與調制&#xff1b; 電路交換、報文交換與分組交換&#xff1b;數…

接口響應斷言-json

json認識JSONPath源碼類學習/json串的解析拓展學習 目的&#xff1a;數據返回值校驗測試 json認識 json是什么-是一種數據交換格式&#xff0c;舉例平時看到的json圖2&#xff0c;在使用中查看不方便&#xff0c;會有格式轉化的平臺&#xff0c;json格式的展示 JSON在線視圖…

推薦二輪電動車儀表盤藍牙主芯片方案-HS6621CGC

隨著國內二輪電動車的火熱開啟&#xff0c;電動車的智能化程度越來越高&#xff1b;電動車的智能操控需求也越來越高&#xff0c;現在介紹藍牙控制面板的一些功能&#xff1b;例如&#xff1a;定位&#xff08;GNSS&#xff09;&#xff0c;設防&#xff0c;實時上報數據&#…