
장치 펌웨어와 드라이버의 차이점을 살펴보면 기술적으로 구별이 필요한 이유를 실제로 알 수 없습니다. 나는 펌웨어가 변경하기 쉽지 않다는 점, 드라이버가 호스트 OS와 통신하는 동안 낮은 수준의 장치 작동을 수행한다는 점을 이해합니다.
문제는 왜 이 두 레이어를 하나로 축소할 수 없느냐는 것입니다. OS와 통신하는 방법을 알고 모든 요청을 하위 수준 장치 작업으로 직접 변환하는 드라이버입니다. 개발 용이성(즉, 이 소프트웨어를 개발하는 데 필요한 개발자 지식 감소)을 위한 것입니까? 플래시 메모리에 상주하지 않는 소프트웨어를 사용하여 장치와 통신하는 것이 가능하지 않습니까?
답변1
아니요, 두 가지 유형의 소프트웨어는 일반적으로 서로 다른 유형의 시스템에서 실행됩니다.
펌웨어는 주변 장치의 프로세서/컨트롤러에서 실행되고, 드라이버는 컴퓨터의 CPU에서 실행됩니다. 그것들은 대개 다른 유형입니다.
이론적으로는 하나~할 수 있었다주변 장치의 모든 비트 뱅킹을 수행하려면 컴퓨터의 CPU에 작업을 수행하십시오. 이것은 초기 컴퓨터에서 수행되었습니다. 그러나 이것은 높은 대가를 치르게 됩니다.
종종 외부 프로토콜에는 하드 타이밍 제한(네트워크 카드 또는 CRT 디스플레이 등)이 포함됩니다. CPU가 처리해야 할 사항많이적절한 순간에 작업을 완료하기 위해 인터럽트를 사용합니다. 이러한 이유로 유명한 Sinclair ZX-81에서는 CPU가 열심히 일할 때 디스플레이가 꺼졌습니다. 화면을 새로 고칠 시간이 없었습니다. :)
따라서 요즘 우리는 주변 장치의 작업을 분리하려고 노력합니다. 네트워크가 가득 차면 CPU에 알림이 전송됩니다.패킷도착했으며 비트 변경을 위해 와이어를 폴링할 필요가 없습니다.
답변2
펌웨어는 장치의 하드웨어를 직접 사용하여 장치에서 실행됩니다. 이를 보는 한 가지 방법은 펌웨어가 OS용 API이고 컴퓨터가 실행하는 OS가 무엇인지는 중요하지 않으며 x 명령을 받으면 펌웨어가 y를 수행하고 값 z를 반환할 수 있다는 것입니다. 장치에는 수행되는 속도 명령을 제어하는 자체 시계와 자체 메모리가 있으며 장치의 프로세서는 컴퓨터와 다를 수 있습니다. 예를 들어 컴퓨터는 amd64일 수 있지만 장치에는 arm64 프로세서가 있습니다. 펌웨어는 CPU나 RAM과 직접 통신하지 않으며 버스에서 명령을 받아 데이터를 다시 버스에 저장합니다.
드라이버는 OS 커널 수준이나 OS 사용자 수준에서 컴퓨터에서 실행되며, 드라이버는 OS에 따라 다르며 작동하려면 OS 요구 사항을 충족해야 합니다. 드라이버는 일반적으로 컴퓨터의 CPU 및/또는 RAM이 필요한 모든 작업을 처리하며, 명령별 처리가 완료되면 명령이 펌웨어를 통해 장치로 전달됩니다.
답변3
사실, 그들은 분리될 필요가 없습니다.
많은 경우 중앙 CPU에서 직접 하드웨어를 제어하는 것부터 펌웨어에서 최대한 많은 것을 구현하는 것까지 전체 스펙트럼을 살펴볼 수 있습니다.
다음은 펌웨어/드라이버 균형에 대한 설계 고려 사항의 불완전한 목록입니다.
- 표준 드라이버나 인터페이스를 사용하시겠습니까?
물론 NAND 의미를 드라이버에 노출하고 컨트롤러 칩을 저장하는 USB 플래시 메모리 스틱을 만들 수 있습니다. 그리고 어떻게든 이국적인 드라이버를 배포하십시오(Windows, Linux, MAC, Konica 프린터 등...). 반면에 사용자와 OS 개발자 모두 USB 스틱이 표준 블록 장치 드라이버와 함께 작동할 것으로 기대합니다. HID가 아닌 인터페이스를 갖춘 광 마우스? 별로 좋은 생각도 아닙니다.
- 귀하의 일부 기능 특허/NDA/영업비밀에 부담이 있습니까?
드라이버(컴파일된 경우에도)를 쉽게 리버스 엔지니어링하고 변경할 수 있지만 펌웨어는 훨씬 적습니다. 이는 비디오 칩의 경우에 자주 발생합니다.
- 규정 준수?
많은 무선 관련 펌웨어(WiFi, 셀, 블루투스)는 주파수 스펙트럼 규정 준수를 시행합니다.
- 비용? 일반적으로 설계 비용과 제조 비용 측면에서 최적의 지점이 있습니다.
등등 등등...
게다가 ROM 메모리가 부족한 장치가 꽤 많기 때문에 펌웨어는 실제로 드라이버의 일부이며 전원을 켤 때마다 장치에 업로드됩니다.