임베디드 Linux 플랫폼에 TZ 데이터베이스를 설치하는 방법은 무엇입니까?

임베디드 Linux 플랫폼에 TZ 데이터베이스를 설치하는 방법은 무엇입니까?

재고 OS 이미지에 일반적인 /usr/share/zoneinfo.

내 애플리케이션에 시간대 지원을 포함할 수 있도록 이 장치를 개선하고 싶습니다. 장치에는 패키지 관리자가 없으며 또는 같은 일반적인 시간대 관리 유틸리티도 포함되어 있지 tzselect않습니다 timedatectrl. 데이터를 장치로 전송하는 주요 방법은 USB 플래시 드라이브를 사용하는 것입니다.

장치의 GLIBC 라이브러리가 시간대 지원을 포함하도록 구축되었음을 확인했으며 내 컴퓨터에서 장치로 TZ 데이터베이스를 수동으로 복사하고 예상되는 다양한 심볼릭 링크를 생성하여 시간대 지원을 어느 정도 얻을 수 있음을 확인했습니다.

TZ 데이터베이스 설치에 관해 온라인에서 찾을 수 있는 모든 내용에는 플랫폼의 패키지 관리자를 사용하는 것이 권장되지만 이 경우에는 패키지 관리자를 사용할 수 없습니다. 복잡한 요소는 장치 제조업체가 모든 사용자 데이터를 이 /opt디렉토리에 적절하게 배치할 것을 권장한다는 것입니다(시스템 디렉토리는 읽기 전용으로 마운트됩니다).

/opt/usr/share/zoneinfo일반적인 링크 대신 -> 기호 링크를 사용하여 데이터베이스를 설치하고 싶습니다 . 이는 내 개발 컴퓨터의 디렉터리에서 복사된 심볼릭 링크가 대상에 도달한 후에는 올바른 위치를 가리키지 않음을 의미합니다(절대적이라고 가정)./usr/share/zoneinfo/usr/share/zoneinfo/opt/usr/share/zoneinfozoneinfo

따라서 TZ 데이터베이스를 복사하려면 다음이 필요하다고 생각합니다.

  • 내 개발 장치에 있는 디렉터리의 임시 복사본을 가져옵니다 usr/share/zoneinfo. 기계
  • symlinks모든 절대 기호 링크를 상대 기호 링크로 변환하려면 이 유틸리티를 사용하십시오 .
  • 기호 링크를 유지하는 아카이브 형식으로 디렉토리를 압축합니다.
  • 아카이브를 USB 플래시 드라이브에 복사
  • 원하는 위치에 추출하세요.

더 나은/표준/올바른 방법이 있습니까?

노트:저는 CrossControl CCPilot VS, Yocto에서 생성된 Linux 운영 체제를 사용하고 있습니다.

답변1

특정 하드웨어 및 시나리오에 대해 더 자세히 알지 못하더라도 여기서 가장 쉬운 조치는 다음 방법을 따르는 것입니다.스크래치 프로젝트(LSF)의 Linux.

처음부터 리눅스

이 프로젝트에서는 다음 단계를 논의합니다.

8.5.2.2. 시간대 데이터 추가

다음 명령을 사용하여 시간대 데이터를 설치하고 설정합니다.

    tar -xf ../../tzdata2018e.tar.gz
    
    ZONEINFO=/usr/share/zoneinfo
    mkdir -pv $ZONEINFO/{posix,right}
    
    for tz in etcetera southamerica northamerica europe africa antarctica  \
              asia australasia backward pacificnew systemv; do
        zic -L /dev/null   -d $ZONEINFO       -y "sh yearistype.sh" ${tz}
        zic -L /dev/null   -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
        zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
    done
    
    cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
    zic -d $ZONEINFO -p America/New_York
    unset ZONEINFO

*인용하다: https://www.linuxfromscratch.org/lfs/view/development/chapter08/glibc.html

보관소?

그렇다면 남은 유일한 질문은 이 tzdata2018e.tar.gz파일을 어디서 구할 수 있느냐는 것입니다. Google에서 더 많이 검색하면 이 페이지가 나타납니다.3.2.모든 패키지, 해당 URL은 이 페이지에서 사용할 수 있습니다.

시간대 데이터(2018e) - 346KB:

답변2

알고 보니 기존 TZ 데이터베이스를 더 간단한 ubuntu xenial 개발 시스템으로 전송하고 싶었습니다. 디렉터리를 zoneinfotar 아카이브로 압축하면 복사 작업을 통해 기호 링크가 보존되고 기호 링크는 이미 상대적이므로 대상 장치의 대체 위치에 디렉터리를 마운트하는 것은 문제가 되지 않습니다.

답변3

소규모 임베디드 Linux 시스템에서 TZ 데이터베이스를 사용할 때 발생하는 한 가지 문제점은 결과 바이너리 파일의 크기가 크다는 것입니다. Linux 커널과 rootfs 자체보다 커질 수 있습니다. :)
시간대 데이터베이스의 기본 빌드는 일반적으로 파일(zoneinfo/)에 저장된 대규모 바이너리 데이터베이스를 제공합니다. 크기가 2MB가 넘으며 다양한 시간대 이름을 지원하는 데 사용됩니다. 메모리 제약이 엄격한 소규모 임베디드 시스템의 경우 시간대 데이터를 200KB 미만으로 줄일 수 있습니다.

기여에 관심이 있는 사람을 위해 여기에 링크를 게시하세요.https://github.com/turbosree/TinyTZ

이 구현은 원시 시간대 데이터를 몇 킬로바이트(<200KB)의 바이너리 데이터로 줄이고 엄격한 메모리 제약이 있는 임베디드 시스템과 함께 사용할 때 파일 시스템 종속성을 방지합니다. 기본적으로 시간대 데이터는 SRAM에 상주할 수 있으며 간단한 C API를 사용하여 베어 메탈 시스템에서도 액세스할 수 있습니다.

관련 정보