SerenityOS의 실제 하드웨어 구현하기, 한번에 하나씩 드라이버 개발 진행

5 days ago 4

  • SerenityOS를 실제 하드웨어로 가져오기

    • SerenityOS 프로젝트에 더 깊이 관여하기로 결심한 이유는 코드베이스가 QEMU에서만 실행되고 실제 하드웨어에서는 실행되지 않는다는 점이었음. 이를 해결하기 위해 Dell 3100 크롬북을 선택했음.
  • 크롬북 선택 이유

    • 크롬북은 저렴하고 쉽게 구할 수 있으며, Cr50 보안 칩이 있어 닫힌 상태에서도 디버깅이 가능함. Dell 3100 모델을 선택한 이유는 가격이 저렴하고, 키보드가 고급 모델보다 더 좋았기 때문임.
  • cros_ec 문제

    • 크롬북의 Cr50 칩은 디버깅에 유용하지만, Dell 3100 모델에서는 제대로 작동하지 않았음. 몇 가지 하드웨어 해킹을 시도했으나 성공하지 못했음.
  • 대안 탐색

    • Cr50 칩이 작동하지 않아 Raspberry Pi Pico 보드를 사용하여 대체 디버깅 솔루션을 구현했음. 이를 통해 UART와 SPI 플래시를 연결하여 디버깅을 가능하게 했음.
  • 소프트웨어 측면

    • CircuitPython을 사용하여 USB 장치와의 연결을 구현했으며, EEPROM 플래싱을 위한 serprog 프로토콜을 CircuitPython으로 구현했음.
  • SerenityOS 디버깅

    • SerenityOS 커널을 디버깅하기 위해 Alpine Linux를 설정하고, GRUB를 통해 커널을 자동으로 다운로드하고 테스트하는 환경을 구축했음.
  • 16550 UART 이해

    • 16550 UART는 시리얼 통신을 위한 표준 인터페이스로, 대부분의 PC에 존재함. 그러나 Dell 3100에서는 MMIO를 사용하여 구현되어 있어 초기 디버깅에 어려움이 있었음.
  • eMMC 드라이버 구현

    • eMMC 드라이버를 구현하기 위해 SD와 MMC의 차이점을 이해하고, 초기화 시퀀스를 구현했음. 전원 제어 레지스터의 잘못된 설정이 문제였음을 발견하고 수정했음.
  • 결론

    • 이 프로젝트는 6개월에 걸쳐 진행되었으며, SerenityOS를 실제 하드웨어에서 실행하기 위한 중요한 단계였음. 앞으로도 추가적인 디버깅과 개선 작업이 필요함.

Read Entire Article