gpiolib管理gpio過程

2021-06-19 19:31:07 字數 2178 閱讀 1640

在linux2.6.38中提供了統一管理外部io的模組。本文的內容是跟蹤這些模組,是如何關聯起來的。

環境:龍芯1b開發板

一、重點關注的相關的結構體:

gpiolib.c檔案,被移植到driver/gpio/目錄下。

structgpio_desc ;

對於上面這個結構體,現在只關心structgpio_chip *chip;

structgpio_chip ;

二、把目光轉到龍芯自身的gpio檔案。

在1b的內容是放在arch/mips/loongson/sb2f-board/gpio.c

staticstruct gpio_chip ls2f_chip = ;

staticint __init ls2f_gpio_setup(void)

arch_initcall(ls2f_gpio_setup);

arch_initcall函式在核心啟動的時候被初始化。(詳細情況,以後再寫)

跟著呼叫了ls2f_gpio_setup -> gpiochip_add

增加了ls2f_chip。

注意ls2f_chip裡面的函式指標(我們姑且成為介面吧)已經在本檔案(gpio.c裡面實現。)

三、現在跳到

gpiochip_add

函式(在

driver/gpio/gpiolib.c

中)

intgpiochip_add(struct gpio_chip *chip)

……}

上述的**初始化了gpio_desc陣列。在gpiolib.c中定義:

staticstruct gpio_desc gpio_desc[arch_nr_gpios];

直到這裡,gpio_desc已經可以和龍芯下面的函式介面關聯起來!

四、在驅動中利用這些介面

如在驅動中呼叫函式:gpio_direction_output(57,0);

函式定義位gpiolib.c檔案中

intgpio_direction_output(unsigned gpio, int value)

第三點已經說明了是如何關聯起來的。於是相當於呼叫龍芯晶元下的函式:

staticint ls2f_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,int level)

else

return0;

} 直到這裡,gpio的呼叫過程已經完成了。

其餘的函式:

ls2f_gpio_direction_input,

ls2f_gpio_get_value,

ls2f_gpio_direction_output,

ls2f_gpio_set_value,

的函式類似。

五、debugfs

除錯gpio埠

可以利用mount-t debugfs none /mnt

那麼可以在/mnt下面看到gpio檔案

通過echo57 w1 > gpio

就可以對gpio的第57個關鍵寫入1

疑問:為什麼這樣可以除錯呢?

檢視檔案 

~/driver/gpio/gpiolib.c

staticconst struct file_operations gpiolib_operations = ;

staticint __init gpiolib_debugfs_init(void)

subsys_initcall(gpiolib_debugfs_init);

gpiolib_debugfs_init函式在核心啟動的時候被呼叫。

於是建立了乙個gpio檔案,同時關聯上了gpiolib_operations;

於是,echo57 w1 > gpio

相當於呼叫 

gpiolib_write函式;

staticssize_t gpiolib_write(struct file *file, const char __user *buf,size_t size, loff_t *ppos) }}

}if(info[3]== 'r')elseif(info[3] == 'w')

returnsize;

}

gpiolib管理gpio過程

在linux2.6.38中提供了統一管理外部io的模組。本文的內容是跟蹤這些模組,是如何關聯起來的。環境 龍芯1b開發板 一 重點關注的相關的結構體 gpiolib.c檔案,被移植到driver gpio 目錄下。structgpio desc 對於上面這個結構體,現在只關心structgpio c...

gpiolib管理gpio過程

一 重點關注的相關的結構體 gpiolib.c檔案,被移植到driver gpio 目錄下。structgpio desc 對於上面這個結構體,現在只關心structgpio chip chip structgpio chip 二 把目光轉到龍芯自身的 gpio 檔案。在 1b的內容是放在 arch...

GPIO配置和管理

bootloader階段 bootloader階段可以呼叫gpio tlmm config 函式完成gpio cfgn暫存器的配置,舉例如下 define tlmm vol up btn gpio 85 gpio tlmm config tlmm vol up btn gpio,0,gpio inp...