저는 멀티스트랩을 사용하여 구축된 ARM CPU 및 Debian Jessie를 사용하여 임베디드 장치를 개발 중입니다. 이 시스템에 약간 패치된 ModemManager 버전을 설치해야 할 것 같습니다. 제가 요청하는 것은 이를 수행하는 방법에 대한 지침입니다.
지금까지 시도한 것은 멀티스트랩에 의해 생성된 rootfs로 chroot하고, apt-get을 사용하여 ModemManager의 소스 코드를 다운로드하고 chroot로 빌드하는 것입니다. 지금까지 만족할 수 없는 종속성으로 인해 구성 스크립트를 통과하지 못했습니다.
모뎀의 직렬 포트를 스캔하여 하드웨어를 혼동시킬 수 있는 ModemManager의 알려진 문제를 해결하려면 패치가 필요합니다. udev 규칙을 통해 장치를 블랙리스트에 추가하면 이 문제를 해결할 수 있지만 이 경우 직렬 포트는 tty 하위 시스템의 일부이므로 블랙리스트에 추가하는 것은 지원되지 않습니다. ModemManager의 소스 코드에서 이를 확인했습니다.
나는 또한 이 문제를 해결할 수 있는 더 간단한 방법을 찾는데 매우 개방적이지만, 지금까지는 그것을 발견하지 못했습니다.
답변1
이 특정 질문은 오래되었지만 multistrap을 사용하여 multistrap으로 생성된 debian rootfs에 특정 소프트웨어의 수정된 버전을 추가할 때 흔히 발생하는 문제입니다.
나는 멀티스트랩에 의해 생성된 chrootfs에서 소프트웨어를 컴파일하는 것이 너무 힘들기 때문에 크로스 컴파일과 멀티스트랩을 혼합하지 않을 것입니다.
대신 수정된 소프트웨어를 쉽게 컴파일하겠습니다. 대상 ARM 아키텍처에 대한 크로스 컴파일 환경이 이미 있을 수 있지만 그렇지 않은 경우 현재(및 2016년) IMO에서 가장 쉬운 방법은 원하는 대상이 있는 Raspberry Pi와 같은 단일 보드 Linux/ARM 컴퓨터를 사용하는 것입니다. OS, 거기에 필요한 빌드 도구를 설치하고 거기에서 수정된 소프트웨어를 컴파일합니다. 네이티브 컴파일을 사용하므로 크로스 컴파일을 설정할 필요가 없습니다. 컴파일 후 생성된 바이너리를 PC의 멀티스트랩 환경에 복사합니다.
멀티스트랩을 정상적으로 실행하고 chroot에서 모든 패키지를 구성한 후 수정된 바이너리를 rootfs에 복사한 다음 대상 하드웨어에서 rootfs를 사용하면 됩니다.
여기서 "바이너리"는 단지 컴파일된 실행 파일을 의미할 수도 있지만 사용자 정의 .deb 패키지(복사하는 대신 chroot에서 dpkg를 사용하여 최종적으로 설치됨)를 의미할 수도 있습니다. 후자는 수정 사항에 대해 더 많은 보호를 제공합니다. apt update; apt upgrade
임베디드 시스템이 런타임에 소프트웨어 업데이트를 검색할 수 있는 경우 수정 사항을 되돌릴 수 없도록 .deb 버전 번호를 수정할 수도 있기 때문입니다.