
C/C#로 작성된 임베디드 시스템 C2 소프트웨어
Oni-Framework는 임베디드 장치 소프트웨어 개발을 위한 플랫폼입니다. 임베디드 장치를 원격으로 디버깅하거나 기능을 추가하는 데 사용됩니다. 현재 주요 개념은 완전히 모듈화된 플러그인 시스템과 로컬 및 원격 RPC입니다. 이는 ring-0 권한 수준에서 실행되도록 설계되었지만, 약간의 수정을 거치면 ring-3 수준에서도 사용할 수 있습니다. 경고합니다. 이것은 프로덕션 용도가 아니며, 연구를 위한 쉬운 빌딩 플랫폼을 원하는 개발자만을 위한 것입니다.
계획된 기능:
Oni-Framework는 이 디렉터리를 체크아웃하고 필요한 모든 구현을 oni/utils/kdlsym/default.h 파일에 구현하기만 하면 됩니다. 그 후에는 gcc나 clang으로 컴파일하여 실행 파일을 만들 수 있습니다. BYO 실행 방법이 필요하지만, 대부분의 임베디드 장치에서는 ssh 셸, telnet 셸, 또는 어떤 셸이든 사용하여 수행할 수 있습니다. 다른 장치의 경우 실행 중인 메모리 컨텍스트로 로드한 다음 모든 초기화 문제를 처리하는 main으로 점프해야 할 수도 있습니다.
git clone https://github.com/kiwidoggie/oni-framework.git
a. 선택 사항: FreeBSD 헤더 위치 설정 export BSD_INC="/path/to/freebsd/headers/include"make create를 실행해야 합니다make를 사용하여 빌드합니다
a. 환경 변수를 설정하지 않은 경우 make BSD_INC=/path/to/freebsd/headers/include로 빌드할 수 있습니다Oni-Framework는 완전한 기능을 갖춘 libc에 의존하지 않으며, (모든 전제 조건이 충족된다면) 완전히 독립적으로 빌드되고 실행되도록 설계되었습니다. 대신 필요한 기능은 실행 중인 프로세스 컨텍스트 또는 커널 컨텍스트에서 기존 함수의 최소한만 조합하여 구성됩니다 (후자만 테스트되었습니다).
include/oni/utils/kdlsym/my_platform.h에 새 헤더를 만들어 새로운 kdlsym(커널 동적 심볼 해석) 대상을 생성합니다include/oni/utils/kdlsym/default.h의 내용을 복사하여 붙여넣습니다include/oni/utils/kdlsym.h에 추가합니다#if ONI_PLATFORM==ONI_UNKNOWN_PLATFORM
#include "kdlsym/default.h"
#elif ...
#elif ONI_PLATFORM==ONI_MY_PLATFORM
#include "kdlsym/my_platform.h"
#endif
include/oni/config.h에 위치한 구성 파일에 대상을 추가합니다// Unknown device
#define ONI_UNKNOWN_PLATFORM -1
#define ONI_MY_PLATFORM 5
#define ONI_PLATFORM ONI_UNKNOWN_PLATFORM을 #define ONI_PLATFORM ONI_MY_PLATFORM으로 변경하세요기여하고 싶다면 풀 리퀘스트를 제출하세요. 그 외에는 현재 이 프로젝트에 대한 실제 지원이 없습니다. 이는 향후 변경될 수 있습니다
| Bit Offset | Bit Length | Name | Description | Usage |
|---|
| 0 | 3 | Magic | 메시지가 올바르게 처리되고 있는지 확인하기 위한 간단한 패킷 헤더 매직 | 필수: 0101b 또는 5(10진수)로 설정해야 함 |
| 3 | 4 | Message Category | oni-framework 쪽에서 메시지를 어떤 카테고리로 라우팅할지 설명 | 필수: 최대 14개 카테고리 (현재 5개 사용 중) |
| 7 | 32 | Error/MessageType | 이 필드는 오류 코드 또는 메시지 유형을 포함합니다 | 요청: 현재 CRC32(MessageName)로 계산되는 메시지 유형으로 설정해야 함, 응답: 오류 코드/반환 값으로 설정됨 |
| 39 | 16 | Payload Size | 메시지 헤더 뒤에 오는 데이터의 길이 | 선택: 페이로드가 없으면 0으로 설정, 그렇지 않으면 데이터가 필요함 |
| 55 | 1 | Request | 메시지가 요청이면 1, 응답이면 0으로 설정되는 플래그 | 필수 |
| 56 | 7 | Reserved | 예약됨 | 무시됨: 0으로 설정 |