1. 程式人生 > >linux裝置和驅動註冊

linux裝置和驅動註冊

一、設備註冊:

1、首先需要對核心檔案iTop4412_Kernel_3.0 中的arch/arm/mach-exynos/mach-itop4412.c 平臺檔案做修改,仿照leds的設備註冊來寫。該結構體定義在include/linux/platform_device.h 中,這裡還需要確認一下,是否有“HELLO_CTL”巨集定義,只有定義了這個巨集,在生成核心的時候才會將其編譯到核心。 在drivers/char/Kconfig 中可檢視是否定義

2、make menuconfig在Device Drivers --->”→“Character devices --->”→“Enable HELLO config

 

確認了巨集定義“HELLO_CTL”

3、開啟“arch/arm/mach-exynos/mach-itop4412.c”平臺檔案可查詢LEDS_CTL 仿照著已有的初始化程式碼寫即可

4、儲存退出,make zImage重新編譯核心,燒寫到開發板

5、開發板啟動之後,使用命令“ls /sys/devices/platform/”可以檢視到新註冊的裝置

二、驅動註冊:

1、核心原始碼中 vim include/linux/platform_device.h 可看到驅動註冊的相關函式,查詢一下“platform_driver_register” 可看到:

註冊驅動的函式:
extern int platform_driver_register(struct platform_driver *)
解除安裝驅動的函式:

extern void platform_driver_unregister(struct platform_driver *)

其中 platform_driver 型別的結構體 是非常重要的,該結構體在include/linux/platform_device.h 標頭檔案中,裡面的幾個操作函式和一個物件會在編寫的驅動C檔案中呼叫,相關函式可參照例程中仿寫。

2、在Makefile檔案中把第四行的 .o 檔案 修改為相應的驅動C檔案的名字 如驅動C檔案probe_linux_module.c,則改為probe_linux_module.o

相關推薦

linux裝置驅動註冊

一、設備註冊:1、首先需要對核心檔案iTop4412_Kernel_3.0 中的arch/arm/mach-exynos/mach-itop4412.c 平臺檔案做修改,仿照leds的設備註冊來寫。該結構體定義在include/linux/platform_device.h 

linux 下platform裝置驅動註冊的先後順序

我明白了,你說的是另一種情況,象USB 的hcd驅動一樣,先註冊驅動,後註冊裝置。 在註冊裝置時,遍歷裝置所在匯流排,找到與裝置匹配的驅動,再呼叫device_attach()--> driver_probe_device()時的情況。 這時,會呼叫裝置所在匯流排的probe()函式,如果沒有

linux裝置驅動載入的先後順序

Linux驅動先註冊匯流排,總線上可以先掛device,也可以先掛driver,那麼究竟怎麼控制先後的順序呢。 Linux系統使用兩種方式去載入系統中的模組:動態和靜態。 靜態載入:將所有模組的程式編譯到Linux核心中,由do_initcall函式載入 核心程序(/init/main.c)kernel_i

Linux裝置驅動的匹配過程

