Support GStreamer1.0 with H/W acceleration on R-Car2 Porter
[AGL/meta-agl-demo.git] / README.md
1 meta-agl-demo, the Yocto layer for DEMO platform of Automotive Grade Linux
2 ==========================================================================
3
4 The yocto layer 'meta-agl-demo' provides a demo platform and applications
5 of AGL Distribution.
6
7 AGL is creating an automotive specific Linux distribution that unifies
8 the software that has been written in a number of places already,
9 such as GENIVI and Tizen IVI.
10
11 The AGL community appreciates feedback, ideas, suggestion, bugs and
12 documentation just as much as code. Please join the irc conversation
13 at the #automotive channel on irc.freenode.net and our mailing list.
14
15 For infomation for subscribing to the mailing list
16     [automotive-discussions](http://lists.linuxfoundation.org/mailman/listinfo/automotive-discussions)
17 For information about AGL Distribution, see the
18     [AGL Distribution](https://wiki.automotivelinux.org/agl-distro)
19 For information abount Getting started with AGL
20     [here](https://wiki.automotivelinux.org/start/getting-started)
21 For information about contributing to the AGL Distro
22     [here](https://wiki.automotivelinux.org/agl-distro/contributing)
23
24 Layer Dependencies
25 ------------------
26
27 URI: git://git.yoctoproject.org/poky
28 > branch:   dizzy
29 > revision: 5f0d25152bac2d3798663a4ebfdd2df24060f153
30
31 URI: git://git.openembedded.org/meta-openembedded
32 > layer:    meta-oe
33 > branch:   dizzy
34 > revision: 853dcfa0d618dc26bd27b3a1b49494b98d6eee97
35
36 URI: https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
37 > branch:   master
38 > revision: 4d71b6fbe454ff51342ab1eb6791fad66ba98c3e
39 > (or later)
40
41 ## The Renesas R-Car Gen2 (Porter) board depends in addition on: ##
42
43 URI: https://gerrit.automotivelinux.org/gerrit/AGL/meta-renesas
44 > branch:   agl-1.0-bsp-1.8.0
45 > revision: bf30de66badcac7ef82d3758aa44c116ee791a28
46 > (or later)
47
48 Packagegroups
49 -------------
50
51 AGL Demo Platform's package group design:
52
53 Top-level packagegroup,
54 > packagegroup-agl-appfw (all packages for demo platform)
55
56 This package group can contain sub-package groups like these.
57 > packagegroup-agl-appfw-graphics (for graphics subsystem)
58 > packagegroup-agl-appfw-agl (for AGL App Fw subystem)
59 > ...
60
61 The "packagegroups-agl-appfw-*" will contain packages for application and
62 frameworks.
63 > directory: meta-agl-demo/recipes-demo-platform/packagegroups
64 > recipes  : packagegroup-agl-appfw-[subsystem].bb
65
66 Supported Machine
67 -----------------
68
69 * QEMU (x86-64) - emulated machine: qemux86-64
70 * Renesas R-Car Gen2 (R-Car M2) - machine: porter
71
72 Supported Target of bitbake
73 ------------------------
74
75 * `agl-demo-platform` The full image of AGL Demo Platform and applications
76
77 Supposed Directory Trees of Layers to build
78 -------------------------------------------
79
80 * For QEMU
81
82       ${TOPDIR}/
83                 meta-agl/
84                 meta-agl-demo/
85                 meta-openembedded/
86                 poky/
87
88 * For R-Car M2
89
90       ${TOPDIR}/
91                 meta-agl/
92                 meta-agl-demo/
93                 meta-openembedded/
94                 meta-renesas/
95                 poky/
96
97 Build a QEMU image
98 ------------------
99
100 You can build a QEMU image using the following steps:
101
102 1. Export TEMPLATECONF to pick up correct configuration for the build
103         $ export TEMPLATECONF=/full/path/to/meta-agl-demo/conf
104
105 2. Run the following command:
106         $ source poky/oe-init-build-env
107
108 3. Build the full image of AGL Demo Platform and applications
109         $ bitbake agl-demo-platform
110
111 4. Run the emulator
112         $ cd $BUILD_DIR/tmp/deploy/images/qemex86-64
113         $ PATH_TO_POKY/poky/scripts/runqemu qemux86-64 bzImage-qemux86-64.bin \
114         agl-demo-platform-qemux86-64.ext3
115
116    For large screen:
117         $ PATH_TO_POKY/poky/scripts/runqemu qemux86-64 bzImage-qemux86-64.bin \
118         agl-demo-platform-qemux86-64.ext3 \
119         bootparams="uvesafb.mode_option=1280x720-32"
120
121 5. Some weston samples are available from weston terminal.
122
123 Build a R-Car M2 (porter) image
124 -------------------------------
125
126 ### Software setup
127
128 NOTE: These instructions are based on GENIVI wiki, [here](http://wiki.projects.genivi.org/index.php/Hardware_Setup_and_Software_Installation/koelsch%26porter). If these didn't work correctly especially around Renesas Binary Packages, please check there and updated instructions.
129
130 #### Getting Source Code and Build image
131
132 1. Create a directory for working, then go to there.
133         $ mkdir -p $HOME/ANYWHERE_YOU_WANT_TO_WORK_THERE
134         $ cd $HOME/ANYWHERE_YOU_WANT_TO_WORK_THERE
135         $ export AGL_TOP=`pwd`
136
137 2. Get the meta data and checkout
138         $ git clone git://git.yoctoproject.org/poky
139         $ cd poky
140         $ git checkout 5f0d25152bac2d3798663a4ebfdd2df24060f153
141         $ cd -
142         $ git clone git://git.openembedded.org/meta-openembedded
143         $ cd meta-openembedded
144         $ git checkout 853dcfa0d618dc26bd27b3a1b49494b98d6eee97
145         $ cd -
146         $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
147         $ cd meta-agl
148         $ git checkout 4d71b6fbe454ff51342ab1eb6791fad66ba98c3e
149         $ cd -
150         $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-renesas
151         $ cd meta-renesas
152         $ git checkout bf30de66badcac7ef82d3758aa44c116ee791a28
153         $ cd -
154         $ git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
155
156 #### Obtain and Install Renesas Graphics/Multimedia Drivers
157
158 1. Download packages from Renesas
159
160   The graphics and multimedia acceleration packages for the R-Car M2 Porter board
161   can be download directory from [here](http://www.renesas.com/secret/r_car_download/rcar_demoboard.jsp).
162
163   There are 2 ZIP files can be downloaded.
164     * Multimedia and Graphics library which require registeration and click through license
165     > r-car_series_evaluation_software_package_for_linux-*.zip
166     * Related Linux drivers
167     > r-car_series_evaluation_software_package_of_linux_drivers-*.zip
168
169 2. Unzip the two downloads into a temporary directory.
170         $ cd $AGL_TOP
171         $ mkdir binary-tmp
172         $ cd binary-tmp
173         $ unzip PATH_TO_DOWNLOAD/r-car_series_evaluation_software_package_for_linux-*.zip
174         $ unzip PATH_TO_DOWNLOAD/r-car_series_evaluation_software_package_of_linux_drivers-*.zip
175
176    After this step there should be two files in binary-tmp:
177    * Multimedia and Graphics library
178    > R-Car_Series_Evaluation_Software_Package_for_Linux-*.tar.gz
179    * Related Linux drivers
180    > R-Car_Series_Evaluation_Software_Package_of_Linux_Drivers-*.tar.gz
181
182 3. Copy the graphics acceleration drivers by shell script.
183         $ cd $AGL_TOP/meta-renesas/meta-rcar-gen2
184         $ ./copy_gfx_software_porter.sh ../../binary-tmp
185
186 4. Copy the multimedia acceleration drivers by shell script.
187         $ cd $AGL_TOP/meta-renesas/meta-rcar-gen2
188         $ ./copy_mm_software_lcb.sh ../../binary-tmp
189
190 #### Build from the Source code
191
192 You can build a R-Car2 M2 (porter) image using the following steps:
193
194 1. Export TEMPLATECONF to pick up correct configuration for the build
195         $ export TEMPLATECONF=$AGL_TOP/meta-renesas/meta-rcar-gen2/conf
196
197 2. (Optional) If you want to use multimedia accelerations, uncomment
198    manually 4 `IMAGE_INSTALL_append_porter` in conf/local.conf.
199         #IMAGE_INSTALL_append_porter = " \
200         #    gstreamer1.0-plugins-bad-waylandsink \
201         #    "
202
203         #IMAGE_INSTALL_append_porter = " \
204         #    gstreamer1.0-plugins-base-videorate \
205         ...
206         #"
207
208         #IMAGE_INSTALL_append_porter = " \
209         #    libegl libegl-dev libgbm-dev \
210         ...
211         #    "
212
213         #IMAGE_INSTALL_append_porter = " \
214         #    packagegroup-rcar-gen2-multimedia \
215         ...
216         #    "
217
218    Also it is needed to uncomment this,
219         #MACHINE_FEATURES_append = " multimedia"
220
221    This `multimedia` enables meta-renesas's multimedia configuration.
222    The version of GStreamer1.0 which AGL distro use, will be changed
223    to 1.2.3 (meta-renesas prefers) from 1.4.1(meta-agl default) by this switch.
224
225 3. Run the following command:
226         $ cd $AGL_TOP
227         $ source poky/oe-init-build-env
228
229    (Optional) If you want to use multimedia accelerations, confirm your
230    conf/bblayer.conf has a entry of `meta-openembedded/meta-multimedia`
231    in BBLAYERS because packagegroup-rcar-gen2-multimedia needs some extra
232    packages there.
233
234 4. Build the full image of AGL Demo Platform and applications
235         $ bitbake agl-demo-platform
236
237 ### Deployment (SDCARD)
238
239 NOTE: These instructions are based on GENIVI wiki, [here](http://wiki.projects.genivi.org/index.php/Hardware_Setup_and_Software_Installation/koelsch%26porter#Deployment_.28SDCARD.29).
240
241 #### Instructions on the host
242
243 1. Format SD-Card and then, create single EXT3 partition on it.
244
245 2. Mount the SD-Card, for example `/media/$SDCARD_LABEL`.
246
247 3. Copy AGL root file system onto the SD-Card
248    1. Go to build directory
249            $ cd $AGL_TOP/build/tmp/deploy/images/porter
250    2. Extract the root file system into the SD-Card
251            $ sudo tar --extract --numeric-owner --preserve-permissions --preserve-order \
252            --totals --directory=/media/$SDCARD_LABEL --file=agl-demo-platform-porter.tar.bz2
253    3. Copy kernel and DTB into the `/boot` of the SD-Card
254            $ sudo cp uImage uImage-r8a7791-porter.dtb /media/$SDCARD_LABEL
255
256 4. After the copy finished, unmount SD-Card and insert it into the SD-Card slot of the porter board.
257
258 #### Instructions on the host
259
260 NOTE: There is details about porter board [here](http://elinux.org/R-Car/Boards/Porter).
261
262 NOTE: To boot weston on porter board, we need keyboard and mouse. (USB2.0 can be use for this)
263
264 ##### Change U-Boot parameters to boot from SD card
265
266 1. Power up the board and, using your preferred terminal emulator, stop the board's autoboot by hitting any key.
267
268   > Debug serial settings are 38400 8N1. Any standard terminal emulator program can be used.
269
270 2. Set the follow environment variables and save them
271         => setenv bootargs_console console=ttySC6,${baudrate}
272         => setenv bootargs_video vmalloc=384M video=HDMI-A-1:1024x768-32@60
273         => setenv bootcmd_sd 'ext4load mmc 0:1 0x40007fc0 boot/uImage;ext4load mmc 0:1 0x40f00000 boot/uImage-r8a7791-porter.dtb'
274         => setenv bootcmd 'setenv bootargs ${bootargs_console} ${bootargs_video} root=/dev/mmcblk0p1 rw rootfstype=ext3;run bootcmd_sd;bootm 0x40007fc0 - 0x40f00000'
275         => saveenv
276
277 ##### Boot from SD card
278
279 1. After board reset, U-Boot is started and after a countdown, ...
280    Linux boot message should be displayed. Please wait a moment.
281 2. Then weston is booted automatically, and weston-terminal appears.
282
283 3. Have fun! :)
284
285 4. (Optional) This is how to test and play multimedia contents with acceleration.
286
287     1. Boot porter without mouse and keyboard, it avoid to boot weston automatically.
288        For now, when running weston, V4L2 deosn't work correctly, so we have to
289        stop weston first (GST plugin `waylandsink` also doesn't work correctly for now).
290
291     2. Execute these instructions:
292             $ export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib:"
293
294             # Set the mixer
295             $ amixer set "LINEOUT Mixer DACL" on
296             $ amixer set "DVC Out" 10
297
298             $ modprobe -a mmngr mmngrbuf s3ctl uvcs_cmn vspm fdpm
299
300             $ media-ctl -d /dev/media0 -r
301             $ media-ctl -d /dev/media0 -l '"vsp1.2 rpf.0":1 -> "vsp1.2 uds.0":0 [1]'
302             $ media-ctl -d /dev/media0 -l '"vsp1.2 uds.0":1 -> "vsp1.2 wpf.0":0 [1]'
303             $ media-ctl -d /dev/media0 -l '"vsp1.2 wpf.0":1 -> "vsp1.2 lif":0 [1]'
304             $ media-ctl -d /dev/media0 -V '"vsp1.2 rpf.0":0 [fmt:AYUV32/1920x1080]'
305             $ media-ctl -d /dev/media0 -V '"vsp1.2 rpf.0":1 [fmt:AYUV32/1920x1080]'
306             $ media-ctl -d /dev/media0 -V '"vsp1.2 uds.0":0 [fmt:AYUV32/1920x1080]'
307             $ media-ctl -d /dev/media0 -V '"vsp1.2 uds.0":1 [fmt:AYUV32/640x480]'
308             $ media-ctl -d /dev/media0 -V '"vsp1.2 wpf.0":0 [fmt:AYUV32/640x480]'
309             $ media-ctl -d /dev/media0 -V '"vsp1.2 wpf.0":1 [fmt:ARGB32/640x480]'
310             $ media-ctl -d /dev/media0 -V '"vsp1.2 lif":0 [fmt:ARGB32/640x480]'
311
312             # in caes R-Car M2 (HDMI - DU1 - vspd0)
313             $ modetest -M rcar-du -s 10@8:1280x720@AR24 -d -P '8@19:640x480+100+200@XR24' &
314
315     After these command, Test pattern will show on display connected to
316     porter's HDMI port.
317
318     Then, you can play H264(MP4) movie like these,
319             $ gst-launch-1.0 filesrc location=./sample.mp4  ! qtdemux name=d d. ! \
320             queue ! omxh264dec no-copy=true ! v4l2sink device=/dev/video1 \
321             io-mode=userptr d. ! queue ! faad ! alsasink device=hw:0,0
322