imx8 GPIO 裝置驅動介紹

2021-09-26 00:15:54 字數 2083 閱讀 2913

目的:通過 gpio 驅動配置實現控制 imx8 晶元引腳電平變化

硬體平台:imx8qmmek evm board

軟體環境:imx-p9.0.0_2.1.0-auto-ga

我這裡使用的是通過 dts 檔案來進行裝置硬體資源的申請及分配,使用者可以在 fsl-imx8qm-mek.dtsi 檔案下操作 dts,定義 myled 裝置節點如下:

myled ;
使用的引腳編號為 gpio4_22,引腳功能定義 pinctrl_gpio_keys 如下:

pinctrl_gpio_keys: myled;
以上便完成 dts 配置,接下來需要編寫驅動** myled.c ,首先建立好驅動**框架,

構建 platform_driver 結構體及定義 compatible

static const struct of_device_id myled_ids = ,

,};

static struct platform_driver myled_driver=

};

註冊平台驅動

static int __init myled_init(void)

登出平台驅動

static void __exit myled_exit(void)

定義 probe 函式

static  int myled_probe(struct platform_device *pdev)

gpio_direction_output(user_led, 1);

gpio_set_value(user_led, 1);

major = register_chrdev(0,"myled",&myled_drv_fops);

//建立裝置資訊,執行後會出現 /sys/class/myled

myled_class = class_create(this_module, "myled");

//建立裝置節點,就是根據上面的裝置資訊來的

myled_class_devs = device_create(myled_class, null, mkdev(major, 0), null, "myled"); /* /dev/myled */

return 0;

}

定義 ioctl 函式

static long myled_drv_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

else

default:

return -einval;

} return 0;

}

設定引腳編號

#define user_led      374		/*gpio led  gpio4_22*/
以上便完成 gpio 驅動**,通過應用程式便可以呼叫 ioctl 函式控制引腳電平變換

注意:

imx8 gpio 引腳編號設定與其他晶元會有所不同,總共有八組 gpio,gpio0~gpio6,

它們所對應的編號分別為:

gpio0

480 - 511

gpio1

448 - 479

gpio2

416 - 447

gpio3

384 - 415

gpio4

352 - 383

gpio5

320 - 351

gpio6

288 - 319

對應驅動程式 myled.c、應用程式 myled_test.c、dst 檔案 fsl-imx8qm-mek.dtsi 已上傳,連線如下:

Linux裝置驅動之《玩轉GPIO》

在linux裝置驅動之 點亮一盞led 中,編寫了ioctl c.h這樣的標頭檔案,在本文中將繼續使用這一頭檔案,如下 然後則是驅動模組程式,如下所示 這裡只說明與前面模組程式的區別,首先是ioctl test函式 static int ioctl test struct inode inode,s...

linux 驅動 GPIO 基礎全面介紹

一 前言 作為乙個工作多年的系統工程師,免不了做兩件事情 培訓新員工和給新員工分配任務。對於那些剛剛從學校出來的學生,一般在開始的時候總是分配一些非常簡單的任務,例如gpio driver led driver。往往cpu datasheet的關於gpio或者io ports的章節都是比較簡單的,非...

裝置驅動基本格式介紹

struct file operations struct module owner 模組所有者指標,一般初始化為this modules loff t llseek struct file loff t,int 用來修改檔案當前的讀寫位置,返回新的位置loff t 為乙個 長偏移 ssize t ...