리눅스 노트정리/임베디드 리눅스

리눅스 컴퓨터에서 임베디드 보드의 NAND Flash로 파일 굽기

차케요 2018. 12. 26. 11:23

리눅스 컴퓨터에서 임베디드 보드의 NAND Flash로 파일 굽기


지난 글에서 리눅스 컴퓨터에 있는 uboot, kernel, rootfs을 보드로 옮기기 위한 tftp 네트워크 IP 설정 등 연결 준비를 해봤었는데...


tftp 설정


이제 uboot, kernel, rootfs 등을 보드의 NAND Flash로 구워보자.


작업에 앞서 현재 가지고 놀고 있는 보드에 이 녀석들이 들어가는 NAND 주소의 위치가 각각 다르기 때문에 정리를 하고 넘어갈 필요가 있을 거 같다.


Uboot (0x00000000~0x0003FFFF) / kernel(0x00040000~0x003FFFFF) / cramfs(0x00400000~0x007FFFFF) / ubifs(0x00800000~0x3FFFFFFF)


이 과정은 우선 PC에 있는 파일을 보드의 메모리로 옮긴다음 NAND의 공간을 지우고 각각의 위치에 쓰기를 해줘야 한다.

 

 

첫 번째로 uboot 파일을 보드의 메모리로 옮긴다음 NAND에 쓰고 부팅모드를 SD가 아닌 보드로 해보자.



우선 현재 환경을 확인해보는데 파일은 메모리의 c0008000으로 이동이 되는구나. 그리고 각각의 ip 설정을 한 후 ping 테스트까지 해봤으니 u-boot.bin 파일을 보드의 메모리로 옮겨본다.



[tftp c0008000 u-boot.bin]명령으로 PC의 u-boot.bin 파일을 보드의 메모리 c0008000으로 옮긴 상태이며 그 파일의 크기는 38000hex이다. 이렇게 옮겨진 파일을 NAND에 쓰기 위해서는 먼저 NAND의 해당 주소를 지워줘야 한다. u-boot.bin은 0x0의 위치에 자리를 잡을 것이므로 다음과 같이 먼저 해당 자리(0x0)를 파일의 크기만큼(40000) 지운다.



그리고 이 자리에 c0008000에 있는 u-boot.bin 파일을 쓴다.



쓰기는 nand wirte로 하며 메모리 주소 c0008000에 있는 파일을 0번지 부터 40000의 크기만큼 쓴다는 의미이다. 이렇게 u-boot.bin 파일을 보드의 NAND에 쓰기 했으니 이제 SD카드의 도움 없이 보드로 바로 부팅해도 부트로더를 시작하게 된다.


같은 방법으로 zImage와 root_mkfs.cramfs 파일을 c0008000으로 복사를 한 후 NAND의 각각의 자리에 쓰기를 하면 된다.


이렇게 PC에서 준비한 파일들을 보드의 메모리로 가져온 후 NAND의 각각의 위치에 쓰기를 한 후 보드의 부팅모드를 NAND로 변경을 하고...



보드를 재시작하면 SD카드의 도움 없이도 부팅이 된다.


이렇게 해서 오늘은 PC에 준비한 파일들을 보드로 옮겨와서 NAND에 쓰는 과정을 정리해봤다.