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 사이즈가 너무 작다는 거...

 

- 끝.

하기와 같이 지난 번에 Window10에서 ADB를 이용하여 BeagleBone Black(BBB)에 PacktHAL 파일들을 넣었다.

2019/12/12 - [안드로이드 임베디드/Android for the BeagleBone Black] - Window10에서 ADB Tool을 이용하여 PacktHAL files을 동작하는 Beaglebone Black(BBB)에 넣기

 

Window10에서 ADB Tool을 이용하여 PacktHAL files을 동작하는 Beaglebone Black(BBB)에 넣기

지난번에 Ubuntu에 ADB를 인스톨했지만, 웬지 아직까지는 Window가 편한지라 Window를 이용해서 진행을 해보았다. Android Debug Bidge를 이용하여 현재 동작 중인 Beaglebone Black(BBB)에 PacktHAL files을 넣을..

decdream08.tistory.com

정상적으로 PacktHAL을 BBB에 넣었다면, ADB Shell을 이용하여 PacktHAL에 의해 output으로 설정된 GPIO30을 컨트롤 할 수 있다.

아래 BeagleBoard Manual(https://cdn-shop.adafruit.com/datasheets/BBB_SRM.pdf)에서 발췌한 P9 connector에 대한 자료에서 보듯이, GPIO30은 BBB 보드의 P9 connector에서 11번 핀이다(P9.11).

이제, Eclipse에서 사용하는 ADB.exe가 위치한 경로를 파악한다. 본인의 경우는 경로가 D:\02_Dev_Tools\01_Android\eclipse_SDK\platform-tools이다.

윈도우에서 CMD 창을 열고 ADB.exe가 위치한 경로로 이동한 후, BBB를 USB케이블로 PC와 연결한다.

BBB가 정상 부팅이 된 후, 아까 열었던 윈도우 CMD 창에서 하기와 같이 adb devices를 입력하여 현재 연결된 Android 기기를 검색한다.

BBB가 정상적으로 연결되었다면, 위의 그림과 같이 adb devices 명령어로 BBB가 검색이 될 것이다.

이제 준비는 마쳤고, 다음과 같은 순서로 명령어를 입력하면 된다.

   1. adb shell 을 입력한다.

$adb shell

   2. BBB의 gpio30 폴더로 이동한다.


root@beagleboneblack:/ # cd /sys/class/gpio/gpio30

3. echo CMD를 이용하여 강제로 GPIO30을 1(High)로 셋팅 한 후, 0(Low)로 셋팅 한다.

root@beagleboneblack:/ # echo 1 > value

root@beagleboneblack:/ # echo 0 > value

실제로 P9 커넥터의 11번 핀(GPIO30)이 default value인 Low에서 High로 셋팅되고, 그다음 다시 Low로 가는 것을 오실로스코프로 확인할 수 있었다.

참고로, PacktHAL에 의해 GPIO31은 input으로 설정이 되어 있으며, 다음 명령어를 사용하면 GPIO31의 값을 읽을 수 있다.

root@beagleboneblack:/ # cat value

 

- 끝.

지난번에 Ubuntu에 ADB를 인스톨했지만, 웬지 아직까지는 Window가 편한지라 Window를 이용해서 진행을 해보았다.

Android Debug Bidge를 이용하여 현재 동작 중인 Beaglebone Black(BBB)에 PacktHAL files을 넣을 수 있다.

참고로 본인은 Window10에서 이 작업을 실시하였다.

먼저 Eclipse에서 사용하는 ADB.exe가 위치한 경로를 파악한다. 본인의 경우는 경로가 D:\02_Dev_Tools\01_Android\eclipse_SDK\platform-tools이다.

윈도우에서 CMD 창을 열고 ADB.exe가 위치한 경로로 이동한 후, BBB를 USB케이블로 PC와 연결한다.

BBB가 정상 부팅이 된 후, 아까 열었던 윈도우 CMD 창에서 하기와 같이 adb devices를 입력하여 현재 연결된 Android 기기를 검색한다.

BBB가 정상적으로 연결되었다면, 위의 그림과 같이 adb devices 명령어로 BBB가 검색이 될 것이다.

이제 준비는 마쳤고, ADB Tool을 이용하여 PacktHAL 파일을 넣기위해 다음과 같은 명령어들을 하나씩 실행한다.

1. ADB를 통해 BBB의 Android 내부 Shell을 이용하여, BBB Android root filesystems을 read-only에서 read-write로 remount 한다.

$ adb shell

root@beagleboneblack:/ # mount -o rw,remount rootfs /

root@beagleboneblack:/ # exit

 

2. BBB의 Android root filesystem에 필요한 파일(BB-PACKTPUB-00A0.dtbo를 system/vendor/firmware에 그리고 init.genericam33xx(flatteneddevicetr.rc 파일은 root에)들을 넣는다.

본인의 경우 두 파일 모두 C:\Temp에 위치 시켰으므로 다음과 같이 명령어를 입력하였다.

$ adb push D:\Temp\BB-PACKTPUB-00A0.dtbo /system/vendor/firmware

$ adb push D:\Temp\init.genericam33xx(flatteneddevicetr.rc /

$ adb shell su -c "chmod 750 /init.genericam33xx*.rc"

3. BBB의 Android root filesystem안의 Shell로 Sync를 하고 read-only로 remount 해준다.

$ adb shell

root@beagleboneblack:/ # sync

root@beagleboneblack:/ # mount -o ro,remount rootfs /

root@beagleboneblack:/ # exit

이상으로 Android Debug Bidge(ADB)를 이용하여 현재 동작 중인 Beaglebone Black(BBB)에 PacktHAL files을 넣는 방법을 확인했다.

+ Recent posts