內核從引導環境中獲取默認引腳複用。要在不使用用戶空間的情況下控制引腳行爲,可以修補引導環境。首先加載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的東西。
您需要對此進行研究。我認爲術語「pin mux」是您繼續研究所需要的。這發生在各種不同的層次上,例如:xload,uboot,然後在內核中。如果您需要定義電源施加到電路板上的時刻的行爲,則需要在xloader中定義muxing;在引導內核時,定義uboot中的muxing是必要的 - 假設Beaglebone使用xload和uboot(作爲原Beagleboard),但情況可能並非如此。 – mstrthealias
你正在尋找一個*庫* - 一個headee文件是不夠的。 – Clifford
我認爲3.8版本可能是最後一個發佈版本,它在移植到* devicetree *格式的硬件描述之前。 –