2015-01-11 2 views
6

나는 /sys/kernel/debug/pinctrl/44e10800.pinmux/pins에서 들여다 봐도 나는에 관심이 핀 볼 수 있습니다 GPIO[2]4, 또는 P8.10Linux 커널 3.17에서 BeagleBone Black 용 pinmux를 편집하려면 어떻게해야합니까?

pin 38 (44e10898.0) 00000037 pinctrl-single 

이 해당합니다.

커널이 3.17.7-300.fc21.armv7hl 인 Fedora 21을 사용하고 있습니다.

멀티플렉서를 0x27으로 변경하고 싶습니다. 말하자면, 이것은 내부 풀다운 저항을 갖기 위해 핀을 구성 할 것이다 (이전에는 풀업되었다).

원하는 출력은 다음과 같습니다 이

pin 38 (44e10898.0) 00000027 pinctrl-single 

이 무엇을

을 수행 할 수 있습니다 ?

참고 : 옹스트롬이 아니기 때문에 /sys/devices/bone_capemgr.*은 없습니다. 전형적인 DTO 접근법은 망토 관리자를 수정하여 변경 사항을 내 보냅니다. 이것은 선택 사항이 아닙니다.

편집 : tad의 조사에서 다음과 같이했습니다. dtc -I dtb -O dts -o ~/am335x-boneblack.dts /boot/dtb-3.17.7-300.fc21.armv7hl/am335x-boneblack.dtb. 내가 가진이 파일을 편집 :

... 
    [email protected] { 
     ... 

     example { 
      pinctrl-single,pins = <0x898 0x27>; 
     }; 
    }; 
... 

그리고, 나는, dtc로 다시 컴파일 /boot/dtb-3.17.7-300.fc21.armv7hl/에 붙어, 재부팅. 그러나 아무것도 바뀌지 않았습니다. 무슨 일이야?

편집 :

찰스 Steinkuehler로 표시의 0x800 오프셋에서 차감해야하고, "뭔가" "예"를 참조 할 필요가있다으로

.

내가 user_leds_s0 내 항목에 0x098 0x27를 추가하는 경우

가 원하는 동작을 관찰 :

... 
    user_leds_s0 { 
     pinctrl-single,pins = <0x54 0x7 0x58 0x17 0x5c 0x7 0x60 0x170 0x098 0x27>; 
     linux,phandle = <0x3f>; 
     phandle = <0x3f>; 
    }; 
... 

지금,이 모든 괜찮 내가 갈 필요가 어디 있는지를 가져옵니다. 그러나이 핀은 실제로 user_led가 아닙니다. 그것은 어떤 종류의 분리 된 분야에 있어야합니다. 그렇다면 "예제"필드 또는 유사하게 작동시키기 위해해야 ​​할 "무언가"는 무엇입니까?

+0

은 제거 . 일을 끝내기 위해서는 원본 .dts 파일을 조작해야합니다. 참고로, 이것은 루트 파일 시스템의 맛과 관련이 없습니다 (귀하의 경우 Angstrom). 이것은 전적으로 커널 버전에 달려 있습니다. – raghav3276

+0

실례합니다. Fedora에서 사용하는 dts 파일을 찾은 것으로 가정하면 좀 더 자세히 설명 할 수 있습니까? – ToBeReplaced

+0

"예제"핀 정의를 편집했거나 추가 했습니까? 이것을 추가하면 두 가지 문제점이 나타납니다. 우선, 어딘가에서 "예제"핀 구성을 참조해야합니다. 그렇지 않으면 아무 효과가 없습니다. 둘째, 귀하의 pinmux 레지스터 오프셋은 내가 기대했던 것에서 0x800 떨어져 있습니다 (예 : 0x898 pinmux 레지스터 오프셋은 장치 트리에서 0x098로 변합니다. AM335x pinmux 드라이버가 0x800을 추가하기 때문에). 편집 한 항목 인 경우 특정 커널에 대한 장치 트리 이름 지정 규칙에 익숙하지 않습니다. –

답변

3

나는 케이프 매니저 물건이 3.8 커널을 넘어서 이식되지 않았다고 믿는다. 있는지 여부를 계획하고 있지만, 그 대신에 평면 장치 트리를 편집 할 수 있습니다. 내가 찾은 (그리고 난 여전히 최선의 방법을 찾고 있어요) 가장 쉬운 방법은 SRC/팔 디렉토리에서

https://github.com/RobertCNelson/dtb-rebuilder

