在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...