앞서 라즈베리파이를 이용하야 이더캣(EtherCAT) 마스터를 구성할 경우 Realtime 커널 패치를 하는 방법이 있고, 그 외의 방법으로 외부 EtherNet을 사용하는 방법이 있다는 정보를 찾아서 실시간 커널을 지원받지 못하는 시스템에서 해당 장치를 사용할 수 있도록 미리 문서화 해둔 내용이 있어 공개한다. 

     

      SPI Ethernet W5500은 디바이스 마트에서 1만원 정도에 구매가 가능하다. 필자는 라즈베리파이에 연결하였기 때문에 라즈베리파이에서는 2개의 이더넷이 잡힌다. 필요하면 하나더 달던지.. 그러면 3개가....

     

    1. SPI Ethernet 적용

    1.1. 디바이스의 연결

      라즈베리파이의 핀과 구매한 Modue I/O의 핀매핑은 아래의 표를 참조.  

     

    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

     

    아래의 커널 설정 화면에서 슬래쉬를 눌러 항목검색 표시

     

    wiznet 입력후 엔터

     

    Wiznet 항목 찾은후 다음과 같이 설정

     

    변경된 커널 설정 저장

     

    (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 모듈 적용... 끝.

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기