에서 저장소를 잡아 am335x-뼈 공통 pinmux을 편집하는 것입니다. dtsi 파일. 여기에서 "P8_10_default_pin :"을 검색 할 수 있습니다. 이 섹션에서는 0x37을 기본 설정으로 사용하도록 pinmux에 알립니다. 이것을 0x27로 변경하고 저장하십시오.

이제 make를 실행하여 새로운 컴파일 된 장치 트리 (.dtb) 파일을 빌드하십시오. 우분투에서 "make install"은 모든 파일을 올바른 위치에 놓습니다. 나는 그들이 어디로 가고 있는지에 대해서는 잘 모르겠다.하지만/boot /를 파헤치는 일은 흥미로울 것이다. 우분투에서 정확한 지점은

/boot/dtbs/`uname -r`/ 

입니다. 제 경우에는 3을 실행하고 있습니다.14.26-ti-r43. 재부팅 (그리고 핀을 수출) 한 후, 위의 변화는 수신기와 열린 상태 (값)에 풀다운 수 있습니다 확실 해요

[email protected]:~# grep 898 /sys/kernel/debug/pinctrl/44e10800.pinmux/pins 
pin 38 (44e10898.0) 00000027 pinctrl-single 

[email protected]:~# echo 36 > /sys/class/gpio/export 
[email protected]:~# cat /sys/class/gpio/gpio36/value 
0 

0으로 목표를 달성하기 위해 더 우아한 방법이 읽고 , 그러나 이것은 나를 위해 작동합니다.

+0

귀하가 제공하는 리포지토리 및 방법은 3.14에 한합니다. 반면에 이것은'/ boot/dtbs/$ (uname -r) /'에 .dtb 파일이 있기 때문에 유용합니다. 내 특정 커널에 대해 .dts (i) 파일을 수정해야하지만, 마지막 단계를 파악할 수없는 것 같습니다. https://github.com/torvalds/linux/blob/bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9/arch/ arm/boot/dts/am335x-bone-common.dtsi. 해당 파일 (또는 다른 뼈 파일 중 하나)에서 P8.10을 편집하는 방법에 대한 아이디어 12. – ToBeReplaced

+0

3.19에 대한 저장소에 분기가 있습니다. 당신도 저것을 볼 수 있습니다. 내 생각 엔 파일이 상당히 다르지 않다는 것, 특히 핀이 보이지 않는 경우에는 특히 까다 롭지 않은 다른 용도로는 보이지 않는 것입니다. 최소한 메이크 파일이 무엇을하는지 살펴보고 메인 라인 커널 소스 트리에서 복제 할 수 있습니다. 기회가 있다면 나는 페도라 이미지를 풀고 조금 뒤에서 찌를 것이다. – tad

+0

나는 현상금을 배정했으나 좀 더 완전한 답을 찾고있다. 나는'dtc'을 사용하여'am335x-boneblack.dts' 파일을 얻었고'pinmux @ 44e10800' 헤더 아래에'example {pinctrl-single, pins = <0x898 0x27>;} '과 같은 새로운 그룹을 추가했습니다. 고르지 않은 것 같아. – ToBeReplaced

1

Robert Nelson의 커널 (BeagleBoard의 커널)을 사용하는 경우 pinmux는 pinmux 레지스터의 런타임 설정을 다양한 미리 정의 된 값으로 설정할 수있는 pinmux-helper 드라이버의 제어하에 있어야합니다./sys/devices/ocp 파일을 찾으십시오. /P8_10_pinmux./주 이 존재하지 않으면하여 풀다운와 함께 입력 핀을 변경할 수 있습니다

# echo gpio_pd > /sys/devices/ocp.*/P8_10_pinmux.*/state 

... 또는 RCN의 데비안 중 하나를 실행하는 경우 것은 빌드 아니면 그냥 할 수있는 내 보편적 인 오버레이를 설치 한 :

$ config-pin P8.10 in- 

(3.8.13 커널에 대한) 오버레이 (유사 pinmux 헬퍼 장치 트리 항목이 어떤 커널) 설정 핀 유틸리티는 여기에서 찾을 수 있습니다 : https://github.com/cdsteinkuehler/beaglebone-universal-io 오버레이의 개념 AFAIK

+0

내 커널에서는 작동하지 않습니다. 원래 질문에서 언급했듯이, 커널은 Fedora가 제공 한'3.17.7-300.fc21.armv7hl'입니다. – ToBeReplaced