PC 리눅스에 보면 하드 디스크에 루트 파일 시스템이 있게됩니다.
/usr/sbin/init를 먼저 호출하고 이후 기타 프로그램을 로딩하는 절차로 진행하게 됩니다.
/dev/mtdblock2를 yaffs 파일 시스템으로 포맷했다고 해서
/user/sbin/init 가 존재하게 되는 것은 아니겠죠.
즉, 동작할 수 있게 뭔가 기록을 해야 합니다.
PC에서 CDROM을 이용해서 하드디스크에 여러 프로그램을 설치하는 것처럼..
이러한 프로그램을 yaffs 이미지로 구현을 해야 합니다.
ramdisk howto 등의 문서(ext2 --> yaffs 부분을 고려해서 수정)하거나
yaffs로 구현된 루트 파일시스템을 구해보시는 것이 좋을 듯 합니다.
*. Linux 디렉토리 구현
*. 구현 디렉토리에 필수 라이브러리 포팅
*. 유틸리티 프로그램 포팅(shell, network 등)
*. 설정 파일 구현
등이 필요합니다.
에러메시지는 커널의 init/main.c::init_post() 중 다음 부분에서 출력됩니다.
if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
printk(KERN_WARNING "Warning: unable to open an initial console.\n");
yaffs 루트파일시스템에 /dev/console 과 /dev/ttyAMA0 를 만들어줬는지 확인해보세요.
/dev/console 은 major 5, minor 1
/dev/ttyAMA0 는 major 204, minor 64
busybox 를 사용하실 것 같은데...
init 이 inittab 을 사용하도록 설정하시고 /etc/inittab 도 다음처럼 만져줘야 합니다.
getty 를 사용하지 않는다면
ttyAMA0::askfirst:-/bin/sh
혹은
::askfirst:-/bin/sh
getty 를 사용한다면
::respawn:/sbin/getty 115200 ttyAMA0
혹은
::respawn:-/sbin/getty 115200 -
다른 곳에 이상이 없다면,
이정도만으로도 쉘 프롬프트까지는 잘 떨어져야 정상입니다.
udev 혹은 mdev 를 사용한다면 /dev/ttyAMA0 를 수작업으로 미리 만들어줄 필요는 없습니다.
단, udev 혹은 mdev 를 사용할 경우 /dev 는 write 가능이어야합니다.
yaffs를 사용하시니 크게 신경쓸 필요는 없고, CONFIG_CMDLINE 에 rw 를 추가해주는 것으로 족할 것 같습니다.
re:
루트 파일 시스템이 yaffs로 지정되어 있고
yaffs 파일 시스템내에 루트 파일이 구현되어 있지 않아 생기는 문제로 보입니다.
커널의 초기 명령 설정부분에서 현재 시스템에 설정되어 있는 루트 파일 시스템을
지정하여 재 컴파일 한 후 실행하시기 바랍니다.
방법 1 : 정확한 루트 파일 시스템 장치를 커널에 지정한다.
방법 2 : yaffs 에 루트 파일 시스템을 구현한다.
yaffs로 루트 파일 시스템을 구현 후 부트로더에서 쓰기 후 리부트
대부분의 임베디드 시스템이 램디스크로 구현되어 있으므로
방법 1을 추천합니다.
감사합니다.
반갑습니다.
답변 주셔서 감사합니다.
그런데, 제가 초보라서 잘 이해를 못하고 있습니다. ^^
cmdline 은 아래와 같이 입력했습니다.
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=yaffs2 console=ttyAMA0 mem=128M"
file system은 mkyaffs2image 를 이용해서 만들었습니다.
yaffs2를 file system으로 kernel boot 를 어떻게 해야 하는 것입니까?
좀더 조언 부탁드립니다.
반갑습니다.
re:
PC 리눅스에 보면 하드 디스크에 루트 파일 시스템이 있게됩니다.
/usr/sbin/init를 먼저 호출하고 이후 기타 프로그램을 로딩하는 절차로 진행하게 됩니다.
/dev/mtdblock2를 yaffs 파일 시스템으로 포맷했다고 해서
/user/sbin/init 가 존재하게 되는 것은 아니겠죠.
즉, 동작할 수 있게 뭔가 기록을 해야 합니다.
PC에서 CDROM을 이용해서 하드디스크에 여러 프로그램을 설치하는 것처럼..
이러한 프로그램을 yaffs 이미지로 구현을 해야 합니다.
ramdisk howto 등의 문서(ext2 --> yaffs 부분을 고려해서 수정)하거나
yaffs로 구현된 루트 파일시스템을 구해보시는 것이 좋을 듯 합니다.
*. Linux 디렉토리 구현
*. 구현 디렉토리에 필수 라이브러리 포팅
*. 유틸리티 프로그램 포팅(shell, network 등)
*. 설정 파일 구현
등이 필요합니다.
에러메시지는 커널의
에러메시지는 커널의 init/main.c::init_post() 중 다음 부분에서 출력됩니다.
yaffs 루트파일시스템에 /dev/console 과 /dev/ttyAMA0 를 만들어줬는지 확인해보세요.
/dev/console 은 major 5, minor 1
/dev/ttyAMA0 는 major 204, minor 64
busybox 를 사용하실 것 같은데...
init 이 inittab 을 사용하도록 설정하시고 /etc/inittab 도 다음처럼 만져줘야 합니다.
getty 를 사용하지 않는다면
ttyAMA0::askfirst:-/bin/sh
혹은
::askfirst:-/bin/sh
getty 를 사용한다면
::respawn:/sbin/getty 115200 ttyAMA0
혹은
::respawn:-/sbin/getty 115200 -
다른 곳에 이상이 없다면,
이정도만으로도 쉘 프롬프트까지는 잘 떨어져야 정상입니다.
udev 혹은 mdev 를 사용한다면 /dev/ttyAMA0 를 수작업으로 미리 만들어줄 필요는 없습니다.
단, udev 혹은 mdev 를 사용할 경우 /dev 는 write 가능이어야합니다.
yaffs를 사용하시니 크게 신경쓸 필요는 없고, CONFIG_CMDLINE 에 rw 를 추가해주는 것으로 족할 것 같습니다.
OTL
댓글 달기