Linux platform平台驅動設計

2021-10-25 08:52:42 字數 4022 閱讀 1438

platform機制開發底層裝置驅動程式流程

struct platform_device ;

struct resouce ;

struct platform_device的分配與使用

struct platform_device *platform_device_alloc(const char *name, int id)

name:裝置名

id:裝置id,一般為-1

對應的釋放記憶體

平台裝置註冊函式

int platform_device_add(struct platform_device *device)

對應的裝置登出

int platform_device_unregister(struct platform_device *device)

獲取資源

struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)

dev:資源所屬的裝置

type: 獲取的資源型別

num: 獲取的資源數

範例:platform_get_resource(pdev, ioresource_irq, 0)

struct platform_driver ;

平台驅動註冊函式

int platform_driver_register(struct platform_driver *driver)

平台驅動登出函式

int platform_driver_unregister(struct platform_driver *driver)

平台裝置**

platform_device.c

#include

#include

#include

#include

#include

#include

module_license

("gpl");

static

struct platform_device *my_device;

static

int __init my_device_init

(void

)static

void __exit my_device_exit

(void

)module_init

(my_device_init)

;module_exit

(my_device_exit)

;

平台驅動**

platform_driver.c

#include

#include

#include

#include

#include

#include

module_license

("gpl");

static

intmy_probe

(struct platform_device *dev)

static

intmy_remove

(struct platform_device *dev)

static

struct platform_driver my_driver =,}

;static

int __init my_driver_init

(void

)static

void __exit my_driver_exit

(void

)module_init

(my_driver_init)

;module_exit

(my_driver_exit)

;

platform平台驅動測試

1)先載入platform_device.ko,在載入platform_driver.ko,檢視情況

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo insmod platform_device.ko

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130122.306064] call my_device_init

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

ubuntu@vm-0-8-ubuntu:~/kernel_test$

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo insmod platform_driver.ko

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130143.966486] call my_driver_init

[130143.968562] driver found device which my driver can handle!

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

ubuntu@vm-0-8-ubuntu:~/kernel_test$

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo rmmod platform_device

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130296.869212] call my_device_exit

[130296.870963] driver found device unpluged!

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo rmmod platform_driver

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130308.120444] call my_driver_exit

2)先載入platform_driver.ko,在載入platform_device.ko,檢視情況

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo insmod platform_driver.ko

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130360.985739] call my_driver_init

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo insmod platform_device.ko

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130376.280267] call my_device_init

[130376.286666] driver found device which my driver can handle!

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo rmmod platform_device

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130402.888223] call my_device_exit

[130402.890482] driver found device unpluged!

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo rmmod platform_driver

ubuntu@vm-0-8-ubuntu:~/kernel_test$ sudo dmesg -c

[130409.556151] call my_driver_exit

ubuntu@vm-0-8-ubuntu:~/kernel_test$

結論:先載入裝置ko還是驅動ko對結果無影響

選對平台 選對平台 選對平台

做研發的時候經常聽到一句話 如果一切順利,就學不到啥東西了,所以除錯的過程可以促使你去學習 用以提公升士氣,勉勵新人不要畏懼疑難 這話不能說它是錯的,但是,要看你所在的整體環境 magic1.do not touch.by 冗戈微言 如果你的公司足夠大,沒有刀架脖子那種盈利壓力,專案量產與否對研發個...

開源PAAS開發平台 雲鶴平台

可用 體現在已經經過很多專案 公司實際實用的檢驗。實用 體現在專案開發過程中極大提高生產效率 降低開發成本。易用 以配置代替程式設計,門檻降低,實現業務人員可直接參與開發。靈活 通過工作流配置,靈活變動業務流 通過服務配置,靈活變動程式邏輯和程式流 通過頁面配置,靈活變動頁面外觀 通過業務物件配置,...

UART UVM驗證平台平台搭建總結

tb top是整個uvm驗證平台的最頂層 tb top中例化dut,提供時鐘和復位訊號,定義介面以及設定driver和monitor的virual inte ce,在intial中呼叫run test uvm入口函式。在基於uvm test擴充套件出base test,根據測試用例再基於base t...