2012-03-29 1 views
0

방금 ​​VxWorks 작업을 시작했습니다. 현재 다음 작업을하고 있습니다 : -예외 처리 및 메모리 관리를위한 핸들을 제공하기 위해 VxWorks를 통해 추상화 레이어를 구현하는 방법은 무엇입니까?

예외 처리 (예 : 널 포인터 사용 감지)를 처리하는 프레임 워크를 생성해야합니다. 대체로 운영 체제에 대한 추상화 계층과 같을 것입니다. 이 프레임 워크는 다운로드 가능한 커널 모듈의 형태로 제공됩니다. 유닛 테스트 (DKM)도이 프레임 워크에서 가져옵니다.

예외 처리기 &을 직접 처리하고 싶지만 어떻게 처리해야할지 모르겠다.

특정 API (올바르게 이해할 수있는 경우)를 사용하려면 R 구성 요소를 커널 이미지로 구성해야하지만 이미 커널 공간에있는 DKM에 완전한 액세스 권한이없는 경우 따라서 메모리 (RAM, 영구 메모리) &에 직접 액세스 할 수 있습니까?

내 목표를 달성하는 방법에 대한 지침을 제게 제공 할 수 있습니까?

현재 예외가 발생하면 일부 세부 정보를 표시 한 후 작업이 중지됩니다. & 모듈을 디버깅하라는 메시지가 나타납니다. 그런 다음 코어 덤프를 보려면 edrShow 명령을 사용합니다.

작업을 중지 한 후 디버그 프롬프트 &을 제거하고 명시 적으로 명령을 내 보내지 않고 사용자에게 코어 덤프를 표시합니다.

edrStub.c (edrKernelFatalPolicyHandler 메서드)를 살펴 봤지만 원하는 결과를 얻으려는 방법을 알아낼 수 없었습니다.

답변

1

당신이 말하는 것은 예외 메커니즘의 확장을 구현하려는 것입니다.
ED & R은 이미 언급 한 조건을 다룹니다. 문제가되는 작업은 일반적으로 디버거를 연결할 수 있도록 일시 중지됩니다.

예외 처리의 기본 동작이 마음에 들지 않으면 comp/src/vxworks/edrStub.c에있는 코드를 수정할 수 있습니다 (필자는 그 부분을 생각합니다). 그런 다음 치명적인 예외를 처리하는 자체 함수를 구현할 수 있습니다. 특정 예외를 처리하려면

에 물건을 넣어 관해서 ...

을 당신은 당신의 자신의 예외 핸들러를 연결하는 excLib를 사용할 수 있지만 당신은 정말 당신이 무슨 일을하는지 알고 싶어 DKM 중 가장 쉬운 방법은 특정 기능에 대한 미리 정의 된 함수 포인터를 사용하는 것입니다. 함수 포인터가 설정되어 있으면 함수를 호출하고 그렇지 않으면 일반 코드를 호출합니다. DKM에는 일반적으로 함수 포인터를 설정하는 dkmInit() 함수가 있습니다. 그래서 예를 들면

: 물론

void regularExceptionHandler() { 
    if (__myExceptionHandler != NULL) { 
     __myExceptionHandler(); 
     return; 
    } 

는 __myExceptionHandler는 기본 Vx 웍스 커널 이미지의 일부가되어야합니다.
이것은 vxWorks에서 자주 사용되는 패턴입니다.