2014-07-13 25 views
1

我只想知道Linux 3.8中是否有頭文件來描述用於硬件板的GPIO端口,尤其是Beaglebone黑板。 Beaglebone黑板上有四組GPIO,每組有32個GPIO。所以我猜想GROUP X(0 <= X <= 3) PORT Y (0 <= Y <= 31)中的GPIO將映射到GPIO端口(32 * X + Y)。例如,GPIO12GROUP1中的值爲GPIO44,當我使用Linux GPIO API時,我們可以使用44。所以當我使用像「gpio_is_valid」這樣的API時,我可以將參數設置爲44.因爲我想爲某些設備編寫Linux驅動程序,所以我真的需要知道它是如何定義的。我不關心如何在用戶空間中控制GPIO我怎樣才能找到在Linux的GPIO的定義,尤其是beaglebone黑色?

非常感謝。

+0

您需要對此進行研究。我認爲術語「pin mux」是您繼續研究所需要的。這發生在各種不同的層次上,例如:xload,uboot,然後在內核中。如果您需要定義電源施加到電路板上的時刻的行爲,則需要在xloader中定義muxing;在引導內核時,定義uboot中的muxing是必要的 - 假設Beaglebone使用xload和uboot(作爲原Beagleboard),但情況可能並非如此。 – mstrthealias

+0

你正在尋找一個*庫* - 一個headee文件是不夠的。 – Clifford

+0

我認爲3.8版本可能是最後一個發佈版本,它在移植到* devicetree *格式的硬件描述之前。 –

回答

1

內核從引導環境中獲取默認引腳複用。要在不使用用戶空間的情況下控制引腳行爲,可以修補引導環境。首先加載X-Loader(MLO),加載加載內核的U-Boot環境(u-boot.bin)。

請記住,我的這個知識是從2011年開始的,所以在以後的版本中可能有更好的方法來完成這個工作......另外,我使用了Gumstix Overo(與BeagleBoard類似)。看起來BeagleBone Black使用與原BeagleBoard相同的引導環境,所以我會試着回答你的問題(我引用了BeagleBoard使用的文件,BeagleBoard Black可能有所不同)。

爲了控制當設備第一次接通電源的GPIO行爲,可以修補X-Loader來定義所需的複用管腳:

x-loader: 
board/omap3530beagle/omap3530beagle.c 
include/asm/arch-omap3/mux.h # review to match pin assignments to the technical manual 

X-裝載機(MLO)然後將加載U-Boot環境。爲了控制內核最初是如何處理的複用管腳,內核(IIRC)的加載過程中,你可以修補的u-boot定義所需的複用管腳:

u-boot: 
board/ti/beagle/beagle.h 
arch/arm/include/asm/arch-omap3/mux.h # review to match pin assignments to the technical manual 

一旦啓動,您可以切換或者讀取用戶空間中的GPIO :)。

此外,可以使用devmem2在Overo上的用戶空間中更改引腳複用,因此除非需要控制默認行爲(例如保持引腳電平低以保持器件關閉),否則將更容易使用類似devmem2的東西。

+0

非常感謝你告訴我這麼多。 – sunnyleevip

1

BeagleBone項目的網站有一個名爲BlackLib的庫,它爲C++提供了一個GPIO,ADC和PWM API。對於C也是this

+0

謝謝,我會試一試。 – sunnyleevip