Prologue

참고로, 이 글은 오래전에 쓴 글인데, 실패한 작업이기에 비공개로 놓아 두었다가, 똑같은 작업을 하고 있는 분들에게 조금이라도 도움(?)을 줄 수 있지 않을까라는 생각에 뒤늦게 공개 전환을 합니다.

BBB에 안드로이드 Pre-image를 쉽게 올려서 성공한 글은 바로 밑에 글을 참고하세요~~~!!!

2019/12/02 - [안드로이드 임베디드/Android for the BeagleBone Black] - Beaglebone Black에 Android 이미지 올리기

 

Beaglebone Black에 Android 이미지 올리기

비글본 블랙에 안드로이드 이미지를 올리겠다. 이 이미지는 http://bbbandroid.sourceforge.net/에서 다운 받을 수 있다. 참고로 첨부 파일로 공유한다. BBBAndroid: A custom Android OS for the BeagleBone Blac..

decdream08.tistory.com

 

BeagleBone Black 안드로이드 Pre-image 올리기 (실패...)

안드로이드 소스를 컴파일 하기 전에, 이미 만들어져 있는 안드로이드 Pre-image를 올려보려고 한다.

http://processors.wiki.ti.com/index.php/BeagleBone-Android-DevKit_Guide#Preparation_of_SD_card

 

BeagleBone-Android-DevKit Guide - Texas Instruments Wiki

What is BeagleBone The BeagleBone is a low-cost, high-expansion hardware-hacker focused BeagleBoard. It is a bare-bones BeagleBoard that acts as a USB or Ethernet connected expansion companion for your current BeagleBoard and BeagleBoard-xM or works stand-

processors.wiki.ti.com

위의 문서를 차근 차근 따라서하면 쉽게 이미지를 얻을 수 있다.

BeagleBone Black용 pre-image는 http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1_1/exports/BeagleBone.tar.gz 

를 통해서 얻을 수 있다.

그렇게 받은 압축 파일을 다음과 같이 압축해제 한 후, mkmmc-android.sh 파일을 실행하면 파티션을 3개로 만든 후 

  1. boot - Boot Images (Boot Loaders, Boot Script and Kernel)
  2. rootfs - File system (Android GingerBread 2.3.4)
  3. data - Media Clips (Audio, Video and Images)

위의 3가지 이미지를 각각의 파티션에 복사하는 일을 한다.

그에 대한 명령어는 다음과 같다.

$ tar -xzvf BeagleBone.tar.gz

$ cd BeagleBone

$ sudo ./mkmmc-android.sh /dev/sd<device>

여기서 <device>는 MicroSD 카드를 끼웠다가 뺐을때 "lsblk" 명령어를 써서 다른 부분을 체크하여 MicroSD에 맞는 device 이름을 넣어주면 된다.

참고로, 본인은 MicroSD 카드가 sdb로 인식이 되기 때문에 다음과 같이 명령어를 완성하여 입력하였다.

$ sudo ./mkmmc-android.sh /dev/sd<device>

그런데 mkmmc-android.sh 파일을 실행할때 다음과 같은 문제점이 발생한다는 것이다.

Error의 내용을 보니 파티션이 제대로 나눠지지 않아서 발생하는 문제이다.

참고로, TI 홈페이지에 본인과 동일한 문제점을 갖고 있던 사람이 Q&A를 한 내용이 있어서 발췌를 해본다.

BegleboardXM용 sh 파일을 사용하여 문제가 해결되었다고 하는데, 나는 왜 안될까? 아마도 SD 카드에 따라서 문제가 발생하는거 같다.

https://e2e.ti.com/support/legacy_forums/embedded/android/f/509/t/72783

 

[Resolved] mkmmc-android.sh invoking error to prerare SD card - Android Forum (Read-Only Archived) - Android (Read-Only) - TI E2

 

e2e.ti.com

그래서 해결점은 단 하나. 직접 MicroSD 카드 파티션을 3개로 나누는 것이다.

