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) 섹션을 참조하십시오.
sudo insmod atemsys.ko
atemsys 커널 모듈은 대상 장치를 위해 크로스 컴파일할 수도 있습니다. 이를 수행하려면 make에 추가 매개변수 ARCH=, CROSS_COMPILE= 및 KERNELDIR=를 전달해야 합니다.
예시:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNELDIR=<대상 커널 디렉터리 경로>
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNELDIR=<대상 커널 디렉터리 경로>
⚠️ 경고: 커널 버전과 소스 코드는 대상 장치에 설치된 것과 정확히 일치해야 합니다. 임베디드 장치에서는 패치된 소스를 가진 사용자 정의 커널이 자주 사용됩니다. 장치에 적합한 소스는 제조사에 문의하십시오.
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 =