summaryrefslogtreecommitdiffstats
path: root/README-AGL.md
blob: bb6e8aa637776c745492401569ad460e41aaf443 (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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324<
a> 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436
?README-AGL.md: The Automotive Grade Linux Distribution
======================================================

AGL is creating an automotive specific Linux distribution (AGL UCB)
that unifies the software that has been written in a number of places already,
such as GENIVI and Tizen IVI.

The layer 'meta-agl' provides a minimal set of software
to boot system of AGL Distribution. 'meta-agl' is the minimal
core which is used build AGL profiles on top of it.

The reference UI is part of 'meta-agl-demo'.

Additional components like the security framework are part of 'meta-agl-extra'.

The AGL community appreciates feedback, ideas, suggestion, bugs and
documentation just as much as code. Please join the irc conversation
at the #automotive channel on irc.freenode.net and our mailing list.

For infomation for subscribing to the mailing list
    [automotive-discussions](http://lists.linuxfoundation.org/mailman/listinfo/automotive-discussions)
For information about AGL Distribution, see the
    [AGL Distribution](https://wiki.automotivelinux.org/agl-distro)
For information abount Getting started with AGL
    [here](https://wiki.automotivelinux.org/start/getting-started)
For information about contributing to the AGL Distro
    [here](https://wiki.automotivelinux.org/agl-distro/contributing)

Quick start guide
-----------------

The latest version is available at [AGL wiki](https://wiki.automotivelinux.org/agl-distro/source-code) for the following targets:
* [QEMU](https://wiki.automotivelinux.org/agl-distro/source-code)
* [Renesas Porter board](https://wiki.automotivelinux.org/start/building_for_the_renesas_r-car_m2)
* [Raspberry Pi 2/3](https://wiki.automotivelinux.org/agl-distro/agl-raspberrypi)

To build an image from 'meta-agl'

1. Prepare repo:
     >      $ mkdir ~/bin
     >      $ export PATH=~/bin:$PATH
     >      $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
     >      $ chmod a+x ~/bin/repo

2. Get all layers:
     >      $ repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
     >      $ repo sync

3. Check available targets and extensions, select target machine:
     >      $ source meta-agl/scripts/aglsetup.sh -h
     >      $ source meta-agl/scripts/aglsetup.sh -m porter

4. Build agl-image-ivi
     >      $ bitbake agl-image-ivi

To build the agl-demo-platform (as demo'ed @ALS) replace 3. and 4. with:
3. Check available targets and extensions, select target machine:
     >      $ source meta-agl/scripts/aglsetup.sh -h
     >      $ source meta-agl/scripts/aglsetup.sh -m porter agl-demo [agl-appfw-smack] [agl-devel] [agl-netboot]

4. Build agl-demo-platform
     >      $ bitbake agl-demo-platform
Note: this uses more layers and not only meta-agl

AGL Layers and dependencies:
----------------------------
Check the README.md of the respective layers:
- meta-agl              (= core, no UI)
- meta-agl-demo    (= reference UI)
- meta-agl-extra     (= extra components)

In addition, the reference hardware (Renesas R-Car Gen2 / porter) has this dependency:

URI: https://gerrit.automotivelinux.org/gerrit/AGL/meta-renesas
> branch:   agl-1.0-bsp-1.8.0
> tested revision: 82611ccadef36ab0b8a6fd6fb1cf055e115f1ef5


Supported Machines
------------------

Reference hardware:

* QEMU (x86-64) - emulated machine: qemux86-64
* Renesas R-Car Gen2 (R-Car M2) - machine: porter

Community contributed hardware:

* See: https://wiki.automotivelinux.org/agl-distro#supported_hardware


Supported Target of bitbake
---------------------------

meta-agl:

* `agl-image-ivi` The baseline image of AGL Distributions (console only)

* `agl-image-minimal` For internal use to develop distribution (experimental)
* `agl-image-weston`  For internal use to develop distribution (experimental)

meta-agl-demo:

* `agl-demo-platform` The demo/reference image (with graphical UI)

Run this command for a full list of machines, features and targets:
     >       $ source ./meta-agl/scripts/aglsetup.sh -h


Supposed Directory Tree of Layers to build
-------------------------------------------

     >      $ repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
     >      $ repo sync
     >      $ tree -L 1
	.
	|-- meta-agl
	|-- meta-agl-demo
	|-- meta-agl-devel
	|-- meta-agl-extra
	|-- meta-amb
	|-- meta-fsl-arm
	|-- meta-fsl-arm-extra
	|-- meta-intel
	|-- meta-intel-iot-security
	|-- meta-openembedded
	|-- meta-qcom
	|-- meta-qt5
	|-- meta-raspberrypi
	|-- meta-renesas
	|-- meta-rust
	|-- meta-security-isafw
	|-- meta-ti
	`-- poky
	18 directories, 0 files


Build a QEMU image
------------------

You can build a QEMU image using the following steps:

(latest version here: https://wiki.automotivelinux.org/agl-distro/source-code)
To build an image from 'meta-agl'

1. Prepare repo:
     >      $ mkdir ~/bin
     >      $ export PATH=~/bin:$PATH
     >      $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
     >      $ chmod a+x ~/bin/repo

2. Get all layers:
     >      $ repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
     >      $ repo sync

3. Check available targets and extensions, select target machine:
     >      $ source meta-agl/scripts/aglsetup.sh -h
     >      $ source meta-agl/scripts/aglsetup.sh -m qemux86-64

  Alternatively, to enable the reference UI feature ('agl-demo'):
     >      $ source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-demo

  Alternatively, to also enable also the security framework ('agl-appfw-smack'):
     >      $ source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-demo agl agl-appfw-smack

  Alternatively, to also enable debugging tools ('agl-devel') and the network-boot (nbd) capabilities ('agl-netboot'):
     >      $ source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-demo agl agl-appfw-smack agl-devel agl-netboot

4. Build agl-image-ivi
     >      $ bitbake agl-image-ivi

  or alternatively, if you enabled the 'agl-demo' feature:
     >      $ bitbake agl-demo-platform

 - If you want to run QEMU directly as VM in Virtual Box or your other favorite VM software then add this line to your "conf/local.conf" file.
     >      IMAGE_FSTYPES += "vmdk"

5. Run in the emulator
     >      $ runqemu agl-image-ivi qemux86-64
     >      or
     >      $ runqemu agl-demo-platform qemux86-64

   For a large screen:
     >      $ runqemu agl-image-ivi qemux86-64 bootparams="uvesafb.mode_option=1280x720-32"

   To extend the amount of memory, add to runqemu:
     qemuparams="-m 512"
     >      $ runqemu agl-image-ivi qemux86-64 qemuparame="-m 512" bootparams="uvesafb.mode_option=1280x720-32"


   To separate console from VGA screen (to avoid corrupt screen while booting),
   add to runqemu:
     serial
     >      $ runqemu agl-image-ivi qemux86-64 bootparams="uvesafb.mode_option=1280x720-32" serial

	**Or use the virtual disk in Virtual Box from this location:**
	> tmp/deploy/images/qemux86-64/agl-demo-platform-qemux86-64.vmdk

6.  Some weston samples are available from weston terminal (click top left icon).
   Check the folder `/opt/AGL/ALS2016`.

Build a R-Car M2 (porter) image
-------------------------------

### Software setup

NOTE: You will need to download the matching binary driver package from renesas.
      As of this writing, the version from 20151228.
      The main URL to retrieve these is:

 -   https://www.renesas.com/en-eu/solutions/automotive/rcar-demoboard.html

      As of this writing, the necessary libary and driver packages linked to
      by above site are:
      - The subpage for the library is:
	      - https://www.renesas.com/en-eu/software/D3017410.html (registration/login required)

      - The sub-page for the driver is:
	      - https://www.renesas.com/en-eu/media/secret/solutions/automotive/rcar-demoboard/R-Car_Series_Evaluation_Software_Package_of_Linux_Drivers-20151228.zip

      !!! The files need to be in `${HOME}/Downloads` ( `$XDG_DOWNLOAD_DIR` ) !!!

#### Getting Source Code and Build image

(latest version here: https://wiki.automotivelinux.org/agl-distro/source-code)
To build an image from 'meta-agl' only:

1. Prepare repo:
     >      $ mkdir ~/bin
     >      $ export PATH=~/bin:$PATH
     >      $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
     >      $ chmod a+x ~/bin/repo

2. Get all layers:
     >      $ repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
     >      $ repo sync

3. Check available targets and extensions, select target machine:
     >      $ source meta-agl/scripts/aglsetup.sh -h
     >      $ source meta-agl/scripts/aglsetup.sh -m porter

  Alternatively, to enable the reference UI:
     >      $ source meta-agl/scripts/aglsetup.sh -m porter agl-demo

  Alternatively, to also enable also the security framework:
     >      $ source meta-agl/scripts/aglsetup.sh -m porter agl-demo agl agl-appfw-smack

  Alternatively, to also enable debugging tools and the network-boot (nbd) capabilities:
     >      $ source meta-agl/scripts/aglsetup.sh -m porter agl-demo agl agl-appfw-smack agl-devel agl-netboot

4. (optional) edit conf/local.conf   )* see below
     >        $ vi conf/local.conf

5. Build agl-image-ivi
     >        $ bitbake agl-image-ivi

  or alternatively, if you enabled the 'agl-demo' feature:
     >      $ bitbake agl-demo-platform


)* :

 4 .  Optional edits to conf/local.conf

 *  If you want to use multimedia accelerations, uncomment
    manually 4 `IMAGE_INSTALL_append_porter` in conf/local.conf.

    >     #IMAGE_INSTALL_append_porter = " \
    >     #    gstreamer1.0-plugins-bad-waylandsink \
    >     #    "
    >     #IMAGE_INSTALL_append_porter = " \
    >     #    gstreamer1.0-plugins-base-videorate \
    >     ...
    >     #"
    >     #IMAGE_INSTALL_append_porter = " \
    >     #    libegl libegl-dev libgbm-dev \
    >     ...
    >     #    "
    >     #IMAGE_INSTALL_append_porter = " \
    >     #    packagegroup-rcar-gen2-multimedia \
    >     ...
    >     #    "

* Also it is needed to uncomment this:
    >     #MACHINE_FEATURES_append = " multimedia"

   This `multimedia` MACHINE_FEATURES enables the meta-renesas's specific multimedia configuration.
   The version of GStreamer1.0 which AGL distro will use is changed
   to 1.2.3 (meta-renesas prefers it) over 1.4.1 (meta-agl default)
   by this switch.

* If you want to install various Qt5 examples, add below
   configuration to your local.conf.
>      IMAGE_INSTALL_append = " \
>            packagegroup-agl-demo-qt-examples \
>        "
>        PACKAGECONFIG_append_pn-qtbase = " examples"
>
>  IMPORTANT NOTE:
>        To run examples with wayland-egl plugin,
>        use ``LD_PRELOAD=/usr/lib/libEGL.so <command>``.
>        If not, programs should not launch by error,
>        'EGL not available'.


### Deployment (SDCARD)

#### Instructions on the host

1. Format SD-Card and then, create single EXT4 partition on it.

2. Mount the SD-Card, for example `/media/$SDCARD_LABEL`.

3. Copy AGL root file system onto the SD-Card
   1. Go to build directory
         >     $ cd $AGL_TOP/build/tmp/deploy/images/porter

   2. Extract the root file system into the SD-Card
         >     $ sudo tar --extract --numeric-owner --preserve-permissions --preserve-order \
         >                --totals --directory=/media/$SDCARD_LABEL --file=agl-image-ivi-porter.tar.bz2

   3. Copy kernel and DTB into the `/boot` of the SD-Card
         >     $ sudo cp uImage uImage-r8a7791-porter.dtb /media/$SDCARD_LABEL/boot

4. After the copy finished, unmount SD-Card and insert it into the SD-Card slot of the porter board.

#### Instructions on the target

NOTE: There is details about porter board [here](http://elinux.org/R-Car/Boards/Porter).

NOTE: To boot weston on porter board, we need keyboard and mouse. (USB2.0 can be use for this)

##### Change U-Boot parameters to boot from SD card

1. Power up the board and, using your preferred terminal emulator, stop the board's autoboot by hitting any key.

  ``Debug serial settings are 38400 8N1. Any standard terminal emulator program can be used.**

2. Set the follow environment variables and save them
>     => setenv bootargs_console console=ttySC6,${baudrate}
>     => setenv bootargs_video vmalloc=384M video=HDMI-A-1:1024x768-32@60
>     => setenv bootcmd_sd 'ext4load mmc 0:1 0x40007fc0 boot/uImage;ext4load mmc 0:1 0x40f00000 boot/uImage-r8a7791-porter.dtb'
>     => setenv bootcmd 'setenv bootargs ${bootargs_console} ${bootargs_video} root=/dev/mmcblk0p1 rw rootfstype=ext4;run bootcmd_sd;bootm 0x40007fc0 - 0x40f00000'
>     => saveenv

##### Boot from SD card

1. After board reset, U-Boot is started and after a countdown, ...
   Linux boot message should be displayed. Please wait a moment.

2. Then weston is booted automatically, and weston-terminal appears.

3. Have fun! :)

### Deployment (TFTP/NFS)

NOTE: These instructions are based on Embedded Linux Wiki, [here](http://www.elinux.org/R-Car/Boards/Yocto#Loading_kernel_via_TFTP_and_rootfs_via_NFS). And a Debian (wheezy, ip: 192.168.30.70) is used as the host for this instructions.

#### Instructions on the host
1. Setup a TFTP server
   1. Install necessary packages
         >     $ sudo apt-get install tftp tftpd-hpa

   2. Go to build directory, and copy kernel and DTB into TFTP server root (default server dir: /srv/tftp)
         >     $cd  $AGL_TOP/build/tmp/deploy/images/porter
         >     $ sudo cp uImage uImage-r8a7791-porter.dtb /srv/tftp

   3. Verify TFTP server is working
         >     $ ls uImage
           ls: cannot access uImage: No such file or directory

         >     $ cd /tmp/
         >     $ tftp 192.168.30.70
         >     tftp> get uImage
         >     Received 3583604 bytes in 0.2 seconds
         >     tftp> q
         >     $ ls uImage
         >     uImage

2. set NFS server
   1. Install necessary packages
         >     $ sudo apt-get install nfs-kernel-server nfs-common

   2. Go to build directory, and extract the root file system into a dedicated directory (here we use /nfs/porter)
         >     $ cd $AGL_TOP/build/tmp/deploy/images/porter
         >     $ sudo mkdir -p /nfs/porter
         >      $ sudo tar --extract --numeric-owner --preserve-permissions --preserve-order \
         >       --totals --directory=/nfs/porter --file=agl-demo-platform-porter.tar.bz2

   3. Edit /etc/exports
         >     $ sudo vi /etc/exports
         Add
         >
         >     /nfs/porter	*(rw,no_subtree_check,sync,no_root_squash,no_all_squash)
         >
	Save the file and exit.

   4. Restart nfs service
         >     $ sudo service nfs-kernel-server restart

   5. Verify NFS server is working
         >     $ sudo mount -t nfs 192.168.30.70:/nfs/porter /tmp/
         >     $ ls /tmp
         >     bin  boot  dev  etc  home  lib  media  mnt  proc  run  sbin  sys  tmp  usr  var

#### Instructions on the target board

NOTE: There is details about porter board [here](http://elinux.org/R-Car/Boards/Porter).

NOTE: To boot weston on porter board, we need keyboard and mouse. (USB2.0 can be use for this)

##### Change U-Boot parameters to boot from TFTP/NFS

1. Power up the board and, using your preferred terminal emulator, stop the board's autoboot by hitting any key.

  > Debug serial settings are 38400 8N1. Any standard terminal emulator program can be used.

2. Set the follow environment variables and save them
>     => setenv ipaddr <board-ip>
>     => setenv serverip <host-ip>
>     => setenv bootargs_console console=ttySC6,${baudrate}
>     => setenv bootargs_video vmalloc=384M video=HDMI-A-1:1024x768-32@60
>     => setenv bootcmd_net 'tftp 0x40007fc0 uImage; tftp 0x40f00000 uImage-r8a7791-porter.dtb'
>     => setenv bootcmd 'setenv bootargs ${bootargs_console} ${bootargs_video} ip=${ipaddr} root=/dev/nfs nfsroot=${serverip}:/nfs/porter,vers=3;run bootcmd_net;bootm 0x40007fc0 - 0x40f00000'
>     => saveenv

    Replace <board-ip> with a proper IP address for the board, like 192.168.30.60.
    Replace <host-ip> with the IP address of the host, here we use 192.168.30.70.

##### Boot from TFTP/NFS

1. After board reset, U-Boot is started and after a countdown, ...
   Linux boot message should be displayed. Please wait a moment.
2. Then weston is booted automatically, and weston-terminal appears.
3. Have fun! :)