각 파티션의 용량은 각 파티션에 들어갈 파일 크기 보다 크게만 잡을 것이다.

다운로드 받은 후 압축을 해제했던 준비된 파일의 용량을 다음과 같이 확인했다.

그리고 이미지를 만들때 사용할 mkmmc-android.sh 파일의 아래 내용을 참고하면 각각의 파티션 sdb1/sdb2/sdb3에 어떤 파일이 적재될 것인지를 판단 할 수 있어서, 그것을 참고로 파티션의 크기를 결정한다.

위의 내용을 통해서 $S2가 Boot_Images/MLO, $S3가 Boot_Images/u-boot.... 임을 확인할 수 있다.

이것을 참고로 mkmmc-android.sh 파일의 하기 내용도 파악하기가 쉽다.

mkmmc-android.sh 파일을 분석하여 다음과 같이 정리가 가능하다.

  1. sdb1 - MLO / u-boot.img / uImage / uEnv.txt 그리고 START_HERE가 저장 되며 전체 용량은 4.7MB이다.
  2. sdb2 - $6(Filesystem/rootfs*)이 추가 되는데 tar jxvf로 압축을 풀고 추가가 된다. 압축해제 후 용량은 88.2MB이다.
  3. sdb3 - Media_Clips가 추가되며 전체 용량은 137.1MB이다.

Window에서 DISKPART를 이용하여 MicroSD 카드의 READONLY 속성을 해제하고 기존에 있던 Partition을 모두 지웠다.

그 다음 Ubuntu에서 CParted라는 프로그램을 이용하여 다음과 같이 MicroSD 카드의 파티션을 나누었다.

작업을 마친후 Terminal에서 lsblk 명령어를 이용하여 다시 한번 확인을 해본다.

정상적으로 MicroSD 내부가 sdb1/sdb2/sdb3... 로 파티션이 잘 나눠진것을 확인 할 수 있다.

이제 mkmmc-android.sh 파일에서 파티션을 나누는 부분과 파일 시스템을 만드는 부분을 삭제하고 실행해 본다.

 

다시 경로를 변경한 후에 sh 파일을 다음과 같이 실행을 하면 정상적(?)으로 copy가 되는 것을 확인 할 수 있다.

위의 umount error는 크게 신경쓰지 않아도 될것 같다.

lsblk 명령어를 이용하여 확인을 해보면 sdb1/sdb2/sdb3이 각각 /media/mskim/boot, /media/mskim/rootfs/, /media/mskim/data로 마운트 되어있다.

실제 해당 폴더로 이동하여 파일이 있는지를 다음과 같이 확인했고, 정상적으로 이미지가 다 들어 있는 것을 확인 했다.

자... 이제 운명의 시간이다.

Beaglebone Black에 MicroSD 카드를 삽입하여 확인을 할 것이다.

그 전에, UART 통신을 하기 위해서 케이블을 보드에 삽입하고, 그 다음 Micro HDMI 케이블을 보드와 TV에 연결을 했다.

MicroSD 카드를 삽입하고 나서 보드 전원을 공급하기 위해 Micro USB 케이블을 PC와 보드사이에 연결을 했다.

 

아니 이게 웬걸... 아무리 기다려도 정상적으로 부팅이 되지 않는다. 그동안 이 작업을 위해 많은 시간을 투자 했건만, 한마디로 실패다.

그나마 배운게 있다면 안드로이드 image는 아래와 같이 구성된다는거..

  1. boot - Boot Images (Boot Loaders, Boot Script and Kernel)
  2. rootfs - File system (Android GingerBread 2.3.4)
  3. data - Media Clips (Audio, Video and Images)

2번까지가 유의미한 것이고, 3번은 테스트를 위해 필요한 데이터들이라고 보면 되겠다.

무엇이 잘못된 것인지 시간이 있을 때 다시 한번 일련의 작업들을 찬찬히 들여다 봐야겠다.

이상한 점이 있다면 #1의 Boot쪽에 Kernel 사이즈가 너무 작다는 거...

 

- 끝.

+ Recent posts