目的:通過 gpio 驅動配置實現控制 imx8 晶元引腳電平變化我這裡使用的是通過 dts 檔案來進行裝置硬體資源的申請及分配,使用者可以在 fsl-imx8qm-mek.dtsi 檔案下操作 dts,定義 myled 裝置節點如下:硬體平台:imx8qmmek evm board
軟體環境:imx-p9.0.0_2.1.0-auto-ga
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 ...