
openqore v0.1.0-beta.1
soundcores의 모든 힘을 발휘하세요! :)
openqore
soundcore q 시리즈 헤드폰의 펌웨어를 패치, 수정, 개선하기 위한 오픈소스 툴킷이며, 향후 다른 모델 지원도 계획되어 있습니다.
참고: 이 프로젝트는 하드웨어 리버스 엔지니어링과 임베디드 시스템 세계로 들어가는 저의 개인적인 여정입니다. 10대가 만들었고, 저도 배워가며 진행하고 있습니다. 버그와 실수, 그리고 많은 즐거움이 있을 거라 기대하세요. 모든 기여와 조언을 환영합니다!
중요한 정보!
이 프로젝트는 두 부분으로 나뉩니다:
- openqore SDK - bes2300p SoC 기반 soundcore 헤드폰용 펌웨어 SDK
- qorepatcher - 헤드폰의 스톡 펌웨어용 패처 (이 저장소)
또한 DOOMBuds 프로젝트를 기반으로 한 데모 프로젝트인 DOOM 포트도 만들었습니다. 그것도 확인해 보세요! =)
qorepatcher
지원 기기
이 프로젝트는 soundcore life q35로 시작되었습니다. 새 모델 테스트를 돕거나 지원을 추가하려면 이슈를 열어 주세요!
| 모델 | 칩셋 | 상태 |
|---|---|---|
| soundcore life q35 | bes2300p | ✅ 지원됨 |
| soundcore life q30 | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life tune pro | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life tune | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore life q20i | bes2300p | ❔ 작동할 것으로 예상되지만 테스트 필요 |
| soundcore space one | bes1502x | ❌ 작업 중 |
다른 모델 지원은 향후 목표입니다!
참고:
bes2300*, bes1502*, bes1600칩셋 기반 기기가 향후 지원 가능성이 가장 높은 후보입니다.
로드맵
openqore는 이제 막 시작했습니다. 다음에 진행될 대략적인 계획은 다음과 같습니다:
- 사운드 교체를 위한 초기 펌웨어 패처.
- 시스템 사운드의 48khz 오디오 지원 잠금 해제.
- 시스템 사운드의 스테레오 지원 조사 및 잠금 해제.
- 모든 bes2300 칩셋에서 작동하도록 패처 제작 (경고: 테스트 필요!)
- 모든 (또는 대부분의) bes 칩셋에서 작동하도록 패처 제작
- 헤드폰 이름 및 MAC 주소 수정 패치 구현.
- 일부 모델의 aux 입력(잭 연결)에서 저음량 제한기/게이트 제거.
- 패처용 사용자 친화적인 GUI 제작.
- 무선 플래싱을 위한 ota (over-the-air) 업데이트 프로토콜 리버스 엔지니어링.
- 펌웨어 구조 및 주요 함수 문서화.
- 커뮤니티 제작 사운드 팩 라이브러리 개발.
빠른 시작
이 가이드는 시스템에 python과 git이 설치되어 있다고 가정합니다.
1. 릴리스에서 zip 아카이브를 다운로드하고 압축을 풉니다
2. 의존성 설치
패처는 오디오 변환을 위해 ffmpeg와 pybluez가 필요합니다:
windows:
pip install git+https://github.com/pybluez/pybluez.git
winget install ffmpeg
macos:
pip install git+https://github.com/pybluez/pybluez.git
brew install ffmpeg
ubuntu/debian:
pip install git+https://github.com/pybluez/pybluez.git
sudo apt install ffmpeg
3. 펌웨어 파일 확보하기
OTA 이미지를 여기에서 다운로드하거나 UART로 플래시를 읽을 수 있습니다:
ota (over-the-air)를 통한 플래시 읽기는 향후 업데이트에서 계획되어 있습니다. (가능하다면요 :D)
4. 축하합니다!
사용 방법 안내는 여기에서 확인할 수 있습니다.
FAQ
1. qorepatcher에서 펌웨어 옵션(ota boot 없음 또는 포함) 중 어떤 것을 선택해야 하나요?
헤드폰의 플래시 덤프를 패치하는 경우 "ota boot 포함" 옵션을 선택하세요.
공식 업데이트 서버에서 ota 업데이트 이미지를 다운로드한 경우 "ota boot 없음" 옵션을 선택하세요
참고: ota boot 없이 펌웨어를 패치한 경우, UART 플래싱 전에 패치된 펌웨어의 헤더에 ota boot를 추가해야 합니다. besota 스크립트를 사용한다면 이 작업은 필요하지 않습니다!
기술 심층 분석
너드(nerd)스러운 내용입니다: 클릭하여 펼치기...
이 섹션에는 q35 펌웨어 리버스 엔지니어링에서 얻은 초기 발견 사항 중 일부가 포함되어 있습니다.
엔지니어링 모드와 기능 살펴보기
헤드폰에는 여러 숨겨진 테스트 모드가 있습니다. 그중 일부는 향후 업데이트나 디버깅에 유용할 수 있습니다.
-
엔지니어링 모드: 이 모드에 진입하려면 전원 버튼을 누른 상태에서 헤드폰이 켜지기 전에 USB-C로 PC에 연결한 다음, 전원이 켜질 때까지 기다리세요.
-
rfcomm: 헤드폰에는 두 개의 시리얼 COM 포트가 있습니다. 그중 하나는 쓰기가 가능합니다. 지금까지 이 포트를 통해 트리거할 수 있었던 유일한 기능은 UFR (아래 설명)입니다. 특정 명령이 아니라 다양한 16진수 코드를 무차별 대입하여 트리거된 점을 보면 보안 조치로 보입니다. 흥미롭게도 이는 표준 리셋(전원 + 볼륨+)이 아니라 다른 방식입니다.
-
테스트 모드: 이 모드는 엔지니어링 모드와 비슷하게 진입하지만, 흰색 LED가 처음 깜박인 직후, 파란불이 켜지기 전에 전원 버튼을 놓아야 합니다. 그러면 헤드폰이 PC에 "디바이스 설명자 요청 실패(device descriptor request failed)" 오류가 있는 기기로 나타납니다. 이 모드에 진입했는지는 평소보다 빠르게 깜박이는 흰색 LED로 확인할 수 있습니다. 그 목적은 펌웨어 플래싱과 관련이 있을 가능성이 높습니다. 또한 이 모드에서는 충전 중에 헤드폰 전원을 켤 수 있습니다!
-
문서화되지 않은 공장 초기화(UFR): 헤드폰 전원이 켜진 상태에서 전원 버튼을 빠르게 여러 번 누르거나 가상 COM 포트(위 참조)로 무언가를 보내면 숨겨진 공장 초기화가 트리거될 수 있습니다. 그러면 펌웨어가 중단(hang)되고 약 30초 후에 강제로 재부팅됩니다. 이 작업은 이퀄라이저 설정, 블루투스 페어링 및 기타 구성을 포함한 모든 사용자 데이터를 삭제한다는 점에 유의하세요.
펌웨어 구조
펌웨어는 여러 섹션으로 나뉜 모놀리식 바이너리로 보입니다. 각 중요 섹션은 crc32 체크섬으로 보호됩니다. 향후 패처는 부팅 실패를 방지하기 위해 수정 후 이러한 체크섬을 자동으로 다시 계산할 것입니다.
오디오 시스템
- 스톡: 기본 시스템 사운드는
16khz, 모노, SBC오디오 스트림으로 저장됩니다. - 모드(modded): 오디오 dac 초기화를 담당하는 함수를 패치하면 시스템이
48khz, 스테레오로 오디오를 재생하도록 강제할 수 있습니다. 이는 사용자 정의 사운드의 품질을 크게 향상시킵니다.
주요 구성 요소 및 인터페이스
- 칩셋: q35의 핵심은 bestechnic (bes, best)
bes2300pSoC입니다. 데이터시트는 검색을 통해 찾을 수 있습니다. - 디버그 포트: PCB에는 초기 디버깅에 사용되었던
uart시리얼 포트가 있으며, 잘못된 플래싱 후 기기를 복구(unbrick)하는 주요 방법입니다.bes2300p칩 자체에는 두 개의 uart 포트가 있지만, 그중 하나만 PCB에서 쉽게 접근할 수 있는 패드로 노출되어 있습니다.
기여
기여는 오픈소스 커뮤니티를 배우고, 영감을 주고, 창조하기에 놀라운 장소로 만드는 힘입니다. 여러분의 모든 기여를 크게 감사드립니다.
이 프로젝트를 더 좋게 만들 제안이 있다면 저장소를 포크하고 풀 리퀘스트를 만들어 주세요. 간단히 "enhancement" 태그로 이슈를 열어도 됩니다. 프로젝트에 별표(star)를 주는 것도 잊지 마세요! 다시 한번 감사합니다!
- 프로젝트를 포크합니다.
- 기능 브랜치를 만듭니다 (
git checkout -b feature/amazing-feature). - 변경 사항을 커밋합니다 (
git commit -m 'feat: add some amazing feature'). - 브랜치에 푸시합니다 (
git push origin feature/amazing-feature). - 풀 리퀘스트를 엽니다.
연락처 및 커뮤니티
❤️ 프로젝트 후원하기
이 프로젝트가 유용하다고 생각하시고 향후 개발을 지원하고 싶다면 boosty를 통해 저에게 커피나 간식을 선물해 주실 수 있습니다! 모든 기여는 크게 감사드리며, openqore에 더 많은 시간을 할애할 수 있게 도와줍니다.
감사의 말
이 프로젝트는 AI 기반 코딩 어시스턴트(예: claude, chatgpt)를 광범위하게 활용하여 탄생했습니다. 핵심 리버스 엔지니어링, 연구, 아키텍처 결정은 작성자가 수행했지만, AI는 개발 프로세스 가속화, 보일러플레이트 코드 작성, 디버깅에 중요한 역할을 했습니다.
현대적인 도구로 만들어진 현대적인 프로젝트입니다.
라이선스
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 전체 라이선스 전문은 라이선스 파일에서 확인할 수 있습니다.