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
이 버전에는 다음과 같은
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.S
CONFIG_WORD_SIZE
, 인 경우에만 사용됩니다 32
(즉, 32비트 플랫폼에서만).
플랫폼에 대한 자세한 내용을 제공해야 합니다.
- 최신 커널, 이전 커널에 구현된 기능을 사용하고 복사해서 다시 빌드할 수는 있지만 커널 소스 코드를 수정하는 것은 의미가 없겠죠?
커널 소스코드를 수정한다는 것은 매우 의미 있는 일이지만,당신이 필요하다면. 일부 코드를 백포트해야 할 타당한 이유가 있는 것 같지만... 제 생각에는 아마도 뭔가가 누락된 것 같습니다(아마도 플랫폼 구성에서?).
- 이 문제를 해결하기 위한 몇 가지 해결 방법을 제안해 주실 수 있나요?
드라이버에 이러한 파일이 필요하고 어떤 이유로 커널이 해당 파일을 제공하지 않는 경우 arch/powerpc/kernel/
.
- 캐시가 유효하지 않거나 올바르게 플러시되었는지 어떻게 테스트할 수 있나요? 사용자 공간에서 캐시 블록을 읽을 수 있는 방법이 있나요?
죄송합니다. 도움을 드릴 수 없습니다. JTAG 디버거를 사용할 수 있을까요? 건배!
머레이...