필자가 이더켓을 라즈베리파이를 이용해서 이더켓 마스터와 클라이언트를 구현하기 위해서 자룔를 찾다가 보니 라즈베리파이에 W5500을 이용해서 구현한 마스터 샘플를 찾았는데 라즈베리에서 이용하려면 리얼타임 커널 패치를 하라고 되어있었다.
필자가 작성한 문서가 약 1년 쯤 전이었으니, 아마 커널은 조금 변경 되었지 싶긴한데 변경된 버전만 찾으면 되니까... 라즈베리파이에 리얼타임을 적용하는 방법을 안내하도록 하겠다.
1. Rasbian Buster Real-Time system using Preempt-RT
1.1. Getting the source
본 가이의 대부분 (커널 구성 및 컴파일)은 Raspberry Pi!가 아니라 Linux를 실행하는 호스트 컴퓨터 (x86 / x64)에서 수행됨, 라즈베리파이에서 실행할 부분은 별도 표시.
(1) 작업디렉터리 생성
~$ mkdir ~/rpi-kernel ~$ cd ~/rpi-kernel ~rpi-kernel$ mkdir rt-kernel |
(2) 커널 소스 및 툴체인 다운로드
커널 다운로드
~/rpi-kernel$ git clone https://github.com/raspberrypi/linux.git -b rpi-4.19.y-rt ~/rpi-kernel$ git clone https://github.com/raspberrypi/tools.git |
1.2. Environment Setting
(1) 크로스 컴파일 환경 설정
~/rpi-kernel$ export ARCH=arm ~/rpi-kernel$ export CROSS_COMPILE=~/works/ethercat/rpi-kernel/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- |
커널 모듈 설치 위치와 디바이스 트리 설치 위치 설정
~/rpi-kernel$ export INSTALL_MOD_PATH=~/works/ethercat/rpi-kernel/rt-kernel ~/rpi-kernel$ export INSTALL_DTBS_PATH=~/works/ethercat/rpi-kernel/rt-kernel |
(2) 커널빌드 설정
-RaspberryPi 2, 3B(+)
~/rpi-kernel$ export KERNEL=kernel7 ~/rpi-kernel$ cd ~/works/ethercat/rpi-kernel/linux/ ~/rpi-kernel/linux/$ make bcm2709_defconfig |
- RaspberryPi 4B
~/rpi-kernel$ export KERNEL=kernel7l ~/rpi-kernel$ cd ~/works/ethercat/rpi-kernel/linux/ ~/rpi-kernel/linux/$ make bcm2711_defconfig |
1.3. 커널 컴파일
(1) 커널 이미지 생성
~/works/ethercat/rpi-kernel/linux$ make -j4 zImage |
(2) 커널 모듈 빌드
~/works/ethercat/rpi-kernel/linux$ make -j4 modules |
(3) 디바이스 트리 빌드
~/works/ethercat/rpi-kernel/linux$ make -j4 dtbs |
(4) 빌드된 모듈 설치
~/works/ethercat/rpi-kernel/linux$ make -j4 modules_install |
(5) 디바이스 트리 설치
~/works/ethercat/rpi-kernel/linux$ make -j4 dtbs_install |
1.4. 커널 배포 이미지 생성
(1) 부트 디렉터리 생성
~/works/ethercat/rpi-kernel/linux$ mkdir $INSTALL_MOD_PATH/boot |
(2) 커널 이미지 생성
~/works/ethercat/rpi-kernel/linux$ ./scripts/mkknlimg ./arch/arm/boot/zImage $INSTALL_MOD_PATH/boot/$KERNEL.img |
(3) 커널 이미지 디렉터리로 이동 후 파일이름 변경
~/works/ethercat/rpi-kernel/linux$ cd $INSTALL_MOD_PATH/boot ~/works/ethercat/rpi-kernel/linux$ mv $KERNEL.img kernel7_rt.img |
1.5. 커널 전송
컴파일이 완료되면 모든 파일을 압축하여 라즈베리파이로 전송.
(1) 커널 이미지 압축
~/works/ethercat/rpi-kernel/linux$ cd $INSTALL_MOD_PATH ~/works/ethercat/rpi-kernel/rt-kernel$ tar czf ../rt-kernel.tgz * |
(2) 커널 이미지 전송
전송중 connection refused가 표시되면 라즈베리파이설정(raspi-config)에서 ssh를 enable로 설정후 다시 시도.
~/works/ethercat/rpi-kernel/rt-kernel$ cd .. ~/works/ethercat/rpi-kernel$ scp rt-kernel.tgz pi@<ipaddress>:/tmp Ex) ~/works/ethercat/rpi-kernel$ scp rt-kernel.tgz pi@192.168.0.64:/tmp |
파일 전송전 핑거프린터 Yes 입력 후 진행
~/works/ethercat/rpi-kernel$ scp rt-kernel.tgz pi@192.168.0.64:/tmp The authenticity of host '192.168.0.64 (192.168.0.64)' can't be established. ECDSA key fingerprint is SHA256:lgyiOSKj0MbVrRkr7Qffp0iB...(생략)... Are you sure you want to continue connecting (yes/no)? yes |
### 여기서부터 라즈베리파이에서 진행
1.6. 라즈베리파이에서 이미지 처리
(1) 전송된 압축파일 확인
호스트에서 scp로 전달된 파일 내용을 확인한다.
~$ cd /tmp /tmp$ ls … (생략) … rt-kernel.tgz ... (생략) … |
(2) 압축파일 해제
압축에 제대로 풀렸는지 확인 -C는 압축 풀 디렉터리를 지정하는 옵션임.
/tmp$ mkdir rt-kernel /tmp$ tar xzf rt-kernel.tgz -C ./rt-kernel /tmp$ cd rt-kernel |
(3) 부트관련 파일 복사
라즈베리에서 부트 관련된 파일이 있는 디렉터리(/boot)로 필요한 파일 복사.
/tmp/rt-kernel$ cd boot /tmp/rt-kernel/boot$ sudo cp -rd * /boot /tmp/rt-kernel/boot$ sync |
(4) 라이브러리 관련 파일 복사
시스템에서 사용할 라이브러리 복사
/tmp/rt-kernel/boot$ cd ../lib /tmp/rt-kernel/lib$ sudo cp -dr * /lib /tmp/rt-kernel/lib$ sync |
(5) 오버레이 관련 파일 복사
오버레이 설정 파일 복사
/tmp/rt-kernel/lib$ cd ../overlays /tmp/rt-kernel/overlay$ sudo cp -d * /boot/overlays /tmp/rt-kernel/overlay$ sync |
(6) 기타 부트관련 파일 복사
/tmp/rt-kernel/overlay$ cd .. /tmp/rt-kernel$ sudo cp -d bcm* /boot /tmp/rt-kernel$ sync |
(7) 부트 설정 변경
부트할 때 참조할 커널 이미지를 rt커널로 변경한다.
sudo vim /tmp/rt-kernel$ nano /boot/config.txt |
추가할 내용은 아래와 같다.
# Add the following option: kernel=kernel7_rt.img |
(8) 커널 변경 확인
uname 명령으로 커널 버전을 확인한다.
~$ uname -r 4.19.71-rt23-v7+ |
레퍼런스 사이트 안내 : 아래의 사이트 내용 참조.
https://lemariva.com/blog/2019/09/raspberry-pi-4b-preempt-rt-kernel-419y-performance-test
# 이상 라즈베리파이 리얼타임 커널 포팅... 끝.
최근댓글