PowerPC 아키텍처에서 CPU 캐시 범위를 "무효화"하거나 "플러시"하는 방법은 무엇입니까?

PowerPC 아키텍처에서 CPU 캐시 범위를 "무효화"하거나 "플러시"하는 방법은 무엇입니까?

PowerPC저는 PCIe를 통해 CPU와 통신하는 임베디드 장치로 작업하고 있습니다 . SDK 제한으로 인해 Linux 커널 버전을 사용해야 합니다 4.1.8. 이 버전에는 다음과 같은 cache의 작업과 관련된 기능이 없습니다 .$KERNEL_SOURCE/arch/powerpc/include/asm/

  • "invalidate_dcache_range()"
  • "flush_dcache_range()"
  • "clean_dcache_range()"

( "cacheflush.h"위 함수의 선언만 이 디렉토리 헤더에 포함됩니다.)
또한 내 내장형 장치의 SDK는 액세스를 준비하기 위해 이러한 함수를 호출해야 합니다 DMA.
이 이후의 커널 버전에서는 4.5이러한 함수에 대한 선언을 제공합니다.

이제 몇 가지 질문이 있습니다.

  1. 최신 커널, 이전 커널에 구현된 기능을 사용하고 복사해서 다시 빌드할 수는 있지만 커널 소스 코드를 수정하는 것은 의미가 없겠죠?
  2. 이 문제를 해결하기 위한 몇 가지 해결 방법을 제안해 주실 수 있나요?
  3. 캐시가 유효하지 않거나 올바르게 플러시되었는지 어떻게 테스트할 수 있나요? 사용자 공간에서 캐시 블록을 읽을 수 있는 방법이 있나요?

감사해요,

답변1

이 버전에는 다음과 같은 cache의 작업과 관련된 기능이 없습니다 .$KERNEL_SOURCE/arch/powerpc/include/asm/

  • "invalidate_dcache_range()"
  • "flush_dcache_range()"
  • "clean_dcache_range()"

"cacheflush.h"(이 디렉토리 헤더 에는 위 함수의 선언만 포함됩니다 .)

커널 버전 4.1.8에는 다음 기능이 있습니다.arch/powerpc/kernel/misc_32.SCONFIG_WORD_SIZE, 인 경우에만 사용됩니다 32(즉, 32비트 플랫폼에서만).

플랫폼에 대한 자세한 내용을 제공해야 합니다.

  1. 최신 커널, 이전 커널에 구현된 기능을 사용하고 복사해서 다시 빌드할 수는 있지만 커널 소스 코드를 수정하는 것은 의미가 없겠죠?

커널 소스코드를 수정한다는 것은 매우 의미 있는 일이지만,당신이 필요하다면. 일부 코드를 백포트해야 할 타당한 이유가 있는 것 같지만... 제 생각에는 아마도 뭔가가 누락된 것 같습니다(아마도 플랫폼 구성에서?).

  1. 이 문제를 해결하기 위한 몇 가지 해결 방법을 제안해 주실 수 있나요?

드라이버에 이러한 파일이 필요하고 어떤 이유로 커널이 해당 파일을 제공하지 않는 경우 arch/powerpc/kernel/.

  1. 캐시가 유효하지 않거나 올바르게 플러시되었는지 어떻게 테스트할 수 있나요? 사용자 공간에서 캐시 블록을 읽을 수 있는 방법이 있나요?

죄송합니다. 도움을 드릴 수 없습니다. JTAG 디버거를 사용할 수 있을까요? 건배!

머레이...

관련 정보