簡體   English   中英

如何在嵌入式Linux的引導和模塊加載之間設置引腳?

[英]How to set a pin between boot and module load for an embedded Linux?

我面臨一個有趣的問題。 我喜歡設置我的CPU的引腳。 到目前為止,我創建了一個用於控制引腳的模塊。 該模塊設置默認引腳配置(高電平)。 加載模塊時,默認引腳配置變為活動狀態。 這工作正常。

現在我想在啟動過程開始時立即啟用默認引腳配置。 要歸檔我為ATMEL bootloader(at91bootstrap)和uboot(u-boot-at91)編寫了一個補丁。 這種方法可以正常運行,直到內核啟動。 在內核啟動時,引腳設置為ATMEL默認值。 它們的引腳在設備樹中定義為gpios。

我想我有兩種可能性:

1st - 在“右”點修補/init/main.c。 正確的位置在哪里?

第2步 - 修改設備樹以將GPIO設置為其他默認值。 如何“重新設置”gpio值?

在u-boot級別修改引腳時; 它將被內核覆蓋。 /init/main.c是個壞主意,所以我認為你不應該遵循這種方法

在內核級別,如果要設置GPIO引腳,有兩種可能性(除了模塊)

1)內核板文件。

2)設備樹文件。

假設您想將SDIO引腳設置為i.MX6板中的GPIO,則需要修改這樣的代碼。

leds {
   compatible = "gpio-leds";
   pinctrl-names = "default";
   pinctrl-0 = <&pinctrl_gpio_leds>;

red {
       gpios = <&gpio7 0 0>;
       default-state = "on";
};

MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0  //set the pin as GPIO

有關引腳的默認狀態,請參閱處理器的數據表。 一個引腳可能具有不同的功能。

如果您想使用相同的引腳來代替GPIO,那么您可以選擇以下配置。

MX6QDL_PAD_SD3_DAT5__UART2_RX_DATA  //UART2 RX Data pin
MX6QDL_PAD_SD3_DAT5__GPIO7_IO00  //As a GPIO pin
MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA // UART1 RX data
MX6QDL_PAD_SD3_DAT6__SD3_DATA6 //SDIO pin which is default in this case

如果您正在尋找更多內容(例如密碼和設備樹文件名),請添加更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM