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