原创 linux驅動---file_operations之poll

簡述: file_operations的poll是驅動提供給應用程序探測設備文件是否有數據可讀接口。 應用程序探測文件的接口: select,poll,epoll三個接口都是應用程序探測設備文件是否有數據可讀的接口,沒有數據進

原创 linux驅動之字符設備

本文以歸納總結性來概述linux字符設備 一、編寫字符設備驅動涉及的頭文件: #include <linux/types.h> #include <linux/kdev_t.h> #include <linux/cdev

原创 linux驅動---等待隊列、工作隊列、Tasklets

概述: 等待隊列、工作隊列、Tasklet都是linux驅動很重要的API,下面主要從用法上來講述如何使用API. 應用場景: 等待隊列(waitqueue) linux驅動中,阻塞一般就是用等待隊列來實現,將進程停止在此處並

原创 Linux驅動--併發和競爭

概述: 併發和競爭,對於驅動來說,就是對臨界區資源的保護。在面對多核CPU,很多進程同時運行,同時訪問公共設備和數據,要保證這麼多進程有序進行訪問。 以下,將主要從用法上歸納總結linux驅動對併發和競爭處理提供的接口。

原创 linux驅動---file_operations之llseek

簡述: file_operations中llseek是用於定位設備文件位置。 lseek,sys_lseek(在include/unistd.h,如果是在宿主機上,ubuntu所在路徑/usr/include/

原创 linux驅動-file_operations之ioctl

簡述: ioctl是linux應用程序用來向設備發送特殊命令。如果,設備要響應應用程序的ioctl調用,那麼設備驅動必須編寫響應ioctl的接口,這個接口就是file_operations的unlocked_ioctl。 應用程

原创 linux之early_param()和__setup

原理: 在linux啓動時,調用在init/main.c裏面的start_kernel()時,執行到parse_early_param()時,uboot傳遞的cmdline裏面有相應的命令,就會調用early_param()和__setu

原创 linux驅動---file_operations異步讀寫aio_read、aio_write

簡述: file_operations中read,write是同步讀寫,異步讀寫用接口是aio_read、aio_wirte(在4.5版本中發現已經把名字改成read_iter、write_iter)。 異步讀寫對應的系統調用A

原创 uboot啓動流程和架構

概述: 本文將從兩個方面來闡述uboot: 1、啓動流程 2、架構 一、uboot流程圖: 從上圖中看到紅色1,2,3,4,5,7,8,9的標號,下面分別說明每個過程: 1、啓動入口: (1)

原创 Linux之pinctrl subsystem

概述: 在各個平臺(cpu廠商)上,都會用很多pin用於和外設通訊,同一個pin也會有多種功能,如同一個pin具有gpio,spi,uart,I2C等功能,這些功能會根據需求切換,以及在不同功能下都會上下拉,驅動能力,電壓域的配置

原创 linux驅動-file_operations之mmap

簡述: linux內存空間分爲用戶空間和內核空間,應用程序是不能直接訪問內核空間的數據。 mmap就是建立內核空間映射到用戶空間虛擬地址上,之後,應用程序直接訪問映射後虛擬地址,實際是在訪問內核空間。 應用程序mmap的系統調

原创 Linux驅動之platform_bus、platform_device、platform_driver

概述: 在Linux驅動裏面platform bus,直譯過來就是平臺總線,實際上,是軟件裏面虛擬出來的總線,俗稱虛擬總線。虛擬總線有什麼作用呢?以及怎麼用linux虛擬總線子框架?這就是本文要闡述的兩個問題。 虛擬總線框架: pl

原创 UART

掌握uart協議重點是對下面幾點的理解: 1、uart是異步串行通信。 2、一般有4根線VDD,GND,TXD,RXD。 3、電氣特性有兩種 (1)RS-232電平標準,邏輯電平規定,3V到15V範圍表示0,-3V到-15V表示1 (

原创 Linux driver之input framework

摘要: input framework input_dev與handler匹配 input_dev註冊 handler之evdev 總結 input framework framework一般有兩個目的: 一方面向開發者提供統一的

原创 linux驅動-I/O

簡述: I/O是CPU和外部設備通信一種方式。linux將I/O分成兩種,一種是I/O端口,另一種是I/O內存。 I/O端口: I/O端口,是指對外部設備的訪問,不能通過尋址方式訪問,是一種特殊的,依賴CPU體系結構,操作I/O端口,是需