본문 바로가기

Tizen

[Tizen Porting] #8 Kernel Boot Error 수정

#8 Kernel Boot Error 수정



이번 포스팅에서는 이전에 커널 이미지를 올리고 부팅하는 과정에서 커널 부팅이 멈추면서 진행되지 않았던 문제에 대해 해결 방안을 찾아보도록 하겠습니다.



이전 포스팅에 올렸던 kernel 부팅이 멈추는 현상입니다. 


조금 더 위로 올라가서 #0: Odroid-X2가 찍힌 부분 바로 아래에 보시면 다음과 같은 메세지를 확인할 수 있습니다.


VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6




root device가 null이기 때문에 경로가 잘못되었거나 파일이 없어서 또는 루트 파일 시스템을 찾기 전에 이미 진행을 해버려서인 것으로 보입니다.


먼저 일단 커널이 루트 파일 시스템을 찾으면 진행하도록 하기 위해 bootargs에 rootwait 옵션을 추가하도록 하겠습니다.


보드를 재부팅하여 u-boot 콘솔로 진입하도록 합시다.


재부팅을 하려 했더니.. u-boot 영역이 망가졌는지 부팅이 안됩니다. 리눅스에서는 마운트 할 수 없다는 에러가 뜨네요. 그래서 윈도우환경에서 SDFormmatter 프로그램으로 포맷하고 다시 리눅스로 가져와서 파티션 나누고 u-boot를 올린다음 실행하였습니다.


bootargs에 rootwait를 추가적으로 입력해주고 저장한 뒤 부팅 시킵니다.


Exynos4412 # setenv bootargs "console=tty1 console=ttySAC1 115200n8 rootwait"

Exynos4412 # saveenv

Exynos4412 # boot




waiting for root device ... 라는 메세지를 확인할 수 있습니다. 이후에 커널 부팅이 멈춰있어서 결국에는 root device를 찾지 못하는 것 같아 보입니다.


그렇다면 root device의 경로가 잘못되었거나 root device 경로에 존재해야할 파일이 없는 경우입니다. 일단 경로가 잘못되어 파일을 못찾는 경우에 대해서 먼저 생각해보도록 하겠습니다.


bootargs에서 root device의 경로를 지정하는 옵션이 있습니다. 판다보드에 타이젠을 포팅했던 타이젠 위키(https://wiki.tizen.org/wiki/Tizen_IVI_Getting_Started_Guide_For_PandaBoard)에 가보시면 root 경로를 mmcblk0p2로 지정해주는 것을 확인할 수 있습니다. mmcblk0는 sd카드를 의미하고 뒤의 p1, p2, p3, p4는 파티션번호 같아 보입니다.


대게 파티션1의 경우 boot영역으로 사용하기 때문에 파티션2번으로 지정해주는 것 같습니다.

그렇다면 저도 판다보드와 동일하게 root=/dev/mmcblk0p2 옵션을 추가해서 부팅해보도록 하겠습니다.


Exynos4412 # setenv bootargs "console=tty1 console=ttySAC1 115200n8 root=/dev/mmcblk0p2 rootwait"

Exynos4412 # saveenv

Exynos4412 # boot




예상대로 몇줄 더 나갑니다. mmcblk0: p1 p2 p3 p4 부분에서 sd카드의 모든 파티션 정보를 찾은 것처럼 보입니다. 중간에 보시면 다음 메세지들을 확인할 수 있습니다. 


EXT4-fs (mmcblk0p2): INFO: recovery required on readonly filesystem

EXT4-fs (mmcblk0p2): write access will be enabled during recovery

...

Kernel panic - not syncing: No init found. Try passing init= option to kernel.


두가지가 크게 보입니다. mmcblk0p2가 readonly 파일시스템으로 구성되어있어서 쓰기 접근이 가능해야 한다고 합니다.

Kernel panic 메세지에는 init 파일을 찾을수 없다고 나오네요. init= 옵션을 주라고 쓰여있습니다.


먼저 readonly로 설정되어있는 파일시스템에 write 옵션을 추가적으로 주어서 부팅해보도록 하겠습니다.

u-boot 콘솔로 다시 진입합니다. 그리고 다음 명령어를 추가해줍시다.


Exynos4412 # setenv bootargs "console=tty1 console=ttySAC1 115200n8 root=/dev/mmcblk0p2 rootwait rw"

Exynos4412 # saveenv

Exynos4412 # boot


위의 rw 옵션이 Read/Write를 허용하는 옵션입니다. 기본적으로 ro(Read Only) 옵션이 걸려있는것 같네요.


부팅 결과는 다음과 같습니다.



이전에 보였던 EXT4 파일시스템은 정상적으로 마운트를 한 것으로 보입니다.


하지만 여전히 init 옵션이 설정되어있지 않아 kernel panic이 뜨는 것을 확인할 수 있습니다.


이것저것 알아본 결과로는 VFS(Vitual File System)으로 root 파일 시스템을 마운트 시도하게 되는데 root 파일 시스템이 현재 없기 때문에 이후에 에러가 발생한다고 합니다.


다음 포스팅에서는 root 파일시스템을 포함하고 있는 Tizen플랫폼을 커널 위에 올려보도록 하겠습니다.