Kernel 모듈 atemsys: Real-time Ethernet Driver 성능 향상
요약
atemsys 커널 모듈은 EtherCAT Master Stack Software 및 Network Simulation Software의 성능을 개선하기 위해 개발되었습니다. 이 모듈은 PCI 설정 공간, 장치 I/O 메모리 등 하드웨어에 직접 접근할 수 있는 권한을 사용자 공간에 제공합니다. 사용자는 대상 환경에 맞춰 네이티브 또는 크로스 컴파일 방식으로 atemsys를 빌드하고 커널에 로드해야 합니다.
핵심 포인트
- atemsys는 Real-time Ethernet Driver 성능 향상을 위한 커널 모듈입니다.
- PCI 설정 공간, DMA 메모리 등 하드웨어 직접 접근 권한을 제공합니다.
- 네이티브 또는 크로스 컴파일 방식으로 빌드가 가능하며, 대상 환경에 맞는 소스가 필수적입니다.
atemsys는 EtherCAT Master Stack Software EC-Master와 EtherCAT Network Simulation Software EC-Simulator에 사용되는 Real-time Ethernet Driver의 성능을 개선하는 하드웨어 직접 접근 권한을 부여하는 커널 모듈입니다.
이 모듈은 다음 기능들에 대한 사용자 공간(usermode) 접근을 제공합니다:
- PCI 설정 공간 (PCI configuration space)
- 장치 I/O 메모리 (Device IO memory)
- 연속 DMA 메모리 (Contiguous DMA memory)
- 장치 인터럽트 (Device interrupt) (공유 인터럽트는 지원하지 않음)
다음 다이어그램은 Linux 환경에서 EC-Master의 아키텍처를 보여줍니다.
atemsys는 대상 장치에 네이티브하게 빌드할 수 있습니다:
git clone https://github.com/acontis/atemsys.git
sudo apt-get install linux-headers-$(uname -r)
ℹ️ 커널 헤더를 설치할 수 없는 경우, 아래의 크로스 컴파일(cross-compiling) 섹션을 참조하십시오.
cd atemsys
make modules
sudo insmod atemsys.ko
atemsys 커널 모듈은 대상 장치를 위해 크로스 컴파일할 수도 있습니다. 이를 수행하려면 make에 추가 매개변수 ARCH=, CROSS_COMPILE= 및 KERNELDIR=를 전달해야 합니다.
예시:
- ARM 32 Bit:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNELDIR=<대상 커널 디렉터리 경로>
- ARM 64 Bit:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNELDIR=<대상 커널 디렉터리 경로>
-
git으로 클론하기:
git clone -b v4.4.189 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -
kernel.org에서 다운로드하기: https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.4.189.tar.gz
⚠️ 경고: 커널 버전과 소스 코드는 대상 장치에 설치된 것과 정확히 일치해야 합니다. 임베디드 장치에서는 패치된 소스를 가진 사용자 정의 커널이 자주 사용됩니다. 장치에 적합한 소스는 제조사에 문의하십시오.
zcat config.gz > linux/.config
cd linux
make ARCH=<...> CROSS_COMPILE=<...> oldconfig
make ARCH=<...> CROSS_COMPILE=<...> prepare
...
git clone https://github.com/acontis/atemsys.git
cd atemsys
make ARCH=<...> CROSS_COMPILE=<...> KERNELDIR=<대상 커널 디렉터리 경로> modules
sudo insmod atemsys.ko
Yocto를 사용하여 atemsys를 생성하는 레시피가 있습니다. 자세한 정보는 https://github.com/acontis/meta-acontis에서 확인할 수 있습니다.
atemsys는 이더넷 MAC을 위한 디바이스 트리 기반 플랫폼 장치 드라이버로서 다음과 같은 여러 예정된 문제를 처리할 수 있습니다:
- 최신 Linux 버전은 더 복잡한 전원 절약 동작을 가져옵니다. 이를 해결하려면 리눅스 드라이버가 네이티브 드라이버와 동일하게 리눅스의 전원 관련 관리 시스템에서 클레임(claim)해야 합니다.
- 일부 PHY 구성은 현재 EC-Master에 의해 지원되지 않습니다. 리눅스 드라이버로서 atemsys는 해당 리눅스 PHY 드라이버를 사용할 수 있습니다.
- 2개의 이더넷 포트와 공유된 Mdio 버스를 가진 시스템의 경우, Linux와 EC-Master 간에 더 쉽게 분리할 수 있습니다. Mdio 버스를 제공하는 이더넷 포트는 Linux에 할당되어야 합니다.
디바이스 트리 파일은 커널과 모듈을 컴파일하기 전에 <kernel sources>/arch/<cpu architecture>/boot/dts에서 사용자 정의할 수 있습니다.
실행 중인 시스템에서는 컴파일된 디바이스 트리 파일을 일반적으로 커널 이미지 옆, 즉 시스템의 /boot 폴더에서 찾을 수 있습니다. *.dtb 파일은 디바이스 트리 컴파일러(device tree compiler)를 사용하여 다음과 같이 변환할 수 있습니다:
> dtc -I dtb -O dts -f <file name>.dtb -o <file name>.dts
그리고 다음 명령어로 재컴파일할 수 있습니다:
> dtc -I dts -O dtb -f <file name>.dts -o <file name>.dtb
- 이더넷 장치 트리 노드를
compatible속성에atemsys값을 할당하여 atemsys 장치 드라이버에 할당합니다. 기존compatible목록에atemsys를 추가하는 것도 가능합니다. - 다음 속성들을 추가합니다:
atemsys-Ident및atemsys-Instance..atemsys-Ident는 실시간 이더넷 드라이버의 이름이며,atemsys-Instance는 EC-Master가 사용할 인스턴스 번호와 함께 사용됩니다. - 또한EcLink.h에서EC_LINK_PARMS_IDENT_*도 참조하십시오. ethernet-phy에서interrupt-parent및interrupts와 같은 모든 인터럽트 속성을 제거합니다.
sub-node. - GPIO 핀을 통해 PHY 리셋을 지원하려면 (사용자 값 추가)
- atemsys-phy-reset-gpios = <0x4a 0x05 0x01>;
- atemsys-phy-reset-duration = <0x0a>;
- [atemsys-phy-reset-post-delay = <0x64>;]
- [atemsys-phy-reset-active-high = <0x1>;]]
ℹ️ 다른 플랫폼에 대한 더 많은 예시 장치 트리(device trees)는 Wiki에서 확인할 수 있습니다.
Freescale/NXP i.MX6DL용 Ethernet 장치 노드
ethernet@02188000 {
```**compatible =
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기