一、bus_type結構體及涉及的函式: (1)bus_type結構體 struct bus_type { const char *name; const char *dev_name; struct device *dev_root; struct

裝置驅動歸納總結(八):1.匯流排、裝置驅動 —— 匯流排的註冊

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 這幾天一直在看裝置模型,核心的程式碼看得我越來越沮喪,特別是kboject、kset和ktype之間的關係。但是,裝置

linux裝置驅動歸納總結(九):1.platform匯流排的裝置驅動

linux裝置驅動歸納總結(九):1.platform匯流排的裝置和驅動 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 這一節可

linux裝置模型之匯流排 裝置 驅動

《Linux核心修煉之道》讀書筆記 1、 裝置模型的上層建築由匯流排(bus) 、裝置(device)、 驅動(device_driver)這3個數據結構構成,裝置模型表示了它們之間的連線關係。

Linux 裝置匯流排驅動模型

    儘管LDD3中說對多數程式設計師掌握裝置驅動模型不是必要的,但對於嵌入式Linux的底層程式設計師而言,對裝置驅動模型的學習非常重要。     Linux裝置模型的目的:為核心建立一個統一的裝置模型,從而又一個對系統結構的一般性抽象描述。換句話說,Linux裝置模型

Linux裝置驅動學習筆記(概述)

由於在下能力相當有限,有不當之處,還望批評指正^_^一、概述在核心中,匯流排/裝置/驅動模型實現了對匯流排/裝置/驅動的管理。涉及的概念有struct bus_type(匯流排型別)。核心並不關心每種匯流排的實現細節,也未預先定義一共有哪些具體的匯流排型別。因此,開發者甚至可

linux裝置驅動開發學習--記憶體IO訪問

一 I/O 埠 1. 讀寫位元組埠(8 位寬) unsigned inb(unsigned port); void outb(unsigned char byte, unsigned port); 2. 讀寫字埠(16 位寬) unsigned inw(unsigne

linux spi主機控制器pl022驅動註冊以及匹配裝置過程

最近看海思的spi比較多,海思3519的spi ip使用的時ARM提供的pl022,這裡對pl022驅動註冊和匹配裝置樹中的裝置這個過程捋一下。 pl022是ARM提供的片內外設,很多廠商都用了這個ip,只在一些細小的區別。所以它的驅動也是非常通用的。pl022的手冊可以看這裡點選開啟連結

Linux字元裝置驅動註冊三種方法以及核心分析

       Linux驅動是使用者訪問底層硬體的橋樑,驅動有可以簡單分成三類:字元裝置、塊裝置、網路裝置。其中最多的是字元裝置,其中字元裝置的註冊方法主要有三種:雜項設備註冊、早期字元設備註冊、標準字元設備註冊。以及詳細介紹各類方法註冊。 開發環境: PC:WMwork

LInux裝置驅動分析—— kmallockzalloc函式

       今晚在研究EVM5728開發板上面Linux系統的IIC裝置驅動程式,偶然之間看到驅動程式中有一處使用了kzalloc函式,本人之前都是使用Linux核心提供的kmalloc / kfree函式來給裝置相關結構體分配 / 釋放記憶體的,第一次看到kzall

深入淺出:Linux裝置驅動中的阻塞非阻塞I/O

今天寫的是Linux裝置驅動中的阻塞和非阻塞I/0,何謂阻塞與非阻塞I/O?簡單來說就是對I/O操作的兩種不同的方式,驅動程式可以靈活的支援使用者空間對裝置的這兩種訪問方式。 一、基本概念: 阻塞操作 : 是指在執行裝置操作時,若不能獲得資源,則掛起程序直到

註冊字元裝置 >>Linux裝置驅動程式

文章目錄 [0x100] 字元裝置相關規則 [0x110]裝置檔案特徵 [0x120]裝置編號特徵 [0x200]操作函式介面核心實現 [0x210]轉換裝置編號 [0x220]分配裝置編號 [0x2

linux裝置驅動模型裡兩個重要的資料結構:classclass_device

/************************基於linux-2.6.24.7版本核心********************************/ 1、class      一個類是一個裝置的高層檢視,它抽象掉了底層的實現細節

linux檢視裝置資訊驅動安裝資訊

lspci是列出所有的硬體資訊,包括已經安裝了驅動還是沒有安裝驅動的硬體裝置,因為根據pci規範,只要改裝置在pci總線上掛著,就可以讀到起Vendor ID和Device ID等一些列資訊,就能知道這個裝置是什麼裝置。如果要確認有沒有安裝驅動,就需要通過lsmod命令來看,

linux註冊字元裝置解除安裝字元裝置函式

註冊一個字元裝置的方法是使用: int register_chrdev(unsigned int major, const char *name, struct file_operations *fops); 這裡, major 是感興趣的主編號, name 是驅動的名

Linux裝置驅動模型框架分析(三)——LDDM的實體bus_type、devicedevice_driver

在Linux裝置模型中,Bus(匯流排)是一類特殊的裝置,它是連線處理器和其它裝置之間的通道(channel)。為了方便裝置模型的實現,核心規定,系統中的每個裝置都要連線在一個Bus上,這個Bus可以是一個內部Bus、虛擬Bus或者Platform Bus。 device

linux裝置驅動中的阻塞非阻塞IO

一、等待佇列 1、定義等待佇列頭 wait_queue_head_t my_queue; 2、初始化等待佇列頭 init_waitqueue_head(&my_queue); 3、定義等待佇列 DECLARE_WAITQUEUE(name,tsk); 4、新增/移除