原创 NAND flash驅動程序(2)

前言        上一篇文章(NAND flash驅動程序(1))我們已經分析過了書寫一個nand flash的大致框架是什麼樣的,現在我們再次回憶一下大致的流程: (1)分配一個nand_chip和mtd_info結構體 (2)根據自

原创 【ARM64】DTB地址從uboot傳遞到kernel的流程

前言        最近在移植一款藍牙芯片的過程中用到了設備樹,一開始在研究kernel是怎麼解析DTB的,後來就很好奇kernel是怎麼找到DTB的,所以就有了這篇文章,純粹記錄一下自己的學習過程吧。 正文        下面我就從兩個

原创 NAND flash驅動程序(1)

前言        前面我們已經寫過一個塊設備驅動程序,用內存來模擬塊設備。假如我們想寫一個NAND FLASH驅動程序,又應該怎麼做呢?我們先看一下kernel代碼中別人現成的驅動程序,分析一下流程框架,總結出一個套路,我們就能開始寫自

原创 塊設備驅動初識

前言         以前我們寫的字符設備驅動程序,爲上層應用層提供了讀、寫等的接口,只要應用層調用了read或者write函數,就會調用到我們字符設備驅動程序的drv_read和drv_write函數(驅動的讀寫函數自己命名,這裏只是參

原创 Linux的LCD驅動

前言         Linux的源碼中本身已經抽象出了LCD驅動的公共部分代碼——drivers/video/fbmem.c,對於驅動開發人員來講,只需要理解這部分的代碼並會調用其提供的接口即可。驅動開發人員需要做的就是針對具體的SOC

原创 觸摸屏驅動

前言        之前有篇文章簡單介紹過觸摸屏的工作原理,可以參考一下:電阻觸摸屏原理簡述。測出某個點的電壓值後,我們就可以通過啓動ADC模塊,將電壓轉換爲X,Y座標了。        現在我們想寫一個基於Linux系統的觸摸屏驅動程序

原创 USB驅動初體驗

前言 前一篇文章(USB驅動的概念介紹),我們對USB驅動有了一個大概的認識。現在就來編寫程序加深一下印象。 正文        下面我們將要編寫一個簡單的USB驅動程序,接收USB鼠標的數據後,模擬鍵盤的輸入。比如,左擊鼠標爲鍵盤輸入"

原创 USB驅動的概念介紹

相關概念 1、USB是主從結構 所有的USB傳輸都是從USB主機發起,USB設備沒有能力“主動”通知USB主機。 例子:USB鼠標滑動一下立刻產生數據,但是它沒有能力通知PC機來取數據,只能被動等待PC機來讀。 2、USB的傳輸類型 (1

原创 設備、驅動、總線模型簡介

前言         在Linux系統中,有很多的框架提供驅動編寫者使用,比如前面我寫過的一篇文章:input子系統的架構分析及應用。都是將純軟件相關的代碼和操作硬件相關的代碼分離開,這樣就使得驅動的編寫者省去編寫大量的、重複的代碼,只要

原创 input子系統的架構分析及應用

input子系統的架構 以前我們寫的裸板程序中,驅動程序一般分爲以下幾步: (1)構造我們自己的file_operations (2) 註冊設備字符register_chrdev,將我們的file_operations告訴內核 (3)然後

原创 字符設備驅動之按鍵驅動(poll機制實現)

        一般來說上層調用poll(),到了內核層會調用sys_poll(),類似的還有open->sys_open、read->sys_read(),所以類比於open和read,驅動程序中也有一個poll調用。         

原创 字符設備中的同步、互斥和阻塞操作

下面的內容對學習過程中做一個簡單的總結,方便以後回憶,內容可能過於簡陋 1. 原子操作 如果我們希望字符驅動程序每次只能給一個應用程序打開,就需要加鎖,比如在驅動程序中加一個整型的全局變量canopen:     1代表可以open,0代

原创 字符設備驅動之按鍵驅動

前言        這次的按鍵驅動會分爲兩部分來介紹。第一,用不停輪詢的方式來監聽按鍵事件;第二,以中斷的方式來響應按鍵事件。可以對比看一下這兩種方式有什麼差別。   正文 輪詢方式 #include <linux/module.h>

原创 Linux異常中斷處理結構

內核在start_kernel()函數(init/main.c)中會調用trap_init()個函數來設置異常的處理函數。 1、trap_init()函數 /* * Copy the vectors, stubs and kuser

原创 一個簡單點亮LED燈的字符設備驅動

前言        後面可能會寫一系列的驅動學習的文章,現在就以一個最簡單的字符設備驅動開始。我的這個字符設備主要是爲了點亮開發板的LED燈。        對於字符設備的文章,網上很多而且也比較簡單,所以這篇文章只適合剛學的小白,大神請