2013-07-17 37 views
0

我的工作在我beaglebone黑色(埃分佈)能SPI問題,使用說明書here.Beaglebone的Linux:追加一行文件

我的地步,我需要添加BB-SPI1-01到/sys/devices/bone_capemgr.*/slots來啓用驅動程序。

發出命令echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slotsecho BB-SPI1-01 >> /sys/devices/bone_capemgr.*/slots,但是,產生了錯誤echo: Write error: file exists

試圖與納米也失敗行編輯。我能夠打開文件,並進行修改,但是當我保存它給了我Error writing slots: no such file or directory

我已經對文件設置爲777

權限,任何人都不會知道爲什麼我不能編輯該文件?如果這是不可能的,是否有解決方法?

回答

0

也許這是因爲你想在與echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots同時接入多個文件?

嘗試選擇單一路徑slots文件,看看是否能工程

+0

實際上在路徑(8)中只有一個可能的替代方案用於通配符,所以多個路徑不是問題,但我試過了。沒有骰子。 –

1

對於那些誰是好奇,而我還沒有找到確切的答案,我確實發現一些更多的信息。除非HDMI接口已被關閉,這是我沒有做過

在beaglebone黑色的SPI1接口無法啓用。我現在使用SPI0接口。有趣的是,如果BB-SPI0-01用來代替BB-SPI1-01相同的命令工作。因此,在討論的錯誤可能是不從基部命令響應於所述命令來,而是系統(其不能分配因與HDMI請求衝突的資源)。

雖然我還沒有與HDMI測試SPI1關閉,我只能假設,我的錯誤會消失。

2

我,也有作戰用這種困境,而試圖端口ILI9340C顯示的東西Beaglebone黑色。 /dev/devices/bone_capemgr.*的工作方式是什麼,你呼應其slots目錄它去尋找與設備樹覆蓋了該設備,在Linux內核3.0和更高版本一個新生事物。對於任何人誰不知道(我花了永遠找到它)設備樹基本上是告訴Linux如何處理的設備的驅動程序,但不是包含任何代碼,它們只是一個配置文件,每本身,即告訴Linux爲了與設備對話而放置什麼,以及期待什麼。話雖這麼說,BB-SPIx-01是編譯設備樹的文件,在/lib/firmware/一個.dts它指向SPI設備,並告訴spidev如何處理它。

BB-SPI1-01恰好是已經連接到HDMI端口,用於一些音頻的東西(我認爲),因此,除非您禁用HDMI完全,SPI1總是由HDMI成幀器綁起來。這解釋了爲什麼寫BB-SPI1-01/sys/devices/bone_capemgr.*/slots失敗。這是一個特殊的文件,當你寫它,內核進程讀取輸入,並繼續嘗試做一個「裝置」文件萬無一失,因爲BB-SPI1-01已經啓用,該文件已經存在,所以內核進程處理這些事情返回一個錯誤,它通過什麼程序啓動,那麼,在這種情況下,你的用戶,鍵入echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots管道。

在光明的一面,SPI0閒置。因此,爲了使用它,你所要做的就是在用戶區啓用它。爲此,(你已經知道了這一點,但是對於其他人)在命令行鍵入echo BB-SPI0-01 > /sys/devices/bone_capemgr.*/slots,然後爲了確保spidev正在運行,請以root身份鍵入modprobe spidev。現在,要驗證,請鍵入ls /dev | grep spi並查看會發生什麼。 /dev/spidevX.Y是你的SPI總線,對我來說這將是/dev/spidev1.0

對不起,這真的很長時間了,但我最終將我的研究集中到了一個地方,希望它能幫助某人。

如果您有任何問題,請隨時詢問!

+1

FYI dmsg有關於此事的一些錯誤消息,例如在我的情況下,它是: [1213.370642] bone-capemgr bone_capemgr.8:slot#8:beagleback-01衝突P8.45(#5:BB-BONELT-HDMI ) [1213.380306] bone-capemgr bone_capemgr.8:slot#8:驗證失敗 並導致「寫入錯誤:文件存在」 – Mixaz

0

基於PyroAVR的回答,這裏是具體的解決方案。你需要禁用HDMI,這是很容易通過編輯以下文件來完成:/boot/uEnv.txt

您可以取消這將導致HDMI通過以root身份運行以下命令禁用行:

sed -i.bck '/cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN$/ s/^#//' /boot/uEnv.txt 
0

as Mixaz在評論中提到,real錯誤發現在dmesg輸出; 「沒有這樣的文件或目錄」是一個紅色的鯡魚,即使是strace也沒有給出任何關於真正問題的線索。在我的情況,我發現:

[26858.517893] bone_capemgr bone_capemgr: slot #5: override 
[26858.517937] bone_capemgr bone_capemgr: Using override eeprom data at slot 5 
[26858.517986] bone_capemgr bone_capemgr: slot #5: 'Override Board Name,00A0,Override Manuf,jc_gpio_test' 
[26924.230357] bone_capemgr bone_capemgr: part_number 'jc_gpio_test', version 'N/A' 

從我猜它不喜歡「0000」作爲版本號,改爲「00A0」和重新編譯,然後它的工作。

這裏是我寫的Makefile,以幫助自動化過程,以防萬一。

%.install: %-00A0.dtbo 
    cp -f $< /lib/firmware 
    echo $* > /sys/devices/platform/bone_capemgr/slots 
%-00A0.dtbo: %.dts 
    dtc -O dtb -o [email protected] -b 0 [email protected] $< 

使用它作爲:make jc_gpio_test.install,假設你的.dts文件名是jc_gpio_test.dts


事實證明,我的猜測可能是錯誤的。更可能修復它的更改將-00A0部分添加到dtbo文件。顯然插槽加載器需要「破折號版本號」。