summaryrefslogtreecommitdiff
path: root/android/images/armv8-juice-fvp-lsk/HOWTO_getsourceandbuild.txt
blob: 4b4fd20bbaa3b2cf3d6d15fedb25474ea76c04b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
h2. Prerequisites

To clone the sources you must be able to ssh to git.linaro.org and be part of the big-little-switcher-private group. Contact "Philip Colmer" <philip.colmer@linaro.org> for access requests.

h2. How to download and build Android sources

Recommended method to do a linaro android build is to use linaro android build script(linaro_android_build_cmds.sh). You can download this script from the Downloads section of the build page. Use this script to do a complete ARMv8 Android build for FVP models from scratch. If you prefer to do it manuaaly then follow the "Get the source" and "Build" instructions below.

h3. Get the source
<pre>
  $ sudo add-apt-repository ppa:linaro-maintainers/tools
  $ sudo apt-get update
  $ sudo apt-get install gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc openjdk-7-jdk openjdk-7-jre vim-common python-parted python-yaml wget uuid-dev
  $ curl "https://android.git.linaro.org/gitweb?p=tools/repo.git;a=blob_plain;f=repo;hb=refs/heads/stable" > repo
  $ chmod +x repo
  $ ./repo init -u ssh://$USER@linaro-private.git.linaro.org/srv/linaro-private.git.linaro.org/android/manifest.git -b linaro-android-14.12-release -m armv8-juice-lsk.xml
  $ sed -i "s/linaro-big-little-switcher-bot/$USER/" .repo/manifest.xml
  $ ./repo sync # this may take some time
</pre>

h3. Build
<pre>
  $ export CPUS=`grep -c processor /proc/cpuinfo`
  $ export TARGET_PRODUCT=juice
  $ export TARGET_BUILD_VARIANT=eng
  $ . build/envsetup.sh
  $ make -j${CPUS} boottarball systemtarball userdatatarball
</pre>

h2. Get linaro image tools

Run these commands to get all the dependencies for linaro-image-tools
<pre>
  $ sudo add-apt-repository ppa:linaro-maintainers/tools
  $ sudo apt-get update
  $ sudo apt-get install linaro-image-tools
</pre>
You can also use the tip of linaro-image-tools from http://git.linaro.org/infrastructure/linaro-image-tools.git

h2. How to run Juice images on FVP models

h3. Create mmc image to be used on ARM FVP Base AEMv8 models

Run linaro image tools

pre. $ linaro-android-media-create --image_file mmc.img --image_size 2000M --dev vexpress --system system.tar.bz2 --userdata userdata.tar.bz2 --boot boot.tar.bz2

If you're using tip of linaro image tools

pre. $ ./linaro-image-tools/linaro-android-media-create --image_file mmc.img --image_size 2000M --dev vexpress --system system.tar.bz2 --userdata userdata.tar.bz2 --boot boot.tar.bz2

h3. Extract the preboot files

pre. tar -jxvf boot.tar.bz2

h3. Setup the runtime environment

<pre>
  $ export ARMLMD_LICENSE_FILE="8224@localhost"
  $ ssh -L 8224:localhost:8224 -L 18224:localhost:18224 -N $USER@flexlm.linaro.org
</pre>

h3. Running the models (verified on FVP Base model build 5602)

<pre>
  $ cd boot
  $ /path/to/FVP_Base_AEMv8A-AEMv8A/models/Linux64_GCC-4.1/FVP_Base_AEMv8A-AEMv8A \
        -C pctl.startup=0.0.0.0 \
        -C bp.secure_memory=0 \
        -C cluster0.NUM_CORES=1 \
        -C cluster1.NUM_CORES=1 \
        -C cache_state_modelled=0 \
        -C bp.pl011_uart0.untimed_fifos=1 \
        -C bp.secureflashloader.fname=fvp_bl1.bin \
        -C bp.flashloader0.fname=fvp_fip.bin \
        -C bp.virtioblockdevice.image_path=../mmc.img
</pre>

h3. Console redirection

To redirect the console open a terminal and run

pre. telnet 127.0.0.1 5000

h3. Set UEFI configuration, update kernel/ramdisk path and bootargs

Stop the UEFI boot process and configure it for FVP models:

<pre>
$ telnet 127.0.0.1 -debug 5000 -e ^z
Telnet escape character is 'b'.
Telnet escape character is '^Z'.
Trying 127.0.0.1...
setsockopt (SO_DEBUG): Permission denied
Connected to 127.0.0.1.
Escape character is '^Z'.
  7 seconds
[1] Linaro disk image on virtio
[2] Shell
[3] Boot Manager
Start: 3
[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 2
[1] Linaro disk image on virtio
Update entry: 1
File path of the EFI Application or the kernel: kernel
Has FDT support? [y/n] y
Add an initrd: [y/n] y
File path of the initrd: ramdisk.img
Arguments to pass to the binary: console=ttyAMA0 earlyprintk=pl011,0x1c090000 amba-clcd.mode=VGA
Description for this new Entry: Linaro disk image on virtio
[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 5
[1] Linaro disk image on virtio
[2] Shell
[3] Boot Manager
Start: 1
   PEI   1122 ms
   DXE    259 ms
   BDS      8 ms
Total Time = 1390 ms

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.10.40-04438-g6a78140 (pundiramit@flying-dutchman) (gcc version 4.9 20140514 (prerelease) (GCC) ) #1 SMP Mon Jun 2 14:50:25 IST 2014
</pre>

h3. Black screen

The boot screen has been disabled to speed up booting. This means you may not see anything on the CLCD terminal for a while depending on the performance of the machine the model is running on. For example a first boot on a 2 GHz machine with 32 GB of RAM took 20 minutes. Subsequent boots should take approximately half the time to boot.

h3. Attach ADB

ADB on FVP Base models are supported over network. Follow the instructions here https://wiki.linaro.org/Internal/Projects/Juice/SetupNetworkingOnModelsUsingBridges to setup networking and use adb.

h2. How to run Juice images on Juno

h3. Plug in the USB stick and flash Juice images on that USB device

Run 'dmesg' and find out correct USB /dev node.

pre.  $ dmesg

Look for a line that looks like the following at the end of the log

pre. [288582.790722]  sdc: sdc1 sdc2 sdc3 sdc4 < sdc5 sdc6 >

WARNING: In the next step, make sure you use /dev/"whatever you see above".
         You can erase your hard drive with the wrong parameter.

Run linaro image tools

pre.  $ linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2

If you're using tip of linaro image tools

pre.  $ ./linaro-image-tools/linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2

Now unplug the USB stick and connect it to Juno and boot from it.

h3. Configure Juno boot time UEFI configuration

Copy Preboot firmwares (bl1.bin and fip.bin) from boot.tar.bz2 to <firmware_partition>/SOFTWARE/. Stop at UEFI prompt and change few parameters shown below

<pre>
Select USB device's boot partition to boot from while "Selecting the boot device".
Change kernel in UEFI to "kernel" in the boot partition
Change ramdisk in UEFI to "ramdisk.img" in the boot partition
Change  bootargs to "console=ttyAMA0,115200 earlyprintk=pl011,0x7ff80000"
</pre>
Note: There is a bug in UEFI where you won't see USB disk partitions while selecting the boot device. You have to press ESCAPE at "Select the boot device" menu item and then continue.

It should get your Juno board up and running.