본문 바로가기

Programming

Mounting / Unmounting ASCII cpio archive in Linux

QEMU initrd Linux rev 1.0 ext2 filesystem data 와 같은 ext 등의 파일시스템 이미지 외에도 ASCII CPIO archive 를 gzip 한 포맷이 있다.  이 경우 마운트하고 수정하고 언마운트하려면 아래와같이 cpio 와 gunzip 2개를 이용하면 된다...  파일시스템 상세적인 부분은 잘 모르겠지만 아무튼 initrd 에 지정할수있는 램디스크의 포맷은 여러가지인것 같다.  ext 같은 파일시스템이미지의 경우 단순하게 mount -o loop ramdisk.img /mnt 이런식으로 처리가능한데 CPIO 의 경우는 아래처럼 해주면된다.

gunzip -c rootfs.img | cpio -i

이렇게 하면 현재 디렉토리내에 CPIO 내부 파일들이 전부 풀린다

... 파일추가수정삭제 등등 해주고 ...

파일들이 존재하는 디렉토리에 가서 아래처럼 하면 현재디렉토리부터 하위디렉토리까지 싹다묶어서 다시 gzip CPIO 이미지로 만든다.

find . | cpio -o -H newc | gzip > rootfs.img

아, 그리고 참고로 QEMU 에서 아래와 같은식으로 커맨드라인을 넘겨줄때 램디스크속성 ro, rw 를 지정할 수 있다.

qemu-system-i386 -kernel bzImage -initrd ramdisk.img -append "root=/dev/ram rw init=bin/ash"

안드로이드 파일시스템 마운팅할때도 비슷한식으로 ro, rw 파일시스템 속성을 적용할수있다.


그리고 바닐라커널을 컴파일해서 QEMU 로 로딩할때 램디스크를 인식하게하려면 커널 컴파일옵션에서 해당부분들을 모두 설정해줘야한다. 디폴트 옵션상에서는 ramdisk 랑 몇몇 파일시스템을 지원하지 않게 설정되어있고, 또한 램디스크의 기본사이즈가 너무작게(4메가) 로 설정되어있어서 순정 바닐라커널 그대로 make menuconfig 해서 컴파일하면 램디스크가 제대로 인식안될 가능성이 매우크다 또한 QEMU 의 커널옵션에서 tty0, ttyAMA0 이런부분은 graphic 를 주느냐 아니냐 등과 관련된다. 화면이 안나오는게 부팅이 안되는게아니라 tty 를 잘못설정해줘서 그러는경우가 있다.

'Programming' 카테고리의 다른 글

python distorm3 1분요약  (0) 2014.09.30
CVE-2014-3153 on x86 Ubuntu 13.04  (0) 2014.07.24
Building Android QEMU from source  (0) 2014.06.19
QEMU monitor console  (0) 2014.06.16
OS Kernel Debugging with VMWare  (0) 2014.06.10