odroid m1 can bus 사용

os/LINUX 2022. 4. 22. 19:50

0. 준비

  가. odroid m1

  나. ubuntu 20.04

  다. kernel : odroidm1-4.19.y

 

1. 기본설정 확인

  가. $ dmesg|grep -i can

    1) can과 관련된 커널 메시지가 있는지 확인

    2) 기본 설치에는 없음

  나. $ sudo vi /boot/config.ini

    1) can0와 i2c1이 같은 핀을 공유하므로 i2c1을 해제하고 can0를 설정

    2) overlays = "i2c0 i2c1" 을 overlays = "i2c0 can0"로 변경

    3) 재부팅

  다. $ dmesg|grep -i can

    1) CAN device driver interface 가 출력됨

    2) rockchip_canfd: module license 'unspecified' taints kernel.

    3) rockchip_canfd: Unknown symbol .......... (err -2)

    4) 에러 발생함

 

2. 에러 해결

  가. 커널 가져와서 커널 모듈 컴파일 시도

    1) $ git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidm1-4.19.y

      가) $ make menuconfig

        (1) 실행후 저장후 종료

      나) $ make modules

      다) $ find .|grep -i rockchip_canfd

        (1) 모듈 인스톨을 해도 되지만, 해당 모듈만 복사하려고 하였음

        (2) drivers/net/can/rockchip/ 에 커널 모듈 생성됨

      라) $ sudo find /|grep -i rockchip_canfd

        (1) /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip/

      마) $ sudo cp drivers/net/can/rockchip/*.ko /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip

        (1) 재부팅

  나. dmesg 확인

    1) $ dmesg|grep -i can

      가) rockchip_canfd: version magic '4.19.219 SMP mod_unload aarch64' should be '4.19.219-odroid-arm64 SMP mod_unload aarch64'

      나) 커널과 커널버전 모듈이 다름으로 인한 에러

        (1) 커널 버전은 동일하므로 뒤에 붙는 로컬버전 메시지가 다름으로 인한 에러

    2) 커널에서 버전 수정

      가) $ make menuconfig

        (1) General setup

        (2) Local version - append to kernel release

          (가) 선택하여 "-odroid-arm64" 입력

      나) $ make modules

        (1) missing MODULE_LICENSE() 경고 발생

  다. MODULE_LICENSE() 수정

    1) $ vi drivers/net/can/rockchip/rockchip_can.c

      가) 맨 마지막줄에 MODULE_LICENSE("GPL");

      나) 라이센스는 임시로 GPL로 부여

    2) $ vi drivers/net/can/rockchip/rockchip_canfd.c

      가) 맨 마지막줄에 MODULE_LICENSE("GPL");

      나) 라이센스는 임시로 GPL로 부여

    3) $ make modules

    4) $ sudo cp drivers/net/can/rockchip/*.ko /usr/lib/modules/4.19.219-odroid-arm64/kernel/drivers/net/can/rockchip

      가) 재부팅

    5) $ dmesg|grep -i can

      가) 에러없음

 

3. can loopback 시험

  가. 커널 모듈 확인

    1) $ lsmod|grep -i can

      가) rockchip_canfd가 정상로딩되어 있으면 ok

  나. 장치 인식 확인

    1) $ ip link show

    2) 상세확인

      가) $ ip -details link show

  다. 장치 설정

    0) 참고 : https://wiki.radxa.com/Rock3/dev/can

    1) $ sudo ip link set can0 down

    2) $ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 loopback on fd on

    3) $ sudo ip link set can0 up

    9) 정상

  라. 통신 확인

    1) $ sudo apt install can-utils

    2) $ sudo candump can0&

    3) $ sudo cansend can0 123#1122334455667788

 

4. can 시험

  가. 커널 모듈 확인

    1) $ lsmod|grep -i can

      가) rockchip_canfd가 정상로딩되어 있으면 ok

  나. 장치 인식 확인

    1) $ ip link show

    2) 상세확인

      가) $ ip -details link show

  다. 장치 설정

    0) 참고 : https://wiki.radxa.com/Rock3/dev/can

    1) $ sudo ip link set can0 down

    2) $ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 fd on

    3) $ sudo ip link set can0 up

    9) 정상

  라. 통신 확인

    1) $ sudo apt install can-utils

    2) $ sudo candump can0&

    3) $ sudo cansend can0 123#1122334455667788

AND