Skip to content

Cramfs

  • Cramfs (Compressed ROM File System)는 플래시 디바이스 내부에서 사용 가능한 압축된 읽기 전용 리눅스 파일 시스템이다.

  • 간단하고 공간 효율적이다. zlib 루틴을 사용해 파일을 한 페이지씩 압축하고 랜덤 페이지 접근을 허용한다. 메타데이터는 압축되지 않지만 매우 간결한 표현을 사용해 기존 파일시스템보다 디스크 공간을 훨씬 적게 사용한다.

  • 메모리 크기가 작은 임베디드 디자인에 활용된다.

  • 현재 시스템에서 사용자 어플리케이션 실행폴더로 활용

  • RAM과 다르게 중간에 전원이 꺼지더라도 파일시스템이 훼손되지 않는다.

  • cramfs 파일시스템에는 쓰기가 불가능하다 (높은 압축률 때문에 실시간 업데이트가 매우 어렵다). 따라서 별도 유틸리티로 디스크 이미지를 생성해야 한다.

  • 사용 시 주의사항은 다음과 같다:

    • 파일 크기는 16MB 미만으로 제한된다.
    • 최대 파일시스템 크기는 약 256MB이다.
    • gid의 하위 8비트만 저장된다.
    • 하드 링크가 지원되지만 링크 수는 1로 표시된다.
    • 디렉토리에 ’.’ 또는 ’..’ 항목이 없다.
    • 타임스탬프가 저장되지 않아 기본값이 1970년 GMT로 설정된다.
  • 현재 cramfs는 같은 엔디안 아키텍처에서만 쓰고 읽을 수 있으며, PAGE_SIZE가 4096인 커널에서만 읽을 수 있다.

  • 메모리 매핑된 cramfs 이미지 기능도 지원된다. 이는 블록 디바이스 레이어를 거치지 않고 물리적 선형 메모리 범위에서 직접 데이터를 로드할 수 있게 해준다. 이로 인해 메모리가 절약되고 ROM에서 읽기 전용 세그먼트의 XIP(eXecute-In-Place)가 가능해진다.

  • cramfs 이미지의 메모리 위치는 시스템에 따라 다르다. 적절한 물리적 주소를 알아야 하며 MTD 디바이스를 구성해야 한다. 또한 해당 MTD 디바이스는 “point” 메서드를 구현하는 맵 드라이버를 지원해야 한다.

Cramfs Util 설치

```bash
sudo apt-get install cramfsprogs
```
  • Cramfs 폴더: /sdk/rootfs/cramfs
  • 해당 폴더에 작성한 어플리케이션 카피하여 이미지를 만듬

Cramfs 만들기

Terminal window
cd /sdk/rootfs/
sudo ./mkcramfs
  • 이후 ua.cramfs가 만들어지고, 이 파일을 /tftpboot나 업그레이드 폴더에 카피하여 업그레이드할 수 있다.

참고