原创 iTop4412之I2C裸機操作

在進行I2C任何操作之前的前提工作: 1.寫操作的I2C從機的地址在I2CADD寄存器 2.設置I2CCON寄存器,包括使能中斷,確定時鐘週期 3.設置I2CSTAT去使能串口輸出 參照exynos4412的datashe

原创 LINUX設備驅動之SPI總線驅動分析

1.內核SPI主要結構 2.SPI驅動框架 2.1枚舉過程 driver/spi/spi.c 2.2數據收發過程 spi_write spi_message_init(); 初始化一個spi_message/一個不可打

原创 linux設備驅動之VFS虛擬文件系統

1.VFS虛擬文件系統 Linux 允許衆多不同的文件系統共存,並支持跨文件系統的文件操作,這是因爲有虛擬文件系統的存在。虛擬文件系統,即VFS(Virtual File System)是 Linux 內核中的一個軟件抽象層。

原创 Linux驅動之I2C總線驅動開發

一、IIC 基礎概念 1.I2C 基礎概念 IIC(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發的兩線式串行總線 ###1.IC總線的特點 IIC總線最主要的優點是其簡單性和有效性。

原创 LINUX USB驅動(4)-鼠標驅動實例

1怎麼寫USB設備驅動程序? 1.1分配/設置USB_driver結構體 .id_table .probe .disconnect 1.2.註冊 2.實例代碼 * 參考:\itop4412_kernel_3.0\drive

原创 SPI設備驅動學習BUG問題記錄

在17.2.20日的問題進行長達一天多的反覆調試,終於在22日得到了解決。 以及oled的驅動的編寫,在進行驅動的調試過程中, spi_register_board_info註冊硬件信息遇到了無法創建設備。 spi_regist

原创 LINUX USB驅動分析(3)-USB驅動分析

前面學習了USB驅動的一些基礎概念與重要的數據結構,那麼究竟如何編寫一個USB 驅動程序呢?編寫與一個USB設備驅動程序的方法和其他總線驅動方式類似,驅動程序把驅動程序對象註冊到USB子系統中,稍後再使用製造商和設備標識來判斷是否

原创 Linux驅動之I2C設備驅動完全解析

上一節介紹了I2C的相關協議,本節主要講I2C的設備驅動的創建 在內核iTop4412_Kernel_3.0\Documentation\i2c\instantiating-devices這個文檔介紹了4種創建I2C設備的方法

原创 linux字符設備驅動之file_operations結構體知識詳解

struct file_operations在fs.h這個文件裏面被定義的 struct super_operations { struct inode *(*alloc_inode)(struct super_bloc

原创 Linux驅動之模塊傳參

一、module_param() 定義 通常在用戶態下編程,即應用程序,可以通過main()的來傳遞命令行參數,而編寫一個內核模塊,則通過module_param() 來傳參。 module_param()宏是

原创 LINUX USB驅動開發(2)-USB驅動體系分析

一.日常USB現象: 1.將USB設備接入電腦上,右下角彈出“發現android phone” 2.跳出對話框。提示你安裝驅動程序 問題1:既然沒有安裝驅動,爲何能知道設備是“Android phone” 答1:windows裏

原创 大話數據結構之數據結構緒論

1.基本概念和術語 數據:數據描述客觀事物的符號,是計算機中可以操作的對象,是被計算機識別,並輸入給計算機的符號集合。 數據元素:是組成數據結構的、有一定意義的基本單位,在計算機中通常作爲整體處理。也被稱爲記錄。如人類的數據元素

原创 LINUX USB驅動開發(1)-USB驅動重要數據結構

USB設備爲主機提供了多種多樣的附加功能,如文件傳輸,聲音播放等,但對USB主機來說,它與所有USB設備的接口都是一致的。一個USB設備由3個功能模塊組成:USB總線接口、USB邏輯設備和功能單元: a – 這裏的USB總線接口

原创 linux驅動之自動創建設備節點

利用cat /proc/devices查看申請到的設備名,設備號。 創建設備節點 1.使用mknod手工創建:mknod filename type major minor 2.自動創建設備節點:利用udev(mdev)來實

原创 進程fork和vfork的區別

#include <stdio.h> #include <stdlib.h> #include <sys/type.h> int main() { int count = 1; int child = fork(); if(ch