[Raspberry] SPI Ethernet - W5500 적용하기..
[Raspberry] SPI Ethernet - W5500 적용하기..
0
Project description
[Raspberry] SPI Ethernet - W5500 적용하기..
? 앞서 라즈베리파이를 이용하야 이더캣(EtherCAT) 마스터를 구성할 경우 Realtime 커널 패치를 하는 방법이 있고, 그 외의 방법으로 외부 EtherNet을 사용하는 방법이 있다는 정보를 찾아서 실시간 커널을 지원받지 못하는 시스템에서 해당 장치를 사용할 수 있도록 미리 문서화 해둔 내용이 있어 공개한다.
? SPI Ethernet W5500은 디바이스 마트에서 1만원 정도에 구매가 가능하다. 필자는 라즈베리파이에 연결하였기 때문에 라즈베리파이에서는 2개의 이더넷이 잡힌다. 필요하면 하나더 달던지.. 그러면 3개가....
1. SPI Ethernet 적용
1.1. 디바이스의 연결
? 라즈베리파이의 핀과 구매한 Modue I/O의 핀매핑은 아래의 표를 참조.
![[Raspberry] SPI Ethernet - W5500 적용하기..](https://k.kakaocdn.net/dn/vJhmC/btq5aqtr7CK/iOFVo0H80RVz1Cet1idlYK/img.png)
1.2. 테스트 대상
? 테스트 대상 버전은 라즈베리파이 3B+를 이용하였다. 4는 하다 해먹음 안되니까. 그리고 컴파일은 호스트에서 크로스컴파일을 이용하여 관련 파일들을 생성한다.
(1) 라즈베리파이 개발환경 설치
- 커널빌드를 위한 기본 패키지 설치
| $ sudo apt-get install git bc $ sudo apt-get install libncurses5-dev libncursesw5-dev |
- 툴체인 설치
| $ git clone?https://github.com/raspberrypi/tools?~/works/raspberry/tools |
- 컴파일러 환경 설정
? 당분간 계속 쓰려면 사용자 홈디렉터리의 .basrc에 추가해두면 터미널을 열때마다 자동 적용된다.
| $ echo PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin |
? 아래는 에디터 없이 .basrc에 추가하는 방법이다.
| $ echo PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc $ source ~/.bashrc |
(2) 커널 컴파일
- 커널 소스 다운로드
??본 문서 작성시점의 최신 커널은?4.19.y이다.?사용하고 있는 라즈베리의 커널 버전이 낮은 경우,?해당 버전을 확인하고 같은 버전의 커널 소스를 받아서 작업하는게 유익
| $ cd ~/works/raspberry/ $ git clone --depth=1 --branch rpi-4.9.y?https://github.com/raspberrypi/linuxhttps://github.com/raspberrypi/linux |
- 최신버전에서 해보려면 아래처럼
| $ cd ~/works/raspberry/ $ git clone --depth=1?https://github.com/raspberrypi/linux |
- 컴파일 환경 변수 설정
| $ cd ~/works/raspberry $ mkdir build $ export ARCH=arm $ export CROSS_COMPILE=~/works/raspberry/tools/arm-bcm2708/gcc-linaro-arm-linux-gnue abihf-raspbian-x64/bin/arm-linux-gnueabihf- $ export INSTALL_MOD_PATH=~/works/raspberry/build $ export INSTALL_DTBS_PATH=~/works/raspberry/build |
- 커널 디폴트 설정 적용
라즈베리파이 3b 및 3b+
| $ export KERNEL=kernel7 $ cd ~/works/raspberry/linux/ $ make bcm2709_defconfig |
라즈베리파이 4B
| $ export KERNEL=kernel7l $ cd ~/works/raspberry/linux $ make bcm2711_defconfig |
- 커널 옵션 변경
| $ make menuconfig |
아래의 커널 설정 화면에서 슬래쉬를 눌러 항목검색 표시
![[Raspberry] SPI Ethernet - W5500 적용하기..](https://k.kakaocdn.net/dn/ce9Wed/btq454ydctm/PZ3hAdIkLbE2ckmmK8gQyk/img.png)
wiznet 입력후 엔터
![[Raspberry] SPI Ethernet - W5500 적용하기..](https://k.kakaocdn.net/dn/cCqG6F/btq4146iUFX/6dmuz78vZb95We1W9YKDf0/img.png)
Wiznet 항목 찾은후 다음과 같이 설정
![[Raspberry] SPI Ethernet - W5500 적용하기..](https://k.kakaocdn.net/dn/rB0YY/btq5befgBV6/fKOKOuRkvGOAUrOaQRphfK/img.png)
변경된 커널 설정 저장
![[Raspberry] SPI Ethernet - W5500 적용하기..](https://k.kakaocdn.net/dn/bOi5Lz/btq5c53br53/USpFDzDlFYw2VWkZtRxTuK/img.png)
(4) 커널 컴파일
- 커널컴파일
? 컴파일러 환경 변수를 등록하지 않은 경우 (필자는 이 방식으로 주로 빌드함)
| $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4 |
- 앞서 ARCH와 COMPILER를 export로 환경변수 등록한 경우
| linux$ mkdir $INSTALL_MOD_PATH/boot linux$ ./scripts/mkknlimg ./arch/arm/boot/zImage $INSTALL_MOD_PATH/boot/$KERNEL.img linux$ cd $INSTALL_MOD_PATH/boot boot$ mv $KERNEL.img kernel7.img |
- 커널 전송
? 라즈베리파이에 빌드된 커널 전송
| linux$ cd $INSTALL_MOD_PATH module $ tar czf ../kernel.tgz * module $ cd .. linux$ scp kernel.tgz pi@<ipaddress>:/tmp |
### 여기서 부터 라즈베리파이에서 실행
- 변경된 커널 설치
| ~$ cd /tmp /tmp$ tar xzf kernel.tgz /tmp$ cd boot /tmp/boot$ sudo cp -rd * /boot/ /tmp/boot$ cd ../lib /tmp/lib$ sudo cp -dr * /lib/ /tmp/lib$ cd ../overlays /tmp/overlays$ sudo cp -d * /boot/overlays /tmp/overlays$ cd .. /tmp$ sudo cp -d bcm* /boot/ |
- 부트설정
? 에디터를 이용하여 커널이미지를 선택한다.
| $nano /boot/config.txt |
? 추가할 내용은 아래와 같다.
| # Add the following option: kernel=kernel7_w5500.img |
- 리부팅 및 확인
| $ uname -r 4.19.59-rt23-v7l+ |
- 디바이스 트리 변경
? 빌드하느라 고생하셨다.. 사실은 본 가이드 작성시점 이후의 커널에서는 디폴트로 포함이 되어있는거 같다 따라서 오버레이 DTB만 생성 해주면 바로 사용할 수 있다. 그냥 좋은 공부한 샘 치고 넘어가자. 혹시 안되면 해볼 수 도 있는것 아닌가....;;;;
| $ vi w5500-overlay.dts /dts-v1/; /plugin/; / { compatible = "brcm,bcm2835"; fragment@0?{ target = <&spi0>; __overlay__ { #address-cells = <1>; #size-cells = <0>; status = "okay"; spidev@0?{ status = "disabled"; }; spidev@1?{ status = "disabled"; }; }; }; fragment@1?{ target = <&spi0>; __overlay__ { #address-cells = <1>; #size-cells = <0>; status = "okay"; w5500@1?{ compatible = "wiznet,w5500"; reg = <0>; spi-max-frequency = <10000000>; mac-address = [00?08?DC 01?02?03]; interrupts = <22?0x8>; interrupt-parent = <&gpio>; status = "okay"; }; }; }; }; |
dtb 파일 작성이 완료되었으면 컴파일뒤 /boot/overlay 폴더에 복사한다.
| # dts compile $ dtc -I dts -O dtb -o w5500-overlay.dtb w5500-overlay.dts # dtb?파일 복사 $ sudo cp w5500-overlay.dtb /boot/overlays/. # config.txt?내용 추가 $ sudo vi /boot/config.txt (내용 추가) dtoverlay=w5500 |
- 마지막으로 동작확인
? 라즈베리파이를 부팅해서 ifconfig 명령을 입력하면 eth0 말고 추가된 eth1이 표시되어야 한다.
많이 쓰지 않을것 같아 문서에 캡쳐를 그렇게 해두지 않았는데, 이럴때는 조금 아쉽다.
# 라즈베리파이 EtherCAT을 위한 W5500 모듈 적용... 끝.