summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2012-06-03 10:07:58 +0200
committerMax Krummenacher <max.krummenacher@toradex.com>2012-06-03 10:07:58 +0200
commitc1dd1f84dbee8ffe2db531a745bfc3b58c185fdb (patch)
treefdbf9f3561621082332a136d789b2326c50b7e8b
Initial commit
-rw-r--r--conf/layer.conf9
-rw-r--r--conf/machine/colibri-t20.conf57
-rw-r--r--conf/machine/colibri-t20.conf~61
-rw-r--r--conf/machine/colibri-t30.conf57
-rw-r--r--conf/machine/colibri-t30.conf~61
-rw-r--r--recipes-bsp/u-boot/u-boot-git/bootaddr.patch12
-rw-r--r--recipes-bsp/u-boot/u-boot-git/colibri_t30.patch220
-rw-r--r--recipes-bsp/u-boot/u-boot-git/remove-overlay.patch11
-rw-r--r--recipes-bsp/u-boot/u-boot-git/remove-unused.patch104
-rw-r--r--recipes-bsp/u-boot/u-boot-git/tegra2-nand-warning.patch12
-rw-r--r--recipes-bsp/u-boot/u-boot-git/u-boot-board-unused.patch62
-rw-r--r--recipes-bsp/u-boot/u-boot-git/u-boot-userspacetools.patch12
-rw-r--r--recipes-bsp/u-boot/u-boot-git/u-boot-warning.patch272
-rw-r--r--recipes-bsp/u-boot/u-boot-git/u-boot_ap20warning.patch11
-rw-r--r--recipes-bsp/u-boot/u-boot.inc68
-rw-r--r--recipes-bsp/u-boot/u-boot_git.bb61
-rw-r--r--recipes-bsp/u-boot/u-boot_git.bbappend70
-rw-r--r--recipes-bsp/u-boot/u-boot_git.bbappend.orig23
-rw-r--r--recipes-bsp/u-boot/u-boot_git.bbappend~68
-rw-r--r--recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.24.1.bbappend5
-rw-r--r--recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch31
-rw-r--r--recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch~31
-rw-r--r--recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch33
-rw-r--r--recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch~16
-rw-r--r--recipes-kernel/linux/files/systemd-koen.patch48
-rw-r--r--recipes-kernel/linux/linux-colibri-t20_git.bb39
-rw-r--r--recipes-kernel/linux/linux-colibri-t20_git.bb.bak37
-rw-r--r--recipes-kernel/linux/linux-colibri-t20_git.bb.orig35
-rw-r--r--recipes-kernel/linux/linux-colibri-t20_git.bb~36
-rw-r--r--recipes-kernel/linux/linux-colibri-t30_git.bb.bak38
-rw-r--r--recipes-kernel/linux/linux.inc282
-rw-r--r--recipes-lxde/lxappearance-obconf/lxappearance-obconf_0.0.1.bb21
-rw-r--r--recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb17
-rw-r--r--recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb~17
-rw-r--r--recipes-lxde/lxrandr/lxrandr_0.1.2.bb14
-rw-r--r--recipes-lxde/lxrandr/lxrandr_0.1.2.bb~14
-rw-r--r--recipes/base-files/base-files/colibri-t20/fstab14
-rw-r--r--recipes/base-files/base-files/colibri-t30/fstab14
-rw-r--r--recipes/base-files/base-files_3.0.14.bbappend5
-rw-r--r--recipes/flash-plugins/files/bin-files.tar.bz2bin0 -> 4794912 bytes
-rw-r--r--recipes/flash-plugins/files/staging/libflashplayer.sobin0 -> 9766084 bytes
-rw-r--r--recipes/flash-plugins/files/staging/libysshared.sobin0 -> 843731 bytes
-rw-r--r--recipes/flash-plugins/flash-plugins.bb26
-rw-r--r--recipes/flash-plugins/flash-plugins.bb~24
-rwxr-xr-xrecipes/gpioconfig/files/GPIOConfig.desktop11
-rwxr-xr-xrecipes/gpioconfig/files/GPIOConfig.desktop~11
-rw-r--r--recipes/gpioconfig/files/GPIOConfig.pngbin0 -> 340 bytes
-rwxr-xr-xrecipes/gpioconfig/files/Makefile31
-rw-r--r--recipes/gpioconfig/gpioconfig.bb44
-rw-r--r--recipes/gpioconfig/gpioconfig.bb~44
-rw-r--r--recipes/images/angstrom-lxde-image.bb102
-rw-r--r--recipes/images/angstrom-lxde-image.bb~103
-rw-r--r--recipes/images/console-trdx-image.bb43
-rw-r--r--recipes/images/console-trdx-image.bb~44
-rw-r--r--recipes/images/lx.inc39
-rw-r--r--recipes/images/lx.inc~39
-rw-r--r--recipes/images/trdx-extra.inc56
-rw-r--r--recipes/images/trdx-extra.inc.orig52
-rw-r--r--recipes/images/trdx-extra.inc~55
-rw-r--r--recipes/joe/joe_3.1.bb15
-rw-r--r--recipes/joe/joe_3.1.bb~15
-rw-r--r--recipes/stress/stress_1.0.0.bb14
-rw-r--r--recipes/stress/stress_1.0.4.bb15
-rw-r--r--recipes/stress/stress_1.0.4.bb~15
-rw-r--r--recipes/tegrastats-gtk/files/Makefile17
-rw-r--r--recipes/tegrastats-gtk/files/main.c975
-rw-r--r--recipes/tegrastats-gtk/files/main.c~975
-rw-r--r--recipes/tegrastats-gtk/files/stats.c42
-rw-r--r--recipes/tegrastats-gtk/tegrastats-gtk.bb17
-rw-r--r--recipes/tegrastats-gtk/tegrastats-gtk.bb~16
-rw-r--r--recipes/tegrastats/files/Makefile4
-rwxr-xr-xrecipes/tegrastats/files/tegrastatsbin0 -> 10000 bytes
-rw-r--r--recipes/tegrastats/tegrastats.bb26
-rw-r--r--recipes/tegrastats/tegrastats.bb~26
-rw-r--r--recipes/trdx-config/angstrom-feed-configs.bb79
-rw-r--r--recipes/trdx-config/angstrom-feed-configs.bb~89
-rw-r--r--recipes/trdx-config/files/COPYING5
-rw-r--r--recipes/trdx-config/files/base-feed.conf5
-rw-r--r--recipes/trdx-config/files/inittab42
-rw-r--r--recipes/trdx-config/files/noarch-feed.conf2
-rwxr-xr-xrecipes/trdx-config/files/nvrm_daemon37
-rw-r--r--recipes/trdx-config/trdx-config.bb30
-rw-r--r--recipes/trdx-config/trdx-config.bb~30
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/bin-files.tar.bz2bin0 -> 6101863 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/bin/nvrm_daemonbin0 -> 177308 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/default-display-manager1
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/xorg.conf.tfttouch91
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_core.axfbin0 -> 131284 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_transport.axfbin0 -> 22924 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_aacdec.axfbin0 -> 281644 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_adtsdec.axfbin0 -> 238604 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_audiomixer.axfbin0 -> 67948 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_h264dec.axfbin0 -> 253052 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegdec.axfbin0 -> 111468 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegenc.axfbin0 -> 97416 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_manager.axfbin0 -> 22984 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp2dec.axfbin0 -> 149256 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp3dec.axfbin0 -> 245636 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mpeg4dec.axfbin0 -> 193608 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_reference.axfbin0 -> 48208 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_service.axfbin0 -> 16468 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sorensondec.axfbin0 -> 171164 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sw_mp3dec.axfbin0 -> 217588 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vc1dec.axfbin0 -> 183892 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vp6dec_vld.axfbin0 -> 87624 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wavdec.axfbin0 -> 71192 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmadec.axfbin0 -> 258056 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmaprodec.axfbin0 -> 583624 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvrm_avp.binbin0 -> 36528 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/gstreamer-0.10/libgstomx.sobin0 -> 1424976 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libEGL.sobin0 -> 130956 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libGLESv2.sobin0 -> 434016 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libKD.sobin0 -> 104600 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libcgdrv.sobin0 -> 5194940 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvcwm.sobin0 -> 18332 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d.sobin0 -> 91436 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d_v2.sobin0 -> 211248 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_audiofx.sobin0 -> 3788 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_disp.sobin0 -> 201008 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispatch_helper.sobin0 -> 6164 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_d.sobin0 -> 11668 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_impl_d.sobin0 -> 331140 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm.sobin0 -> 34400 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_audio.sobin0 -> 2025416 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_contentpipe.sobin0 -> 97240 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_image.sobin0 -> 78128 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_manager.sobin0 -> 12084 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_misc.sobin0 -> 61700 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_parser.sobin0 -> 537376 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_service.sobin0 -> 5544 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_tracklist.sobin0 -> 8984 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_utils.sobin0 -> 71740 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_video.sobin0 -> 961064 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_videorenderer.sobin0 -> 53668 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_vp6_video.sobin0 -> 21980 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_writer.sobin0 -> 71272 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvomx.sobin0 -> 421532 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvos.sobin0 -> 47092 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm.sobin0 -> 42444 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics.sobin0 -> 19536 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics_impl.sobin0 -> 26092 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvsm.sobin0 -> 63096 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvtvmr.sobin0 -> 146444 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwinsys.sobin0 -> 16236 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwsi.sobin0 -> 28364 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/xorg/modules/drivers/tegra_drv.sobin0 -> 134380 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/LICENSE127
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/base.tgzbin0 -> 6011853 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/kernel_supplements.tbz2bin0 -> 4750028 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/nvgstplayer.tbz2bin0 -> 440184 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/restricted_codecs.tbz2bin0 -> 347741 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/wifi.tbz2bin0 -> 170726 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi10.sobin0 -> 143499 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi11.sobin0 -> 143499 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi5.sobin0 -> 139883 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi6.sobin0 -> 140068 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi7.sobin0 -> 140128 bytes
-rwxr-xr-xrecipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi8.sobin0 -> 143552 bytes
-rw-r--r--recipes/trdx-nv-binaries/files/colibri-t30/xorg.conf92
-rw-r--r--recipes/trdx-nv-binaries/trdx-nv-binaries.bb66
-rw-r--r--recipes/trdx-nv-binaries/trdx-nv-binaries.bb~69
-rw-r--r--recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb15
-rw-r--r--recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb~15
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_disp.so.allmodesbin0 -> 54748 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_disp.so.vgaonlybin0 -> 53508 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_dtvtuner.sobin0 -> 12932 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_hdmi.sobin0 -> 2660 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_imager.sobin0 -> 119432 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_misc.sobin0 -> 5884 bytes
-rwxr-xr-xrecipes/trdx-odm/files/libnvodm_query.sobin0 -> 37028 bytes
-rw-r--r--recipes/trdx-odm/trdx-odm.bb32
-rw-r--r--recipes/trdx-odm/trdx-odm.bb~32
-rw-r--r--recipes/xorg-xserver/xserver-xf86-config/colibri-t20/xorg.conf97
-rw-r--r--recipes/xorg-xserver/xserver-xf86-config/colibri-t30/xorg.conf92
-rw-r--r--recipes/xorg-xserver/xserver-xf86-config_0.1.bbappend5
-rw-r--r--tasks/angstrom-task-lxde.bb59
176 files changed, 6006 insertions, 0 deletions
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..3b1e852
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,9 @@
+# We have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a recipes directory, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-toradex"
+BBFILE_PATTERN_meta-toradex := "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-toradex = "99"
diff --git a/conf/machine/colibri-t20.conf b/conf/machine/colibri-t20.conf
new file mode 100644
index 0000000..af2aa2b
--- /dev/null
+++ b/conf/machine/colibri-t20.conf
@@ -0,0 +1,57 @@
+#@TYPE: Machine
+#@NAME: colibri_t20
+#@DESCRIPTION: Toradex Colibri T20
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-colibri-t20"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_MACHINE = "colibri_t20_config"
+UBOOT_ENTRYPOINT = "0x00008000"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-input-keyboard"
+# Only has DVI connector for external screen, name is changing to MACHINE_GUI_CLASS
+GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_GUI_CLASS = "bigscreen"
+
+PREFERRED_PROVIDER_lxde-icon-theme_colibri-t20 = "lxde-icon-theme"
+PREFERRED_PROVIDER_lxsession-lite_colibri-t20 = "lxsession"
+#PREFERRED_PROVIDER_gdbserver_colibri-t20 = "gdbserver"
+#PREFERRED_PROVIDER_libgobject-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgmodule-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgthread-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgio-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_VERSION_libgobject-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgmodule-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgthread-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgio-2.0_colibri-t20 = "2.30.1"
+
+#PREFERRED_VERSION_samba_colibri-t20 = "3.6.1"
+#PREFERRED_VERSION_glib-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_glib-2.0-native_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_gtk+_colibri-t20 = "2.24.8"
+#PREFERRED_VERSION_gtk+-native_colibri-t20 = "2.24.8"
+#PREFERRED_VERSION_pango_colibri-t20 = "1.29.4"
+#PREFERRED_VERSION_pango-native_colibri-t20 = "1.29.4"
+
+#ANGSTROM_GCC_VERSION_colibri-t20 = "4.4.4"
+#fix for csl 4.4.1 toolchain not beeing recent enough
+#PREFERRED_VERSION_eglibc ?= "2.10"
+#PREFERRED_VERSION_eglibc-initial ?= "2.10"
+
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat ext2 alsa touchscreen ethernet"
+EXTRA_IMAGEDEPENDS += "u-boot"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "tar.bz2"
+
+# T20 does not have neon
+DEFAULTTUNE = "cortexa9"
+require conf/machine/include/tune-cortexa9.inc
diff --git a/conf/machine/colibri-t20.conf~ b/conf/machine/colibri-t20.conf~
new file mode 100644
index 0000000..90aaa06
--- /dev/null
+++ b/conf/machine/colibri-t20.conf~
@@ -0,0 +1,61 @@
+#@TYPE: Machine
+#@NAME: colibri_t20
+#@DESCRIPTION: Toradex Colibri T20
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-colibri-t20"
+#PREFERRED_VERSION_linux = ""
+
+KERNEL_IMAGETYPE = "uImage"
+#UBOOT_MACHINE = "harmony_config"
+#UBOOT_MACHINE = "waluigi_config"
+UBOOT_MACHINE = "colibri_t20_config"
+UBOOT_ENTRYPOINT = "0x00008000"
+#PREFERRED_VERSION_u-boot = "2010.06"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-input-keyboard"
+# Only has DVI connector for external screen, name is changing to MACHINE_GUI_CLASS
+GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_GUI_CLASS = "bigscreen"
+
+PREFERRED_PROVIDER_lxde-icon-theme_colibri-t20 = "lxde-icon-theme"
+PREFERRED_PROVIDER_lxsession-lite_colibri-t20 = "lxsession"
+PREFERRED_PROVIDER_gdbserver_colibri-t20 = "gdbserver"
+#PREFERRED_PROVIDER_libgobject-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgmodule-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgthread-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_PROVIDER_libgio-2.0_colibri-t20 = "glib-2.0"
+#PREFERRED_VERSION_libgobject-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgmodule-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgthread-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_libgio-2.0_colibri-t20 = "2.30.1"
+
+#PREFERRED_VERSION_samba_colibri-t20 = "3.6.1"
+#PREFERRED_VERSION_glib-2.0_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_glib-2.0-native_colibri-t20 = "2.30.1"
+#PREFERRED_VERSION_gtk+_colibri-t20 = "2.24.8"
+#PREFERRED_VERSION_gtk+-native_colibri-t20 = "2.24.8"
+#PREFERRED_VERSION_pango_colibri-t20 = "1.29.4"
+#PREFERRED_VERSION_pango-native_colibri-t20 = "1.29.4"
+
+#ANGSTROM_GCC_VERSION_colibri-t20 = "4.4.4"
+#fix for csl 4.4.1 toolchain not beeing recent enough
+#PREFERRED_VERSION_eglibc ?= "2.10"
+#PREFERRED_VERSION_eglibc-initial ?= "2.10"
+
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat ext2 alsa"
+EXTRA_IMAGEDEPENDS += "u-boot"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+#IMAGE_FSTYPES ?= "yaffs2"
+
+# T20 does not have neon
+DEFAULTTUNE = "cortexa9"
+require conf/machine/include/tune-cortexa9.inc
diff --git a/conf/machine/colibri-t30.conf b/conf/machine/colibri-t30.conf
new file mode 100644
index 0000000..35ac440
--- /dev/null
+++ b/conf/machine/colibri-t30.conf
@@ -0,0 +1,57 @@
+#@TYPE: Machine
+#@NAME: colibri_t30
+#@DESCRIPTION: Toradex Colibri T30
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-colibri-t30"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_MACHINE = "colibri_t30_config"
+UBOOT_ENTRYPOINT = "0x80008000"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-input-keyboard"
+# Only has DVI connector for external screen, name is changing to MACHINE_GUI_CLASS
+GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_GUI_CLASS = "bigscreen"
+
+PREFERRED_PROVIDER_lxde-icon-theme_colibri-t30 = "lxde-icon-theme"
+PREFERRED_PROVIDER_lxsession-lite_colibri-t30 = "lxsession"
+#PREFERRED_PROVIDER_gdbserver_colibri-t30 = "gdbserver"
+#PREFERRED_PROVIDER_libgobject-2.0_colibri-t30 = "glib-2.0"
+#PREFERRED_PROVIDER_libgmodule-2.0_colibri-t30 = "glib-2.0"
+#PREFERRED_PROVIDER_libgthread-2.0_colibri-t30 = "glib-2.0"
+#PREFERRED_PROVIDER_libgio-2.0_colibri-t30 = "glib-2.0"
+#PREFERRED_VERSION_libgobject-2.0_colibri-t30 = "2.30.1"
+#PREFERRED_VERSION_libgmodule-2.0_colibri-t30 = "2.30.1"
+#PREFERRED_VERSION_libgthread-2.0_colibri-t30 = "2.30.1"
+#PREFERRED_VERSION_libgio-2.0_colibri-t30 = "2.30.1"
+
+#PREFERRED_VERSION_samba_colibri-t30 = "3.6.1"
+#PREFERRED_VERSION_glib-2.0_colibri-t30 = "2.30.1"
+#PREFERRED_VERSION_glib-2.0-native_colibri-t30 = "2.30.1"
+#PREFERRED_VERSION_gtk+_colibri-t30 = "2.24.8"
+#PREFERRED_VERSION_gtk+-native_colibri-t30 = "2.24.8"
+#PREFERRED_VERSION_pango_colibri-t30 = "1.29.4"
+#PREFERRED_VERSION_pango-native_colibri-t30 = "1.29.4"
+
+#ANGSTROM_GCC_VERSION_colibri-t30 = "4.4.4"
+#fix for csl 4.4.1 toolchain not beeing recent enough
+#PREFERRED_VERSION_eglibc ?= "2.10"
+#PREFERRED_VERSION_eglibc-initial ?= "2.10"
+
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat ext2 alsa touchscreen ethernet"
+EXTRA_IMAGEDEPENDS += "u-boot"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "tar.bz2"
+
+# T20 does not have neon, so at the moment we also do not compile for neon on T30
+DEFAULTTUNE = "cortexa9"
+require conf/machine/include/tune-cortexa9.inc
diff --git a/conf/machine/colibri-t30.conf~ b/conf/machine/colibri-t30.conf~
new file mode 100644
index 0000000..7a1f7ad
--- /dev/null
+++ b/conf/machine/colibri-t30.conf~
@@ -0,0 +1,61 @@
+#@TYPE: Machine
+#@NAME: colibri_t30
+#@DESCRIPTION: Toradex Colibri T30
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-colibri-t30"
+#PREFERRED_VERSION_linux = ""
+
+KERNEL_IMAGETYPE = "uImage"
+#UBOOT_MACHINE = "harmony_config"
+#UBOOT_MACHINE = "waluigi_config"
+#UBOOT_MACHINE = "cardhu_config"
+UBOOT_MACHINE = "colibri_t30_config"
+UBOOT_ENTRYPOINT = 0x00008000
+#PREFERRED_VERSION_u-boot = "2010.06"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-input-keyboard"
+# Only has DVI connector for external screen, name is changing to MACHINE_GUI_CLASS
+GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_GUI_CLASS = "bigscreen"
+
+PREFERRED_PROVIDER_lxde-icon-theme_colibri-t30 = "lxde-icon-theme"
+PREFERRED_PROVIDER_lxsession-lite_colibri-t30 = "lxsession"
+PREFERRED_PROVIDER_gdbserver_colibri-t30 = "gdbserver"
+PREFERRED_PROVIDER_libgobject-2.0_colibri-t30 = "glib-2.0"
+PREFERRED_PROVIDER_libgmodule-2.0_colibri-t30 = "glib-2.0"
+PREFERRED_PROVIDER_libgthread-2.0_colibri-t30 = "glib-2.0"
+PREFERRED_PROVIDER_libgio-2.0_colibri-t30 = "glib-2.0"
+PREFERRED_VERSION_libgobject-2.0_colibri-t30 = "2.30.1"
+PREFERRED_VERSION_libgmodule-2.0_colibri-t30 = "2.30.1"
+PREFERRED_VERSION_libgthread-2.0_colibri-t30 = "2.30.1"
+PREFERRED_VERSION_libgio-2.0_colibri-t30 = "2.30.1"
+
+PREFERRED_VERSION_samba_colibri-t30 = "3.6.1"
+PREFERRED_VERSION_glib-2.0_colibri-t30 = "2.30.1"
+PREFERRED_VERSION_glib-2.0-native_colibri-t30 = "2.30.1"
+PREFERRED_VERSION_gtk+_colibri-t30 = "2.24.8"
+PREFERRED_VERSION_gtk+-native_colibri-t30 = "2.24.8"
+PREFERRED_VERSION_pango_colibri-t30 = "1.29.4"
+PREFERRED_VERSION_pango-native_colibri-t30 = "1.29.4"
+
+#ANGSTROM_GCC_VERSION_colibri-t30 = "4.4.4"
+
+#fix for csl 4.4.1 toolchain not beeing recent enough
+#PREFERRED_VERSION_eglibc ?= "2.10"
+#PREFERRED_VERSION_eglibc-initial ?= "2.10"
+
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat ext2 alsa"
+EXTRA_IMAGEDEPENDS += "u-boot"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+#IMAGE_FSTYPES ?= "yaffs2"
+
+require conf/machine/include/tune-cortexa9tegra.inc
diff --git a/recipes-bsp/u-boot/u-boot-git/bootaddr.patch b/recipes-bsp/u-boot/u-boot-git/bootaddr.patch
new file mode 100644
index 0000000..d452b61
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/bootaddr.patch
@@ -0,0 +1,12 @@
+diff -Naur git.old/include/configs/tegra3-common.h git/include/configs/tegra3-common.h
+--- git.old/include/configs/tegra3-common.h 2012-01-29 22:40:43.240684735 +0100
++++ git/include/configs/tegra3-common.h 2012-01-29 22:49:00.330204308 +0100
+@@ -323,7 +323,7 @@
+ */
+
+ /* Below should be (NV_PA_SDRAM_BASE + 0x00E08000), but ld errors out */
+-#define CONFIG_SYS_TEXT_BASE 0x80E08000
++#define CONFIG_SYS_TEXT_BASE 0x80108000
+ #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+
+ #define CONFIG_SYS_INIT_RAM_ADDR CONFIG_STACKBASE
diff --git a/recipes-bsp/u-boot/u-boot-git/colibri_t30.patch b/recipes-bsp/u-boot/u-boot-git/colibri_t30.patch
new file mode 100644
index 0000000..485a28f
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/colibri_t30.patch
@@ -0,0 +1,220 @@
+diff -Naur git/board/nvidia/cardhu/pinmux-config-common.h git.old/board/nvidia/cardhu/pinmux-config-common.h
+--- git/board/nvidia/cardhu/pinmux-config-common.h 2012-01-28 12:16:26.000000000 +0100
++++ git.old/board/nvidia/cardhu/pinmux-config-common.h 2012-01-28 18:56:06.939970059 +0100
+@@ -174,20 +174,21 @@
+ DEFAULT_PINMUX(LCD_DC1, DISPLAYA, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(CRT_HSYNC, CRT, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(CRT_VSYNC, CRT, NORMAL, NORMAL, OUTPUT),
+- LV_PINMUX(VI_D0, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D1, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D2, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D3, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D0, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D1, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D2, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D3, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+ LV_PINMUX(VI_D4, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D7, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D10, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_MCLK, VI, UP, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D5, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D7, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D10, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ /* Enable MIC_GND, Pulldown, so this is switched off by default*/
++ LV_PINMUX(VI_MCLK, RSVD1, DOWN, NORMAL, INPUT, DISABLE, DISABLE),
+ DEFAULT_PINMUX(UART2_RXD, IRDA, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(UART2_TXD, IRDA, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(UART2_RTS_N, UARTB, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(UART2_CTS_N, UARTB, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(UART3_TXD, UARTC, NORMAL, NORMAL, OUTPUT),
++ DEFAULT_PINMUX(UART3_TXD, UARTC, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(UART3_RXD, UARTC, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(UART3_CTS_N, UARTC, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(UART3_RTS_N, UARTC, NORMAL, NORMAL, OUTPUT),
+@@ -205,13 +206,13 @@
+ DEFAULT_PINMUX(CLK3_OUT, EXTPERIPH3, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(CLK3_REQ, DEV3, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(GMI_WP_N, GMI, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_CS2_N, RSVD1, UP, NORMAL, INPUT), /* EN_VDD_BL1 */
++ DEFAULT_PINMUX(GMI_CS2_N, NAND, UP, NORMAL, INPUT), /* EN_VDD_BL1 */
+ DEFAULT_PINMUX(GMI_AD8, PWM0, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_PWM */
+- DEFAULT_PINMUX(GMI_AD10, NAND, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_EN */
+- DEFAULT_PINMUX(GMI_A16, SPI4, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_A17, SPI4, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_A18, SPI4, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_A19, SPI4, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD10, PWM2, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_EN */
++ DEFAULT_PINMUX(GMI_A16, UARTD, NORMAL, NORMAL, OUTPUT),
++ DEFAULT_PINMUX(GMI_A17, UARTD, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_A18, UARTD, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_A19, UARTD, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(CAM_MCLK, VI_ALT2, UP, NORMAL, INPUT),
+ DEFAULT_PINMUX(GPIO_PCC1, RSVD1, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(GPIO_PBB0, RSVD1, NORMAL, NORMAL, INPUT),
+@@ -256,13 +257,9 @@
+ DEFAULT_PINMUX(DAP1_DIN, I2S0, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(DAP1_DOUT, I2S0, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(DAP1_SCLK, I2S0, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(CLK1_REQ, DAP, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(CLK1_OUT, EXTPERIPH1, NORMAL, NORMAL, INPUT),
+-#ifdef CONFIG_SND_HDA_CODEC_REALTEK
+- DEFAULT_PINMUX(SPDIF_IN, DAP2, DOWN, NORMAL, INPUT),
+-#else
++ DEFAULT_PINMUX(CLK1_REQ, DAP, UP, NORMAL, INPUT),
++ DEFAULT_PINMUX(CLK1_OUT, EXTPERIPH1, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(SPDIF_IN, SPDIF, NORMAL, NORMAL, INPUT),
+-#endif
+ DEFAULT_PINMUX(SPDIF_OUT, SPDIF, NORMAL, NORMAL, OUTPUT),
+ #ifdef CONFIG_SND_HDA_CODEC_REALTEK
+ DEFAULT_PINMUX(DAP2_FS, HDA, DOWN, NORMAL, INPUT),
+@@ -280,9 +277,13 @@
+ DEFAULT_PINMUX(SPI1_SCK, SPI1, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(SPI1_CS0_N, SPI1, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(SPI1_MISO, SPI1, NORMAL, NORMAL, INPUT),
+- DEFAULT_PINMUX(PEX_L0_PRSNT_N, PCIE, NORMAL, NORMAL, INPUT),
++ /* ASIX RESET in */
++ DEFAULT_PINMUX(PEX_L0_PRSNT_N, PCIE, UP, NORMAL, INPUT),
++ /* ASIX wakeup */
+ DEFAULT_PINMUX(PEX_L0_RST_N, PCIE, NORMAL, NORMAL, OUTPUT),
+- DEFAULT_PINMUX(PEX_L0_CLKREQ_N, PCIE, NORMAL, NORMAL, INPUT),
++ /* ASIX VBUS in */
++ DEFAULT_PINMUX(PEX_L0_CLKREQ_N, PCIE, UP, NORMAL, INPUT),
++ /* ASIX PME in */
+ DEFAULT_PINMUX(PEX_WAKE_N, PCIE, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(PEX_L1_PRSNT_N, PCIE, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(PEX_L1_RST_N, PCIE, NORMAL, NORMAL, OUTPUT),
+@@ -294,10 +295,9 @@
+ DEFAULT_PINMUX(HDMI_INT, RSVD0, NORMAL, TRISTATE, INPUT),
+
+ /* Gpios */
+- /* SDMMC1 CD gpio */
+- DEFAULT_PINMUX(GMI_IORDY, RSVD1, UP, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_IORDY, NAND, UP, NORMAL, INPUT),
+ /* SDMMC1 WP gpio */
+- LV_PINMUX(VI_D11, RSVD1, UP, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D11, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+
+ /* Touch RESET */
+ DEFAULT_PINMUX(GMI_AD14, NAND, NORMAL, NORMAL, OUTPUT),
+@@ -310,11 +310,11 @@
+ DEFAULT_PINMUX(SDMMC3_DAT4, SDMMC3, UP, NORMAL, INPUT),
+
+ LV_PINMUX(VI_D6, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D8, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_D9, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_PCLK, RSVD1, UP, TRISTATE, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_HSYNC, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+- LV_PINMUX(VI_VSYNC, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D8, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_D9, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_PCLK, VI, UP, TRISTATE, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_HSYNC, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
++ LV_PINMUX(VI_VSYNC, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+ };
+
+ #if 0 // jz
+@@ -358,21 +358,21 @@
+
+ static struct pingroup_config unused_pins_lowpower[] = {
+ DEFAULT_PINMUX(GMI_CS0_N, NAND, UP, TRISTATE, OUTPUT),
+- DEFAULT_PINMUX(GMI_CS3_N, NAND, UP, TRISTATE, OUTPUT),
+- DEFAULT_PINMUX(GMI_CS4_N, NAND, UP, TRISTATE, OUTPUT),
++ DEFAULT_PINMUX(GMI_CS3_N, NAND, NORMAL, NORMAL, OUTPUT),
++ DEFAULT_PINMUX(GMI_CS4_N, NAND, NORMAL, NORMAL, OUTPUT),
+ DEFAULT_PINMUX(GMI_CS7_N, NAND, UP, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_AD0, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD1, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD2, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD3, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD4, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD5, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD6, NAND, NORMAL, TRISTATE, INPUT),
+- DEFAULT_PINMUX(GMI_AD7, NAND, NORMAL, TRISTATE, INPUT),
++ DEFAULT_PINMUX(GMI_AD0, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD1, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD2, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD3, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD4, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD5, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD6, NAND, NORMAL, NORMAL, INPUT),
++ DEFAULT_PINMUX(GMI_AD7, NAND, NORMAL, NORMAL, INPUT),
+ DEFAULT_PINMUX(GMI_AD9, PWM1, NORMAL, TRISTATE, OUTPUT),
+ DEFAULT_PINMUX(GMI_AD11, NAND, NORMAL, TRISTATE, OUTPUT),
+ DEFAULT_PINMUX(GMI_AD13, NAND, UP, NORMAL, INPUT),
+- DEFAULT_PINMUX(GMI_WR_N, NAND, NORMAL, TRISTATE, OUTPUT),
++ DEFAULT_PINMUX(GMI_WR_N, NAND, NORMAL, NORMAL, OUTPUT),
+ };
+
+ #endif /* PINMUX_CONFIG_COMMON_H */
+diff -Naur git/board/nvidia/cardhu/tegra3-cardhu.dts git.old/board/nvidia/cardhu/tegra3-cardhu.dts
+--- git/board/nvidia/cardhu/tegra3-cardhu.dts 2012-01-28 12:16:26.000000000 +0100
++++ git.old/board/nvidia/cardhu/tegra3-cardhu.dts 2012-01-28 16:52:31.660622281 +0100
+@@ -14,12 +14,17 @@
+ };
+
+ aliases {
++ /* UART A = UART1 */
+ console = "/serial@70006000";
+ usb0 = "/usb@0x7d008000";
+ usb1 = "/usb@0x7d000000";
+
++ /* SDMMC-4 */
+ sdmmc0 = "/sdhci@78000600";
+- sdmmc1 = "/sdhci@78000000";
++ /* SDMMC-1 */
++ /* sdmmc1 = "/sdhci@78000000";*/
++ /* SDMMC-2 */
++ sdmmc1 = "/sdhci@78000200";
+ };
+
+ chosen {
+@@ -40,19 +45,19 @@
+ clock-frequency = <408000000>;
+ };
+
+- sdhci@78000000 {
++ sdhci@78000200 {
+ status = "ok";
+ width = <4>; /* width of SDIO port */
+ removable = <1>;
+ /* Parameter 3 bit 0:1=output, 0=input; bit 1:1=high, 0=low */
+- cd-gpio = <&gpio 69 0>; /* card detect, gpio PI5 */
+- wp-gpio = <&gpio 155 0>; /* write protect, gpio PT3 */
+- power-gpio = <&gpio 31 3>; /* power enable, gpio PD7 */
++ /* cd-gpio = <&gpio 69 0>; *//* card detect, gpio PI5 */
++ /*wp-gpio = <&gpio 155 0>; *//* write protect, gpio PT3 */
++ /*power-gpio = <&gpio 31 3>;*/ /* power enable, gpio PD7 */
+ };
+
+ sdhci@78000600 {
+ status = "ok";
+- width = <4>; /* width of SDIO port */
++ width = <8>; /* width of SDIO port */
+ removable = <0>;
+ };
+
+@@ -61,7 +66,7 @@
+ width = <1366>;
+ height = <768>;
+ bits_per_pixel = <16>;
+- pwfm = <&pwfm0>;
++ /*pwfm = <&pwfm0>;*/
+ display = <&display1>;
+ frame-buffer = <0x1C022000>;
+
+@@ -72,10 +77,10 @@
+ vert_timing = <12 5 20 25>;
+
+ /* Parameter 3 bit 0:1=output, 0=input; bit 1:1=high, 0=low */
+- gpios = <&gpio 56 3>, /* PH0, LCD1_BL_PWM */
+- <&gpio 58 3>, /* PH2, LCD1_BL_EN */
+- <&gpio 90 3>, /* PL2, LVDS1_SHTDN */
+- <&gpio 92 3>; /* PL4, EN_VDD_PNL1 */
++ /*gpios = <&gpio 56 3>,*/ /* PH0, LCD1_BL_PWM */
++ /*<&gpio 58 3>,*/ /* PH2, LCD1_BL_EN */
++ /*<&gpio 90 3>,*/ /* PL2, LVDS1_SHTDN */
++ /*<&gpio 92 3>;*/ /* PL4, EN_VDD_PNL1 */
+ };
+
+ usb@0x7d000000 {
diff --git a/recipes-bsp/u-boot/u-boot-git/remove-overlay.patch b/recipes-bsp/u-boot/u-boot-git/remove-overlay.patch
new file mode 100644
index 0000000..dfd9ba3
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/remove-overlay.patch
@@ -0,0 +1,11 @@
+--- git/arch/arm/cpu/armv7/u-boot.lds 2012-06-02 21:16:34.000000000 +0200
++++ x
+@@ -68,7 +68,7 @@
+
+ _end = .;
+
+- .bss __rel_dyn_start (OVERLAY) : {
++ .bss __rel_dyn_start : {
+ __bss_start = .;
+ *(.bss)
+ . = ALIGN(4);
diff --git a/recipes-bsp/u-boot/u-boot-git/remove-unused.patch b/recipes-bsp/u-boot/u-boot-git/remove-unused.patch
new file mode 100644
index 0000000..92e933f
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/remove-unused.patch
@@ -0,0 +1,104 @@
+diff -urNdb u-boot/arch/arm/cpu/armv7/tegra-common/board.c u-boot.new/arch/arm/cpu/armv7/tegra-common/board.c
+--- u-boot/arch/arm/cpu/armv7/tegra-common/board.c 2011-12-15 17:28:52.000000000 +0100
++++ u-boot.new/arch/arm/cpu/armv7/tegra-common/board.c 2011-12-20 15:05:10.603876354 +0100
+@@ -41,6 +41,7 @@
+ u32 reg;
+
+ reg = readl(&pmc->pmc_scratch20);
++ (void) reg;
+ debug("pmc->pmc_scratch20 (ODMData) = 0x%08X\n", reg);
+
+ //Colibri T20 does not use OdmData
+diff -urNdb u-boot/common/cmd_mtdparts.c u-boot.new/common/cmd_mtdparts.c
+--- u-boot/common/cmd_mtdparts.c 2011-12-06 17:10:16.000000000 +0100
++++ u-boot.new/common/cmd_mtdparts.c 2011-12-20 15:12:07.454221888 +0100
+@@ -871,9 +871,12 @@
+ debug("dev type = %d (%s), dev num = %d, mtd-id = %s\n",
+ id->type, MTD_DEV_TYPE(id->type),
+ id->num, id->mtd_id);
++#ifdef DEBUG
+ pend = strchr(p, ';');
+ debug("parsing partitions %.*s\n", (pend ? pend - p : strlen(p)), p);
+-
++#else
++ (void)pend;
++#endif
+
+ /* parse partitions */
+ num_parts = 0;
+diff -urNdb u-boot/common/cmd_ubi.c u-boot.new/common/cmd_ubi.c
+--- u-boot/common/cmd_ubi.c 2011-12-06 17:10:16.000000000 +0100
++++ u-boot.new/common/cmd_ubi.c 2011-12-20 15:14:57.464387590 +0100
+@@ -316,7 +316,6 @@
+ static int ubi_volume_read(char *volume, char *buf, size_t size)
+ {
+ int err, lnum, off, len, tbuf_size;
+- size_t count_save = size;
+ void *tbuf;
+ unsigned long long tmp;
+ struct ubi_volume *vol;
+@@ -347,7 +346,7 @@
+ if (vol->corrupted)
+ printf("read from corrupted volume %d", vol->vol_id);
+ if (offp + size > vol->used_bytes)
+- count_save = size = vol->used_bytes - offp;
++ size = vol->used_bytes - offp;
+
+ tbuf_size = vol->usable_leb_size;
+ if (size < tbuf_size)
+diff -urNdb u-boot/drivers/mtd/ubi/vmt.c u-boot.new/drivers/mtd/ubi/vmt.c
+--- u-boot/drivers/mtd/ubi/vmt.c 2011-12-06 17:10:16.000000000 +0100
++++ u-boot.new/drivers/mtd/ubi/vmt.c 2011-12-20 15:16:48.334522354 +0100
+@@ -684,6 +684,7 @@
+
+ ubi->volumes[vol->vol_id] = NULL;
+ err = ubi_destroy_gluebi(vol);
++ (void) err;
+ cdev_del(&vol->cdev);
+ volume_sysfs_close(vol);
+ }
+diff -urNdb u-boot/drivers/usb/eth/asix.c u-boot.new/drivers/usb/eth/asix.c
+--- u-boot/drivers/usb/eth/asix.c 2011-12-15 17:28:52.000000000 +0100
++++ u-boot.new/drivers/usb/eth/asix.c 2011-12-20 15:22:59.254665754 +0100
+@@ -364,6 +364,8 @@
+
+ rx_ctl = asix_read_rx_ctl(dev);
+ debug("RX_CTL is 0x%04x after software reset\n", rx_ctl);
++ (void)rx_ctl;
++
+ if (asix_write_rx_ctl(dev, 0x0000) < 0)
+ goto out_err;
+
+diff -urNdb u-boot/fs/jffs2/jffs2_1pass.c u-boot.new/fs/jffs2/jffs2_1pass.c
+--- u-boot/fs/jffs2/jffs2_1pass.c 2011-12-06 17:10:01.000000000 +0100
++++ u-boot.new/fs/jffs2/jffs2_1pass.c 2011-12-20 15:40:45.114614263 +0100
+@@ -813,6 +813,7 @@
+ #if 0
+ putLabeledWord("read_inode: returning = ", totalSize);
+ #endif
++ (void) ret;
+ return totalSize;
+ }
+
+@@ -1575,9 +1576,8 @@
+
+ if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
+ uint32_t inbuf_ofs;
+- uint32_t empty_start, scan_end;
++ uint32_t scan_end;
+
+- empty_start = ofs;
+ ofs += 4;
+ scan_end = min_t(uint32_t, EMPTY_SCAN_SIZE(
+ part->sector_size)/8,
+diff -urNdb u-boot/lib/lzo/lzo1x_decompress.c u-boot.new/lib/lzo/lzo1x_decompress.c
+--- u-boot/lib/lzo/lzo1x_decompress.c 2011-12-06 17:10:00.000000000 +0100
++++ u-boot.new/lib/lzo/lzo1x_decompress.c 2011-12-20 15:42:36.064554125 +0100
+@@ -48,6 +48,7 @@
+ src += 7;
+ if (version >= 0x0940)
+ level = *src++;
++ (void) level;
+ if (get_unaligned_be32(src) & HEADER_HAS_FILTER)
+ src += 4; /* filter info */
+
diff --git a/recipes-bsp/u-boot/u-boot-git/tegra2-nand-warning.patch b/recipes-bsp/u-boot/u-boot-git/tegra2-nand-warning.patch
new file mode 100644
index 0000000..ad039ca
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/tegra2-nand-warning.patch
@@ -0,0 +1,12 @@
+--- /home/tegradev/oe/output/work/colibri-t20-angstrom-linux-gnueabi/u-boot-git-r80/git/board/toradex/common/tegra2_nand.c~ 2012-01-17 11:09:37.000000000 +0100
++++ /home/tegradev/oe/output/work/colibri-t20-angstrom-linux-gnueabi/u-boot-git-r80/git/board/toradex/common/tegra2_nand.c 2012-01-18 20:06:36.439745214 +0100
+@@ -954,7 +954,8 @@
+ tmp_id = nand_read_byte(&tmp_mtd);
+ tmp_3rd = nand_read_byte(&tmp_mtd);
+ tmp_4th = nand_read_byte(&tmp_mtd);
+-
++ (void)tmp_3rd;
++
+ sprintf(compat, "%02X,%02X,%02X", tmp_manf, tmp_id, tmp_4th);
+ node = fdt_node_offset_by_compatible(gd->blob, 0, compat);
+ if (node < 0) {
diff --git a/recipes-bsp/u-boot/u-boot-git/u-boot-board-unused.patch b/recipes-bsp/u-boot/u-boot-git/u-boot-board-unused.patch
new file mode 100644
index 0000000..98a33a9
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/u-boot-board-unused.patch
@@ -0,0 +1,62 @@
+--- git/board/toradex/common/board.c 2012-06-02 21:16:34.000000000 +0200
++++ git/board/toradex/common/board.c 2012-06-02 22:27:51.000000000 +0200
+@@ -146,14 +146,21 @@
+ #error "tegra: We need CONFIG_TEGRA_PMU to support CONFIG_TEGRA_CLOCK_SCALING"
+ #endif
+
++#define GENERATE_FUSE_DEV_INFO 0
+ static TrdxBootDevice board_get_current_bootdev(void)
+ {
+- unsigned reg, reg1, reg2;
++ unsigned reg;
++#if GENERATE_FUSE_DEV_INFO
++ unsigned reg1 = 0;
++ unsigned reg2;
++#endif
+ unsigned strap_select;
+ unsigned skip_strap;
+ unsigned fuse_select;
++#if GENERATE_FUSE_DEV_INFO
+ unsigned fuse_device_info;
+ unsigned sdmmc_instance;
++#endif
+ TrdxBootDevice boot_device;
+
+ //get the latched strap pins, bit [26:29]
+@@ -187,15 +194,12 @@
+
+ clock_disable(PERIPH_ID_FUSE);
+ #else
+- (void)reg2;
+ #ifdef CONFIG_TEGRA3
+ //simulate a T30 fuse setting
+ reg = NvBootFuseBootDevice_Sdmmc;
+- reg1 = 0;
+ #else
+ //simulate a T20 fuse setting
+ reg = NvBootFuseBootDevice_NandFlash;
+- reg1 = 0;
+ #endif
+ #endif
+ //get the fuse 'SKIP_DEV_SEL_STRAPS', bit 3
+@@ -207,8 +211,10 @@
+ {
+ printf("Using fuses, %u\n", fuse_select);
+ //getting fuse device info and sdmmc instance, bit 7 of fuse_device info
++#if GENERATE_FUSE_DEV_INFO
+ fuse_device_info = reg1 & 0x3fff;
+ sdmmc_instance = ((reg1 & 0x80)==0x80) ? 2 : 3;
++#endif
+ switch(fuse_select)
+ {
+ case NvBootFuseBootDevice_Sdmmc:
+@@ -225,7 +231,9 @@
+ else
+ {
+ /* printf("Using straps, %u\n", strap_select);*/
++#if GENERATE_FUSE_DEV_INFO
+ sdmmc_instance = 3;
++#endif
+ switch(strap_select)
+ {
+ case NvStrapDevSel_Emmc_Primary_x4:
diff --git a/recipes-bsp/u-boot/u-boot-git/u-boot-userspacetools.patch b/recipes-bsp/u-boot/u-boot-git/u-boot-userspacetools.patch
new file mode 100644
index 0000000..6e7a3e9
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/u-boot-userspacetools.patch
@@ -0,0 +1,12 @@
+diff -urNdb u-boot-git.old//tools/env/Makefile u-boot-git//tools/env/Makefile
+--- u-boot-git.old//tools/env/Makefile 2011-11-19 18:17:17.000000000 +0100
++++ u-boot-git//tools/env/Makefile 2011-11-19 18:15:22.000000000 +0100
+@@ -28,6 +28,8 @@
+
+ CPPFLAGS := -Wall -DUSE_HOSTCC -I$(SRCTREE)/include
+
++CPPFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=soft -mthumb-interwork -mno-thumb
++
+ ifeq ($(MTD_VERSION),old)
+ CPPFLAGS += -DMTD_OLD
+ endif
diff --git a/recipes-bsp/u-boot/u-boot-git/u-boot-warning.patch b/recipes-bsp/u-boot/u-boot-git/u-boot-warning.patch
new file mode 100644
index 0000000..2552464
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/u-boot-warning.patch
@@ -0,0 +1,272 @@
+#--- git/include/common.h~ 2012-05-31 21:57:20.000000000 +0200
+#+++ git/include/common.h 2012-05-31 21:57:43.000000000 +0200
+@@ -1,3 +1,6 @@
++#pragma GCC diagnostic warning "-Wunused-but-set-variable"
++#pragma GCC diagnostic warning "-Wmaybe-uninitialized"
++#pragma GCC diagnostic warning "-Wstrict-aliasing"
+ /*
+ * (C) Copyright 2000-2009
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/board/toradex/common/tegra2_nand.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/board/toradex/common/tegra2_nand.c
+--- git/board/toradex/common/tegra2_nand.c 2012-06-01 00:56:03.000000000 +0200
++++ git/board/toradex/common/tegra2_nand.c 2012-06-01 01:03:43.000000000 +0200
+@@ -919,7 +919,7 @@
+ struct nand_info *info = &nand_ctrl;
+ struct fdt_nand *config = &info->config;
+ struct mtd_info tmp_mtd;
+- int tmp_manf, tmp_id, tmp_3rd, tmp_4th;
++ int tmp_manf, tmp_id, /*tmp_3rd,*/ tmp_4th;
+ char compat[8];
+ int node;
+
+@@ -952,7 +952,8 @@
+ /* Read manufacturer and device IDs */
+ tmp_manf = nand_read_byte(&tmp_mtd);
+ tmp_id = nand_read_byte(&tmp_mtd);
+- tmp_3rd = nand_read_byte(&tmp_mtd);
++ /*tmp_3rd = nand_read_byte(&tmp_mtd);
++ (void) tmp_3rd;*/
+ tmp_4th = nand_read_byte(&tmp_mtd);
+
+ sprintf(compat, "%02X,%02X,%02X", tmp_manf, tmp_id, tmp_4th);
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/common/cmd_mtdparts.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/common/cmd_mtdparts.c
+--- git/common/cmd_mtdparts.c 2012-06-01 00:56:04.000000000 +0200
++++ git/common/cmd_mtdparts.c 2012-06-01 01:06:16.000000000 +0200
+@@ -838,7 +838,7 @@
+ struct mtdids *id;
+ const char *mtd_id;
+ unsigned int mtd_id_len;
+- const char *p, *pend;
++ const char *p;
+ LIST_HEAD(tmp_list);
+ struct list_head *entry, *n;
+ u16 num_parts;
+@@ -871,8 +871,7 @@
+ debug("dev type = %d (%s), dev num = %d, mtd-id = %s\n",
+ id->type, MTD_DEV_TYPE(id->type),
+ id->num, id->mtd_id);
+- pend = strchr(p, ';');
+- debug("parsing partitions %.*s\n", (pend ? pend - p : strlen(p)), p);
++ debug("parsing partitions %.*s\n", (strchr(p, ';') ? strchr(p, ';') - p : strlen(p)), p);
+
+
+ /* parse partitions */
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/common/cmd_nand.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/common/cmd_nand.c
+--- git/common/cmd_nand.c 2012-06-01 00:56:04.000000000 +0200
++++ git/common/cmd_nand.c 2012-06-01 01:08:03.000000000 +0200
+@@ -190,7 +190,7 @@
+ loff_t *off, loff_t *size)
+ {
+ int ret;
+- loff_t maxsize;
++ loff_t maxsize=0;
+
+ if (argc == 0) {
+ *off = 0;
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/common/cmd_ubi.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/common/cmd_ubi.c
+--- git/common/cmd_ubi.c 2012-06-01 00:56:04.000000000 +0200
++++ git/common/cmd_ubi.c 2012-06-01 01:09:33.000000000 +0200
+@@ -316,7 +316,6 @@
+ static int ubi_volume_read(char *volume, char *buf, size_t size)
+ {
+ int err, lnum, off, len, tbuf_size;
+- size_t count_save = size;
+ void *tbuf;
+ unsigned long long tmp;
+ struct ubi_volume *vol;
+@@ -347,7 +346,7 @@
+ if (vol->corrupted)
+ printf("read from corrupted volume %d", vol->vol_id);
+ if (offp + size > vol->used_bytes)
+- count_save = size = vol->used_bytes - offp;
++ size = vol->used_bytes - offp;
+
+ tbuf_size = vol->usable_leb_size;
+ if (size < tbuf_size)
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/common/cmd_ximg.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/common/cmd_ximg.c
+--- git/common/cmd_ximg.c 2012-06-01 00:56:04.000000000 +0200
++++ git/common/cmd_ximg.c 2012-06-01 01:15:20.000000000 +0200
+@@ -55,7 +55,7 @@
+ int verify;
+ int part = 0;
+ char pbuf[10];
+- image_header_t *hdr;
++ image_header_t *hdr = NULL;
+ #if defined(CONFIG_FIT)
+ const char *uname = NULL;
+ const void* fit_hdr;
+@@ -238,16 +238,22 @@
+ * space, use slower decompression algorithm
+ * which requires at most 2300 KB of memory.
+ */
+- i = BZ2_bzBuffToBuffDecompress(
+- (char*)ntohl(hdr->ih_load),
+- &unc_len, (char *)data, len,
+- CONFIG_SYS_MALLOC_LEN < (4096 * 1024),
+- 0);
+- if (i != BZ_OK) {
+- printf ("BUNZIP2 ERROR %d - "
+- "image not loaded\n", i);
++ if(hdr == NULL) {
++ printf ("hdr not set\n");
+ return 1;
+ }
++ else {
++ i = BZ2_bzBuffToBuffDecompress(
++ (char*)ntohl(hdr->ih_load),
++ &unc_len, (char *)data, len,
++ CONFIG_SYS_MALLOC_LEN < (4096 * 1024),
++ 0);
++ if (i != BZ_OK) {
++ printf ("BUNZIP2 ERROR %d - "
++ "image not loaded\n", i);
++ return 1;
++ }
++ }
+ }
+ break;
+ #endif /* CONFIG_BZIP2 */
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/drivers/mtd/ubi/vmt.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/drivers/mtd/ubi/vmt.c
+--- git/drivers/mtd/ubi/vmt.c 2012-06-01 00:56:04.000000000 +0200
++++ git/drivers/mtd/ubi/vmt.c 2012-06-01 01:17:21.000000000 +0200
+@@ -678,12 +678,10 @@
+ */
+ void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol)
+ {
+- int err;
+-
+ dbg_msg("free volume %d", vol->vol_id);
+
+ ubi->volumes[vol->vol_id] = NULL;
+- err = ubi_destroy_gluebi(vol);
++ (void)ubi_destroy_gluebi(vol);
+ cdev_del(&vol->cdev);
+ volume_sysfs_close(vol);
+ }
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/drivers/usb/eth/asix.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/drivers/usb/eth/asix.c
+--- git/drivers/usb/eth/asix.c 2012-06-01 00:56:04.000000000 +0200
++++ git/drivers/usb/eth/asix.c 2012-06-01 01:22:07.000000000 +0200
+@@ -326,7 +326,6 @@
+ {
+ int embd_phy;
+ unsigned char buf[ETH_ALEN];
+- u16 rx_ctl;
+ struct ueth_data *dev = (struct ueth_data *)eth->priv;
+ int timeout = 0;
+ char *addr_str, *end;
+@@ -363,13 +362,11 @@
+ goto out_err;
+ }
+
+- rx_ctl = asix_read_rx_ctl(dev);
+- debug("RX_CTL is 0x%04x after software reset\n", rx_ctl);
++ (void) asix_read_rx_ctl(dev);
+ if (asix_write_rx_ctl(dev, 0x0000) < 0)
+ goto out_err;
+
+- rx_ctl = asix_read_rx_ctl(dev);
+- debug("RX_CTL is 0x%04x setting to 0x0000\n", rx_ctl);
++ (void) asix_read_rx_ctl(dev);
+
+ if ((dev->pusb_dev->descriptor.idVendor == 0x0b95) && (dev->pusb_dev->descriptor.idProduct == 0x772b)) {
+ #define AX_CMD_READ_EEPROM 0x0B
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/fs/jffs2/jffs2_1pass.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/fs/jffs2/jffs2_1pass.c
+--- git/fs/jffs2/jffs2_1pass.c 2012-06-01 00:56:04.000000000 +0200
++++ git/fs/jffs2/jffs2_1pass.c 2012-06-01 01:26:48.000000000 +0200
+@@ -696,7 +696,6 @@
+ u32 latestVersion = 0;
+ uchar *lDest;
+ uchar *src;
+- long ret;
+ int i;
+ u32 counter = 0;
+ #ifdef CONFIG_SYS_JFFS2_SORT_FRAGMENTS
+@@ -768,28 +767,23 @@
+ #endif
+ switch (jNode->compr) {
+ case JFFS2_COMPR_NONE:
+- ret = (unsigned long) ldr_memcpy(lDest, src, jNode->dsize);
++ (void) ldr_memcpy(lDest, src, jNode->dsize);
+ break;
+ case JFFS2_COMPR_ZERO:
+- ret = 0;
+ for (i = 0; i < jNode->dsize; i++)
+ *(lDest++) = 0;
+ break;
+ case JFFS2_COMPR_RTIME:
+- ret = 0;
+ rtime_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ case JFFS2_COMPR_DYNRUBIN:
+ /* this is slow but it works */
+- ret = 0;
+ dynrubin_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ case JFFS2_COMPR_ZLIB:
+- ret = zlib_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ #if defined(CONFIG_JFFS2_LZO)
+ case JFFS2_COMPR_LZO:
+- ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
+ break;
+ #endif
+ default:
+@@ -1575,9 +1569,8 @@
+
+ if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
+ uint32_t inbuf_ofs;
+- uint32_t empty_start, scan_end;
++ uint32_t scan_end;
+
+- empty_start = ofs;
+ ofs += 4;
+ scan_end = min_t(uint32_t, EMPTY_SCAN_SIZE(
+ part->sector_size)/8,
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/include/u-boot/md5.h u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/include/u-boot/md5.h
+--- git/include/u-boot/md5.h 2012-06-01 00:56:04.000000000 +0200
++++ git/include/u-boot/md5.h 2012-06-01 01:44:25.000000000 +0200
+@@ -11,7 +11,10 @@
+ struct MD5Context {
+ __u32 buf[4];
+ __u32 bits[2];
+- unsigned char in[64];
++ union {
++ unsigned char in[64];
++ __u32 in32[16];
++ };
+ };
+
+ /*
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/lib/lzo/lzo1x_decompress.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/lib/lzo/lzo1x_decompress.c
+--- git/lib/lzo/lzo1x_decompress.c 2012-06-01 00:56:04.000000000 +0200
++++ git/lib/lzo/lzo1x_decompress.c 2012-06-01 01:31:29.000000000 +0200
+@@ -32,7 +32,6 @@
+
+ static inline const unsigned char *parse_header(const unsigned char *src)
+ {
+- u8 level = 0;
+ u16 version;
+ int i;
+
+@@ -47,7 +46,6 @@
+ version = get_unaligned_be16(src);
+ src += 7;
+ if (version >= 0x0940)
+- level = *src++;
+ if (get_unaligned_be32(src) & HEADER_HAS_FILTER)
+ src += 4; /* filter info */
+
+diff -Naur u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0.orig/git/lib/md5.c u-boot-r0+gitra86e39a5abbe0a14106bc7ae828fb48a10396a91-r0/git/lib/md5.c
+--- git/lib/md5.c 2012-06-01 00:56:04.000000000 +0200
++++ git/lib/md5.c 2012-06-01 01:42:05.000000000 +0200
+@@ -153,8 +153,8 @@
+ byteReverse(ctx->in, 14);
+
+ /* Append length in bits and transform */
+- ((__u32 *) ctx->in)[14] = ctx->bits[0];
+- ((__u32 *) ctx->in)[15] = ctx->bits[1];
++ ctx->in32[14] = ctx->bits[0];
++ ctx->in32[15] = ctx->bits[1];
+
+ MD5Transform(ctx->buf, (__u32 *) ctx->in);
+ byteReverse((unsigned char *) ctx->buf, 4);
diff --git a/recipes-bsp/u-boot/u-boot-git/u-boot_ap20warning.patch b/recipes-bsp/u-boot/u-boot-git/u-boot_ap20warning.patch
new file mode 100644
index 0000000..d99fc12
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-git/u-boot_ap20warning.patch
@@ -0,0 +1,11 @@
+--- git/arch/arm/cpu/armv7/tegra3/ap20.c 2012-01-28 12:16:25.000000000 +0100
++++ git/arch/arm/cpu/armv7/tegra3/ap20.c~ 2012-01-28 12:42:44.640356495 +0100
+@@ -72,6 +72,8 @@
+ return id == (PG_UP_TAG_0_PID_CPU & 0xff);
+ }
+
++//u-boot treats all errors as warnings, &clkrst->crc_pll[CLOCK_ID_XCPU] uses a subscript out of range
++#pragma GCC diagnostic warning "-Warray-bounds"
+ static int pllx_set_rate(u32 divn, u32 divm, u32 divp, u32 cpcon)
+ {
+ struct clk_rst_ctlr *clkrst = (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
diff --git a/recipes-bsp/u-boot/u-boot.inc b/recipes-bsp/u-boot/u-boot.inc
new file mode 100644
index 0000000..720f995
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot.inc
@@ -0,0 +1,68 @@
+DESCRIPTION = "U-Boot - the Universal Boot Loader"
+HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome"
+SECTION = "bootloaders"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4c6cde5df68eff615d36789dc18edd3b"
+
+PROVIDES = "virtual/bootloader"
+
+DEPENDS = "mtd-utils"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+PARALLEL_MAKE=""
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+
+UBOOT_MACHINE ?= "${MACHINE}_config"
+UBOOT_BINARY ?= "u-boot.bin"
+UBOOT_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.bin"
+UBOOT_SYMLINK ?= "u-boot-${MACHINE}.bin"
+UBOOT_MAKE_TARGET ?= "all"
+
+do_configure () {
+ oe_runmake ${UBOOT_MACHINE}
+}
+
+do_compile () {
+ unset LDFLAGS
+ unset CFLAGS
+ unset CPPFLAGS
+ oe_runmake ${UBOOT_MAKE_TARGET}
+}
+
+do_install () {
+ install -d ${D}/boot
+ install ${S}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
+ ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
+
+ if [ -e ${WORKDIR}/fw_env.config ] ; then
+ install -d ${D}${sysconfdir}
+ install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
+ fi
+
+}
+
+FILES_${PN} = "/boot ${sysconfdir}"
+# no gnu_hash in uboot.bin, by design, so skip QA
+INSANE_SKIP_${PN} = "1"
+
+inherit deploy
+
+addtask deploy before do_package after do_compile
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install ${S}/${UBOOT_BINARY} ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
+
+ cd ${DEPLOY_DIR_IMAGE}
+ rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK}
+ ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK}
+ ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY}
+
+ if [ -e ${S}/MLO ] ; then
+ install ${S}/MLO ${DEPLOY_DIR_IMAGE}/MLO-${MACHINE}-${PV}
+ rm -f ${DEPLOY_DIR_IMAGE}/MLO-${MACHINE} ${DEPLOY_DIR_IMAGE}/MLO
+ ln -sf MLO-${MACHINE}-${PV} ${DEPLOY_DIR_IMAGE}/MLO-${MACHINE}
+ ln -sf MLO-${MACHINE}-${PV} ${DEPLOY_DIR_IMAGE}/MLO
+ fi
+}
diff --git a/recipes-bsp/u-boot/u-boot_git.bb b/recipes-bsp/u-boot/u-boot_git.bb
new file mode 100644
index 0000000..2b32ab8
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot_git.bb
@@ -0,0 +1,61 @@
+require u-boot.inc
+PR ="r68"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_ti814x = "-1"
+DEFAULT_PREFERENCE_ti816x = "-1"
+
+FILESPATHPKG =. "u-boot-git:"
+
+# ~ TI PSP v2009.11_OMAPPSP_03.00.01.06 (+ couple of commits)
+SRC_URI_omap3evm = "git://arago-project.org/git/projects/u-boot-omap3.git;protocol=git \
+ file://0001-omap3evm-Change-default-console-serial-port-from.patch \
+"
+SRCREV_${PN}_omap3evm = "c0a8fb217fdca7888d89f9a3dee74a4cec865620"
+PV_omap3evm = "2009.11+${PR}+gitr${SRCREV}"
+
+# ~ TI PSP v2009.11_OMAPPSP_03.00.01.06 (+ couple of commits)
+SRC_URI_pn-${PN}_am3517-evm = "git://arago-project.org/git/projects/u-boot-omap3.git;protocol=git"
+SRCREV_pn-${PN}_am3517-evm = "c0a8fb217fdca7888d89f9a3dee74a4cec865620"
+PV_pn-${PN}_am3517-evm = "2009.11+${PR}+gitr${SRCREV}"
+
+# ~ TI PSP v2009.11_OMAPPSP_03.00.01.06 (+ couple of commits)
+SRC_URI_am37x-evm = "git://arago-project.org/git/projects/u-boot-omap3.git;protocol=git \
+ file://0001-omap3evm-Change-default-console-serial-port-from.patch \
+"
+SRCREV_pn-${PN}_am37x-evm = "c0a8fb217fdca7888d89f9a3dee74a4cec865620"
+PV_am37x-evm = "2009.11+${PR}+gitr${SRCREV}"
+
+SRC_URI_omap3-touchbook = "git://gitorious.org/u-boot-omap3/mainline.git;branch=omap3-dev;protocol=git \
+ file://fw_env.config \
+ file://dss2.patch \
+ file://600mhz.patch \
+ file://new-pinmux.patch \
+ file://spi3.patch \
+ file://spi4.patch \
+ file://headphone.patch \
+ file://power.patch \
+ file://ai-logo.patch \
+ file://mmcinit.patch \
+ file://touchbook-config.patch \
+ file://dont-inline-weak-symbols.patch \
+"
+SRCREV_pn-${PN}_omap3-touchbook = "d363f9cb0918a1b6b92e2e20d01543d0c4f53274"
+PV_omap3-touchbook = "2009.05+${PR}+gitr${SRCREV}"
+
+# OMAPL1 omapl137/omapl138 - PSP 3.20.0.11
+
+SRC_URI_omapl138 = "git://arago-project.org/git/projects/u-boot-omapl1.git;protocol=http"
+SRCREV_pn-${PN}_omapl138 = "5f16b8551b125f16cd8d58f278cb25b94272fd9f"
+PV_omapl138 = "2009.11+${PR}+gitr${SRCREV}"
+
+# hawkboard - master branch (hawk still .07beta)
+SRC_URI_hawkboard = "git://arago-project.org/git/people/sekhar/u-boot-omapl1.git;protocol=git;branch=master"
+SRC_URI_hawkboard += "file://dont-inline-weak-symbols2.patch"
+SRCREV_pn-${PN}_hawkboard = "0d291f2f255e6d66a78b3dc2445362a96ae39a57"
+PV_hawkboard = "2009.08+gitr${SRCREV}"
+
+
+S = "${WORKDIR}/git"
+
+RRECOMMENDS_${PN}_omap3-touchbook = "u-boot-fw-utils"
diff --git a/recipes-bsp/u-boot/u-boot_git.bbappend b/recipes-bsp/u-boot/u-boot_git.bbappend
new file mode 100644
index 0000000..27ce04a
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot_git.bbappend
@@ -0,0 +1,70 @@
+# Extends the core U-Boot GIT recipe
+# to take the u-boot sources including the colibri stuff from our git repository
+PR ="r1"
+DEPENDS += "dtc-native"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/u-boot-git:"
+
+# Also overwries the license checksum to suit the updated text file in our U-Boot snapshot.
+LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
+
+COMPATIBLE_MACHINE_colibri-t20 = "colibri-t20"
+COMPATIBLE_MACHINE_colibri-t30 = "colibri-t30"
+
+DEFAULT_PREFERENCE_colibri-t20 = "1"
+DEFAULT_PREFERENCE_colibri-t30 = "1"
+
+UBOOT_MACHINE_colibri-t20 = "colibri_t20_config"
+UBOOT_MACHINE_colibri-t30 = "colibri_t30_config"
+
+#gitorious git
+FILESPATHPKG =. "git:"
+S="${WORKDIR}/git"
+SRC_URI_COLIBRI = "git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-u-boot.git;protocol=git;branch=master \
+ file://u-boot-warning.patch \
+ file://u-boot-board-unused.patch \
+"
+
+# file://remove-unused.patch \
+# file://u-boot_ap20warning.patch \
+# file://colibri_t30.patch \
+# file://bootaddr.patch \
+#"
+SRCREV_colibri-t20 = "63c37d9e1d3ea97391576384d237728c44b5e33b"
+SRCREV_colibri-t30 = "63c37d9e1d3ea97391576384d237728c44b5e33b"
+
+PV_colibri-t20 = "${PR}+gitr${SRCREV}"
+PV_colibri-t30 = "${PR}+gitr${SRCREV}"
+
+#internal SVN
+#S = "${WORKDIR}/bootloader/u-boot"
+#SVN_REV = 218
+#SRC_URI_COLIBRI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=bootloader/u-boot;rev=${SVN_REV};proto=http \
+# file://remove-unused.patch "
+
+SRC_URI_colibri-t20 = "${SRC_URI_COLIBRI} "
+SRC_URI_colibri-t30 = "${SRC_URI_COLIBRI} "
+
+#compile with -O2 not -Os as with gcc 4.5 the code does not work
+do_configure_append() {
+ # sed -i -e 's/-Os/-O2 -fno-ipa-sra -fno-caller-saves -fno-schedule-insns/' ${S}/config.mk
+ sed -i -e 's/-Os/-O2 -fno-ipa-sra -fno-caller-saves -fno-schedule-insns -mno-unaligned-access/' ${S}/config.mk
+}
+
+
+#build additionally a u-boot binary which uses/stores its environment on an T20 external sd or mmc card
+do_compile_append_colibri-t20() {
+ mv u-boot.bin u-boot-nand.bin
+ oe_runmake colibri_t20_sdboot_config
+ oe_runmake all
+ mv u-boot.bin u-boot-hsmmc.bin
+ mv u-boot-nand.bin u-boot.bin
+}
+
+UBOOT_IMAGE ?= "u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin"
+do_deploy_append_colibri-t20 () {
+ install ${S}/u-boot-hsmmc.bin ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin
+ ln -sf u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc.bin
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc.bin
+}
diff --git a/recipes-bsp/u-boot/u-boot_git.bbappend.orig b/recipes-bsp/u-boot/u-boot_git.bbappend.orig
new file mode 100644
index 0000000..9a1acc8
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot_git.bbappend.orig
@@ -0,0 +1,23 @@
+# Extends the core U-Boot GIT recipe
+# to take the u-boot sources including the colibri stuff from our git repository
+
+# Also overwries the license checksum to suit the updated text file in our U-Boot snapshot.
+#LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
+
+COMPATIBLE_MACHINE = "omap3-pandora"
+DEFAULT_PREFERENCE_omap3-pandora = "1"
+
+# Latest SRCREV.
+SRCREV_pn-${PN}_omap3-pandora = "55d0d2dd5d07fbfd57309997c38da5281b9824b5"
+
+PR ="r3"
+PV_omap3-pandora = "omap3-pandora+${PR}+gitr${SRCREV}"
+
+SRC_URI_omap3-pandora = "git://git.openpandora.org/pandora-u-boot.git;branch=pandora-2011.12;protocol=git \
+"
+
+UBOOT_MACHINE_omap3-pandora = "omap3_pandora_config"
+
+S = "${WORKDIR}/git"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-bsp/u-boot/u-boot_git.bbappend~ b/recipes-bsp/u-boot/u-boot_git.bbappend~
new file mode 100644
index 0000000..ad1be2f
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot_git.bbappend~
@@ -0,0 +1,68 @@
+# Extends the core U-Boot GIT recipe
+# to take the u-boot sources including the colibri stuff from our git repository
+PR ="r1"
+DEPENDS += "dtc-native"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/u-boot-git:"
+
+# Also overwries the license checksum to suit the updated text file in our U-Boot snapshot.
+LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
+
+COMPATIBLE_MACHINE_colibri-t20 = "colibri-t20"
+COMPATIBLE_MACHINE_colibri-t30 = "colibri-t30"
+
+DEFAULT_PREFERENCE_colibri-t20 = "1"
+DEFAULT_PREFERENCE_colibri-t30 = "1"
+
+UBOOT_MACHINE_colibri-t20 = "colibri_t20_config"
+UBOOT_MACHINE_colibri-t30 = "colibri_t30_config"
+
+#gitorious git
+FILESPATHPKG =. "git:"
+S="${WORKDIR}/git"
+SRC_URI_COLIBRI = "git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-u-boot.git;protocol=git;branch=master \
+ file://u-boot-warning.patch \
+"
+# file://remove-unused.patch \
+# file://u-boot_ap20warning.patch \
+# file://colibri_t30.patch \
+# file://bootaddr.patch \
+#"
+SRCREV_colibri-t20 = "63c37d9e1d3ea97391576384d237728c44b5e33b"
+SRCREV_colibri-t30 = "63c37d9e1d3ea97391576384d237728c44b5e33b"
+
+PV_colibri-t20 = "${PR}+gitr${SRCREV}"
+PV_colibri-t30 = "${PR}+gitr${SRCREV}"
+
+#internal SVN
+#S = "${WORKDIR}/bootloader/u-boot"
+#SVN_REV = 218
+#SRC_URI_COLIBRI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=bootloader/u-boot;rev=${SVN_REV};proto=http \
+# file://remove-unused.patch "
+
+SRC_URI_colibri-t20 = "${SRC_URI_COLIBRI} "
+SRC_URI_colibri-t30 = "${SRC_URI_COLIBRI} "
+
+#compile with -O2 not -Os as with gcc 4.5 the code does not work
+do_configure_append() {
+ # sed -i -e 's/-Os/-O2 -fno-ipa-sra -fno-caller-saves -fno-schedule-insns/' ${S}/config.mk
+ sed -i -e 's/-Os/-O2 -fno-ipa-sra -fno-caller-saves -fno-schedule-insns -mno-unaligned-access/' ${S}/config.mk
+}
+
+
+#build additionally a u-boot binary which uses/stores its environment on an T20 external sd or mmc card
+do_compile_append_colibri-t20() {
+ mv u-boot.bin u-boot-nand.bin
+ oe_runmake colibri_t20_sdboot_config
+ oe_runmake all
+ mv u-boot.bin u-boot-hsmmc.bin
+ mv u-boot-nand.bin u-boot.bin
+}
+
+UBOOT_IMAGE ?= "u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin"
+do_deploy_append_colibri-t20 () {
+ install ${S}/u-boot-hsmmc.bin ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin
+ ln -sf u-boot-hsmmc-${MACHINE}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc.bin
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/u-boot-hsmmc.bin
+}
diff --git a/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.24.1.bbappend b/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.24.1.bbappend
new file mode 100644
index 0000000..42a31fe
--- /dev/null
+++ b/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.24.1.bbappend
@@ -0,0 +1,5 @@
+# build for x11, at least lxpanel needs this
+DEPENDS += "virtual/libx11"
+
+EXTRA_OECONF += "--with-x11"
+
diff --git a/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch b/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch
new file mode 100644
index 0000000..ba947bf
--- /dev/null
+++ b/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch
@@ -0,0 +1,31 @@
+--- kernel/drivers/net/wireless/bcm4329/dhd.h.orig 2012-05-31 08:58:04.000000000 +0200
++++ kernel/drivers/net/wireless/bcm4329/dhd.h 2012-05-31 08:57:10.000000000 +0200
+@@ -1,3 +1,5 @@
++#pragma GCC diagnostic warning "-Wunused-but-set-variable"
++#pragma GCC diagnostic warning "-Warray-bounds"
+ /*
+ * Header file describing the internal (inter-module) DHD interfaces.
+ *
+--- kernel/drivers/net/wireless/bcm4329/siutils_priv.h 2012-05-31 08:57:01.000000000 +0200
++++ kernel/drivers/net/wireless/bcm4329/siutils_priv.h.orig 2012-05-31 09:00:47.000000000 +0200
+@@ -1,3 +1,4 @@
++#pragma GCC diagnostic warning "-Wunused-but-set-variable"
+ /*
+ * Include file private to the SOC Interconnect support files.
+ *
+--- kernel/drivers/net/wireless/bcm4329/dhd_linux.c.orig 2011-12-21 19:54:24.884526348 +0100
++++ kernel/drivers/net/wireless/bcm4329/dhd_linux.c 2011-12-21 18:55:18.974476355 +0100
+@@ -1904,6 +1904,13 @@ dhd_open(struct net_device *net)
+ ifidx = dhd_net2idx(dhd, net);
+ DHD_TRACE(("%s: ifidx %d\n", __FUNCTION__, ifidx));
+
++//max
++ if (ifidx < 0 || ifidx >= DHD_MAX_IFS) {
++ DHD_ERROR(("%s: Error: error ifidx out of range\n", __FUNCTION__));
++ return -1;
++ }
++//end max
++
+ if ((dhd->iflist[ifidx]) && (dhd->iflist[ifidx]->state == WLC_E_IF_DEL)) {
+ DHD_ERROR(("%s: Error: called when IF already deleted\n", __FUNCTION__));
+ return -1;
diff --git a/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch~ b/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch~
new file mode 100644
index 0000000..57ec0ae
--- /dev/null
+++ b/recipes-kernel/linux/files/colibri-t20/bcm4329_warning.patch~
@@ -0,0 +1,31 @@
+--- kernel/drivers/net/wireless/bcm4329/dhd.h.orig 2012-05-31 08:58:04.000000000 +0200
++++ kernel/drivers/net/wireless/bcm4329/dhd.h 2012-05-31 08:57:10.000000000 +0200
+@@ -1,3 +1,5 @@
++#pragma GCC diagnostic warning "-Wunused-but-set-variable"
++#pragma GCC diagnostic warning "-Warray-bounds"
+ /*
+ * Header file describing the internal (inter-module) DHD interfaces.
+ *
+--- kernel/drivers/net/wireless/bcm4329/siutils_priv.h 2012-05-31 08:57:01.000000000 +0200
++++ kernel/drivers/net/wireless/bcm4329/siutils_priv.h.orig 2012-05-31 09:00:47.000000000 +0200
+@@ -1,4 +1,3 @@
++#pragma GCC diagnostic warning "-Wunused-but-set-variable"
+ /*
+ * Include file private to the SOC Interconnect support files.
+ *
+--- kernel/drivers/net/wireless/bcm4329/dhd_linux.c.orig 2011-12-21 19:54:24.884526348 +0100
++++ kernel/drivers/net/wireless/bcm4329/dhd_linux.c 2011-12-21 18:55:18.974476355 +0100
+@@ -1904,6 +1904,13 @@ dhd_open(struct net_device *net)
+ ifidx = dhd_net2idx(dhd, net);
+ DHD_TRACE(("%s: ifidx %d\n", __FUNCTION__, ifidx));
+
++//max
++ if (ifidx < 0 || ifidx >= DHD_MAX_IFS) {
++ DHD_ERROR(("%s: Error: error ifidx out of range\n", __FUNCTION__));
++ return -1;
++ }
++//end max
++
+ if ((dhd->iflist[ifidx]) && (dhd->iflist[ifidx]->state == WLC_E_IF_DEL)) {
+ DHD_ERROR(("%s: Error: called when IF already deleted\n", __FUNCTION__));
+ return -1;
diff --git a/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch b/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch
new file mode 100644
index 0000000..d41c2ea
--- /dev/null
+++ b/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch
@@ -0,0 +1,33 @@
+--- kernel/drivers/net/wireless/bcm4329/dhd_linux.c.orig 2011-12-21 19:54:24.884526348 +0100
++++ kernel/drivers/net/wireless/bcm4329/dhd_linux.c 2011-12-21 18:55:18.974476355 +0100
+@@ -1226,14 +1226,14 @@
+ struct sk_buff *skb;
+ uchar *eth;
+ uint len;
+- void * data, *pnext, *save_pktbuf;
++ void * data, *pnext/*max , *save_pktbuf*/;
+ int i;
+ dhd_if_t *ifp;
+ wl_event_msg_t event;
+
+ DHD_TRACE(("%s: Enter\n", __FUNCTION__));
+
+- save_pktbuf = pktbuf;
++/*max save_pktbuf = pktbuf;*/
+
+ for (i = 0; pktbuf && i < numpkt; i++, pktbuf = pnext) {
+
+@@ -1904,6 +1904,13 @@ dhd_open(struct net_device *net)
+ ifidx = dhd_net2idx(dhd, net);
+ DHD_TRACE(("%s: ifidx %d\n", __FUNCTION__, ifidx));
+
++//max
++ if (ifidx < 0 || ifidx >= DHD_MAX_IFS) {
++ DHD_ERROR(("%s: Error: error ifidx out of range\n", __FUNCTION__));
++ return -1;
++ }
++//end max
++
+ if ((dhd->iflist[ifidx]) && (dhd->iflist[ifidx]->state == WLC_E_IF_DEL)) {
+ DHD_ERROR(("%s: Error: called when IF already deleted\n", __FUNCTION__));
+ return -1;
diff --git a/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch~ b/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch~
new file mode 100644
index 0000000..196fd95
--- /dev/null
+++ b/recipes-kernel/linux/files/colibri-t30/bcm4329_warning.patch~
@@ -0,0 +1,16 @@
+--- kernel/drivers/net/wireless/bcm4329/dhd_linux.c.orig 2011-12-21 19:54:24.884526348 +0100
++++ kernel/drivers/net/wireless/bcm4329/dhd_linux.c 2011-12-21 18:55:18.974476355 +0100
+@@ -1904,6 +1904,13 @@ dhd_open(struct net_device *net)
+ ifidx = dhd_net2idx(dhd, net);
+ DHD_TRACE(("%s: ifidx %d\n", __FUNCTION__, ifidx));
+
++//max
++ if (ifidx < 0 || ifidx >= DHD_MAX_IFS) {
++ DHD_ERROR(("%s: Error: error ifidx out of range\n", __FUNCTION__));
++ return -1;
++ }
++//end max
++
+ if ((dhd->iflist[ifidx]) && (dhd->iflist[ifidx]->state == WLC_E_IF_DEL)) {
+ DHD_ERROR(("%s: Error: called when IF already deleted\n", __FUNCTION__));
+ return -1;
diff --git a/recipes-kernel/linux/files/systemd-koen.patch b/recipes-kernel/linux/files/systemd-koen.patch
new file mode 100644
index 0000000..16b5bb9
--- /dev/null
+++ b/recipes-kernel/linux/files/systemd-koen.patch
@@ -0,0 +1,48 @@
+http://dominion.thruhere.net/koen/cms/recommended-kernel-config-options-for-a-modern-angstrom-system
+old: -rw-r--r-- 1 mk users 3189608 1. Apr 22:14 git/arch/arm/boot/uImage
+new: -rw-r--r-- 1 mk users 3205580 28. Mai 11:43 git/arch/arm/boot/uImage
+--- .config.orig 2012-05-28 11:14:29.000000000 +0200
++++ .config 2012-05-28 11:25:25.000000000 +0200
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+ # Linux kernel version: 2.6.36.2
+-# Sun Apr 1 17:06:26 2012
++# Mon May 28 11:25:25 2012
+ #
+ CONFIG_ARM=y
+ CONFIG_HAVE_PWM=y
+@@ -53,7 +53,10 @@
+ CONFIG_POSIX_MQUEUE=y
+ CONFIG_POSIX_MQUEUE_SYSCTL=y
+ # CONFIG_BSD_PROCESS_ACCT is not set
+-# CONFIG_TASKSTATS is not set
++CONFIG_TASKSTATS=y
++CONFIG_TASK_DELAY_ACCT=y
++CONFIG_TASK_XACCT=y
++CONFIG_TASK_IO_ACCOUNTING=y
+ # CONFIG_AUDIT is not set
+
+ #
+@@ -750,7 +753,8 @@
+ # Generic Driver Options
+ #
+ CONFIG_UEVENT_HELPER_PATH=""
+-# CONFIG_DEVTMPFS is not set
++CONFIG_DEVTMPFS=y
++CONFIG_DEVTMPFS_MOUNT=y
+ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ CONFIG_FW_LOADER=y
+@@ -2137,9 +2141,9 @@
+ CONFIG_INOTIFY_USER=y
+ # CONFIG_QUOTA is not set
+ # CONFIG_AUTOFS_FS is not set
+-# CONFIG_AUTOFS4_FS is not set
++CONFIG_AUTOFS4_FS=y
+ CONFIG_FUSE_FS=y
+-# CONFIG_CUSE is not set
++CONFIG_CUSE=y
+
+ #
+ # Caches
diff --git a/recipes-kernel/linux/linux-colibri-t20_git.bb b/recipes-kernel/linux/linux-colibri-t20_git.bb
new file mode 100644
index 0000000..be91e90
--- /dev/null
+++ b/recipes-kernel/linux/linux-colibri-t20_git.bb
@@ -0,0 +1,39 @@
+inherit kernel
+require recipes-kernel/linux/linux.inc
+
+LINUX_VERSION ?= "2.6.36.2"
+
+SRCREV = "99003b6bd73fd8ce4f2bd63a1c7b63f8c3d0cf68"
+
+PV = "2.6.36.2+gitr${SRCREV}"
+PR = "V1.1b1"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-linux-kernel.git;protocol=git;branch=master \
+ file://bcm4329_warning.patch "
+
+#SVN_REV = 190
+#PV = "2.6.36.2"
+#PR = "${SVN_REV}"
+#S = "${WORKDIR}/kernel"
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=kernel;rev=${SVN_REV};proto=http \
+# file://bcm4329_warning.patch "
+
+COMPATIBLE_MACHINE = "colibri-t20"
+
+CMDLINE="mem=148M@0M fbmem=12M@148M nvmem=96M@160M vmalloc=248M video=tegrafb root=/dev/nfs ip=:::::eth0:on rw netdevwait mtdparts=tegra_nand:1018368K@28160K(userspace) console=ttyS0,115200n8 usb_high_speed=0"
+
+do_configure_prepend_colibri-t20() {
+ #use the defconfig provided in the kernel source tree
+ install -m 0644 ${S}/arch/arm/configs/colibri_t20_defconfig ${WORKDIR}/defconfig
+
+ #compile with -O2, 4.5. compiler seems to fail with -Os
+# sed -i -e /CONFIG_CC_OPTIMIZE_FOR_SIZE/d ${WORKDIR}/defconfig
+# echo "CONFIG_CC_OPTIMIZE_FOR_SIZE=n" >> ${WORKDIR}/defconfig
+
+ #compile with -mno-unaligned-access, with 4.7 compiler the kernel fails
+ echo "KBUILD_CFLAGS += -mno-unaligned-access" >> ${S}/Makefile
+}
+
+#require recipes-kernel/linux/linux-tools.inc
+
diff --git a/recipes-kernel/linux/linux-colibri-t20_git.bb.bak b/recipes-kernel/linux/linux-colibri-t20_git.bb.bak
new file mode 100644
index 0000000..ea6fb17
--- /dev/null
+++ b/recipes-kernel/linux/linux-colibri-t20_git.bb.bak
@@ -0,0 +1,37 @@
+inherit kernel
+require recipes-kernel/linux/linux.inc
+
+LINUX_VERSION ?= "2.6.36.2"
+
+SRCREV = "99003b6bd73fd8ce4f2bd63a1c7b63f8c3d0cf68"
+
+PV = "2.6.36.2+gitr${SRCREV}"
+PR = "V1.0b6"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-linux-kernel.git;protocol=git;branch=master \
+ systemd-koen.patch \
+"
+
+#SVN_REV = 190
+#PV = "2.6.36.2"
+#PR = "${SVN_REV}"
+#S = "${WORKDIR}/kernel"
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=kernel;rev=${SVN_REV};proto=http \
+# file://bcm4329_warning.patch "
+
+COMPATIBLE_MACHINE = "colibri-t20"
+
+CMDLINE="mem=148M@0M fbmem=12M@148M nvmem=96M@160M vmalloc=248M video=tegrafb root=/dev/nfs ip=:::::eth0:on rw netdevwait mtdparts=tegra_nand:1018368K@28160K(userspace) console=ttyS0,115200n8 usb_high_speed=0"
+
+do_configure_prepend_colibri-t20() {
+ #use the defconfig provided in the kernel source tree
+ install -m 0644 ${S}/arch/arm/configs/colibri_t20_defconfig ${WORKDIR}/defconfig
+
+ #compile with -O2, 4.5. compiler seems to fail with -Os
+# sed -i -e /CONFIG_CC_OPTIMIZE_FOR_SIZE/d ${WORKDIR}/defconfig
+# echo "CONFIG_CC_OPTIMIZE_FOR_SIZE=n" >> ${WORKDIR}/defconfig
+}
+
+#require recipes-kernel/linux/linux-tools.inc
+
diff --git a/recipes-kernel/linux/linux-colibri-t20_git.bb.orig b/recipes-kernel/linux/linux-colibri-t20_git.bb.orig
new file mode 100644
index 0000000..4e9f3d2
--- /dev/null
+++ b/recipes-kernel/linux/linux-colibri-t20_git.bb.orig
@@ -0,0 +1,35 @@
+inherit kernel
+require linux.inc
+
+LINUX_VERSION ?= "2.6.36.2"
+
+SRCREV = "70b151768728d3f372b2895a1497f3297c8e2bbb"
+PV = "2.6.36.2+gitr${SRCREV}"
+PR = "V1.0b5"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-linux-kernel.git;protocol=git;branch=master \
+"
+
+#SVN_REV = 190
+#PV = "2.6.36.2"
+#PR = "${SVN_REV}"
+#S = "${WORKDIR}/kernel"
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=kernel;rev=${SVN_REV};proto=http \
+# file://bcm4329_warning.patch "
+
+COMPATIBLE_MACHINE = "colibri-t20"
+
+CMDLINE="mem=148M@0M fbmem=12M@148M nvmem=96M@160M vmalloc=248M video=tegrafb root=/dev/nfs ip=:::::eth0:on rw netdevwait mtdparts=tegra_nand:1018368K@28160K(userspace) console=ttyS0,115200n8 usb_high_speed=0"
+
+do_configure_prepend_colibri-t20() {
+ #use the defconfig provided in the kernel source tree
+ install -m 0644 ${S}/arch/arm/configs/colibri_t20_defconfig ${WORKDIR}/defconfig
+
+ #compile with -O2, 4.5. compiler seems to fail with -Os
+# sed -i -e /CONFIG_CC_OPTIMIZE_FOR_SIZE/d ${WORKDIR}/defconfig
+# echo "CONFIG_CC_OPTIMIZE_FOR_SIZE=n" >> ${WORKDIR}/defconfig
+}
+
+require linux-tools.inc
+
diff --git a/recipes-kernel/linux/linux-colibri-t20_git.bb~ b/recipes-kernel/linux/linux-colibri-t20_git.bb~
new file mode 100644
index 0000000..233f087
--- /dev/null
+++ b/recipes-kernel/linux/linux-colibri-t20_git.bb~
@@ -0,0 +1,36 @@
+inherit kernel
+require recipes-kernel/linux/linux.inc
+
+LINUX_VERSION ?= "2.6.36.2"
+
+SRCREV = "99003b6bd73fd8ce4f2bd63a1c7b63f8c3d0cf68"
+
+PV = "2.6.36.2+gitr${SRCREV}"
+PR = "V1.0b6"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-linux-kernel.git;protocol=git;branch=master \
+ file://bcm4329_warning.patch "
+
+#SVN_REV = 190
+#PV = "2.6.36.2"
+#PR = "${SVN_REV}"
+#S = "${WORKDIR}/kernel"
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=kernel;rev=${SVN_REV};proto=http \
+# file://bcm4329_warning.patch "
+
+COMPATIBLE_MACHINE = "colibri-t20"
+
+CMDLINE="mem=148M@0M fbmem=12M@148M nvmem=96M@160M vmalloc=248M video=tegrafb root=/dev/nfs ip=:::::eth0:on rw netdevwait mtdparts=tegra_nand:1018368K@28160K(userspace) console=ttyS0,115200n8 usb_high_speed=0"
+
+do_configure_prepend_colibri-t20() {
+ #use the defconfig provided in the kernel source tree
+ install -m 0644 ${S}/arch/arm/configs/colibri_t20_defconfig ${WORKDIR}/defconfig
+
+ #compile with -O2, 4.5. compiler seems to fail with -Os
+ sed -i -e /CONFIG_CC_OPTIMIZE_FOR_SIZE/d ${WORKDIR}/defconfig
+ echo "CONFIG_CC_OPTIMIZE_FOR_SIZE=n" >> ${WORKDIR}/defconfig
+}
+
+#require recipes-kernel/linux/linux-tools.inc
+
diff --git a/recipes-kernel/linux/linux-colibri-t30_git.bb.bak b/recipes-kernel/linux/linux-colibri-t30_git.bb.bak
new file mode 100644
index 0000000..9fb8c90
--- /dev/null
+++ b/recipes-kernel/linux/linux-colibri-t30_git.bb.bak
@@ -0,0 +1,38 @@
+inherit kernel
+require recipes-kernel/linux/linux.inc
+
+LINUX_VERSION ?= "2.6.36.2"
+
+SRCREV = "99003b6bd73fd8ce4f2bd63a1c7b63f8c3d0cf68"
+
+PV = "2.6.36.2+gitr${SRCREV}"
+PR = "V1.0b6"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://gitorious.org/colibri-t20-embedded-linux-bsp/colibri_t20-linux-kernel.git;protocol=git;branch=master \
+ file://bcm4329_warning.patch \
+"
+
+#SVN_REV = 217
+#PV = "2.6.36.3"
+#PR = "${SVN_REV}"
+#S = "${WORKDIR}/linux-nv-tegra"
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=kernel;rev=${SVN_REV};proto=http \
+#SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/branches;module=linux-nv-tegra;rev=${SVN_REV};proto=http \
+ "
+
+COMPATIBLE_MACHINE = "colibri-t30"
+
+CMDLINE="mem=148M@0M nvmem=96M@160M vmalloc=248M video=tegrafb root=/dev/nfs ip=:::::eth0:on rw netdevwait mtdparts=tegra_nand:1018368K@28160K(userspace) console=ttyS0,115200n8 usb_high_speed=0"
+
+do_configure_prepend_colibri-t30() {
+ #use the defconfig provided in the kernel source tree
+ #install -m 0644 ${S}/arch/arm/configs/colibri_t30_defconfig ${WORKDIR}/defconfig
+ install -m 0644 ${S}/arch/arm/configs/colibri_t20_defconfig ${WORKDIR}/defconfig
+ #compile with -O2, 4.5. compiler seems to fail with -Os
+# sed -i -e /CONFIG_CC_OPTIMIZE_FOR_SIZE/d ${WORKDIR}/defconfig
+# echo "CONFIG_CC_OPTIMIZE_FOR_SIZE=n" >> ${WORKDIR}/defconfig
+}
+
+#require recipes-kernel/linux/linux-tools.inc
+
diff --git a/recipes-kernel/linux/linux.inc b/recipes-kernel/linux/linux.inc
new file mode 100644
index 0000000..6996283
--- /dev/null
+++ b/recipes-kernel/linux/linux.inc
@@ -0,0 +1,282 @@
+DESCRIPTION = "Linux Kernel"
+SECTION = "kernel"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+
+inherit kernel siteinfo
+
+# Try to build & install perf
+require recipes-kernel/linux/linux-tools.inc
+
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+
+# Enable OABI compat for people stuck with obsolete userspace
+ARM_KEEP_OABI ?= "1"
+
+# Quirk for udev greater or equal 141
+UDEV_GE_141 ?= "0"
+
+# Specify the commandline for your device
+
+# Boot from mmc
+CMDLINE_at91sam9263ek = "mem=64M console=ttyS0,115200 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=5"
+# Boot from nfs
+#CMDLINE_at91sam9263ek = "mem=64M console=ttyS0,115200 root=301 root=/dev/nfs nfsroot=172.20.3.1:/data/at91 ip=172.20.0.5:::255.255.0.0"
+
+# Set the verbosity of kernel messages during runtime
+# You can define CMDLINE_DEBUG in your local.conf or distro.conf to override this behaviour
+CMDLINE_DEBUG ?= '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug", d)}'
+CMDLINE_append = " ${CMDLINE_DEBUG} "
+
+# Kernel bootlogo is distro-specific (default is OE logo).
+# Logo resolution (qvga, vga, ...) is machine-specific.
+LOGO_SIZE ?= "."
+
+# Support for binary device tree generation
+
+FILES_kernel-devicetree = "/boot/devicetree*"
+
+KERNEL_DEVICETREE_boc01 = "${WORKDIR}/boc01.dts"
+KERNEL_DEVICETREE_calamari = "arch/${ARCH}/boot/dts/mpc8536ds.dts"
+KERNEL_DEVICETREE_canyonlands = "arch/${ARCH}/boot/dts/canyonlands.dts"
+KERNEL_DEVICETREE_kilauea = "arch/${ARCH}/boot/dts/kilauea.dts"
+KERNEL_DEVICETREE_lite5200 = "arch/${ARCH}/boot/dts/lite5200.dts"
+KERNEL_DEVICETREE_lsppchd = "arch/${ARCH}/boot/dts/kuroboxHD.dts"
+KERNEL_DEVICETREE_lsppchg = "arch/${ARCH}/boot/dts/kuroboxHG.dts"
+KERNEL_DEVICETREE_mpc8313e-rdb = "arch/${ARCH}/boot/dts/mpc8313erdb.dts"
+KERNEL_DEVICETREE_mpc8315e-rdb = "arch/${ARCH}/boot/dts/mpc8315erdb.dts"
+KERNEL_DEVICETREE_mpc8323e-rdb = "arch/${ARCH}/boot/dts/mpc832x_rdb.dts"
+KERNEL_DEVICETREE_mpc8544ds = "arch/${ARCH}/boot/dts/mpc8544ds.dts"
+KERNEL_DEVICETREE_mpc8641-hpcn = "arch/${ARCH}/boot/dts/mpc8641_hpcn.dts"
+KERNEL_DEVICETREE_p1020rdb = "arch/${ARCH}/boot/dts/p1020rdb.dts"
+KERNEL_DEVICETREE_p2020ds = "arch/${ARCH}/boot/dts/p2020ds.dts"
+KERNEL_DEVICETREE_sequoia = "arch/${ARCH}/boot/dts/sequoia.dts"
+KERNEL_DEVICETREE_tqm8540 = "arch/${ARCH}/boot/dts/tqm8540.dts"
+KERNEL_DEVICETREE_xilinx-ml507 = "arch/${ARCH}/boot/dts/virtex440-ml507.dts"
+
+KERNEL_DEVICETREE_FLAGS = "-R 8 -S 0x3000"
+
+CORTEXA8FIXUP ?= "yes"
+
+python __anonymous () {
+
+ import bb
+
+ devicetree = bb.data.getVar('KERNEL_DEVICETREE', d, 1) or ''
+ if devicetree:
+ depends = bb.data.getVar("DEPENDS", d, 1)
+ bb.data.setVar("DEPENDS", "%s dtc-native" % depends, d)
+ packages = bb.data.getVar("PACKAGES", d, 1)
+ bb.data.setVar("PACKAGES", "%s kernel-devicetree" % packages, d)
+}
+
+do_configure_prepend() {
+
+ # Rename getline in ./scripts/unifdef.c
+ # Kernels up to 2.6.29 are currently failing to build unifdef.c,
+ # clashing with exposed getline() from <stdio.h>
+ # see https://patchwork.kernel.org/patch/11166/
+ # committed in 2.6.29 (commit d15bd1067b1fcb2b7250d22bc0c7c7fea0b759f7)
+
+ sed -i -e 's/getline/parseline/g' ${S}/scripts/unifdef.c
+
+
+ echo "" > ${S}/.config
+
+ #
+ # logo support, if you supply logo_linux_clut224.ppm in SRC_URI, then it's going to be used
+ #
+ if [ -e ${WORKDIR}/${LOGO_SIZE}/logo_linux_clut224.ppm ]; then
+ install -m 0644 ${WORKDIR}/${LOGO_SIZE}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
+ echo "CONFIG_LOGO=y" >> ${S}/.config
+ echo "CONFIG_LOGO_LINUX_CLUT224=y" >> ${S}/.config
+ fi
+
+ #
+ # oabi / eabi support
+ #
+ if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibceabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ if [ "${ARM_KEEP_OABI}" = "1" ] ; then
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ # When enabling thumb for userspace we also need thumb support in the kernel
+ if [ "${ARM_INSTRUCTION_SET}" = "thumb" ] ; then
+ sed -i -e /CONFIG_ARM_THUMB/d ${WORKDIR}/defconfig
+ echo "CONFIG_ARM_THUMB=y" >> ${S}/.config
+ fi
+
+ # Enable thumb2 fixup for specific issue in angstrom toolchains when used on A8 r1p[012] silicon
+ if [ "${CORTEXA8FIXUP}" = "yes" ] ; then
+ sed -i -e /CONFIG_ARM_ERRATA_430973/d ${WORKDIR}/defconfig
+ echo "CONFIG_ARM_ERRATA_430973=y" >> ${S}/.config
+ fi
+
+ #
+ # endian support
+ #
+ if [ "${SITEINFO_ENDIANNESS}" = "be" ]; then
+ echo "CONFIG_CPU_BIG_ENDIAN=y" >> ${S}/.config
+ fi
+
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ -e '/CONFIG_CPU_BIG_ENDIAN/d' \
+ -e '/CONFIG_LOGO=/d' \
+ -e '/CONFIG_LOGO_LINUX_CLUT224=/d' \
+ -e '/CONFIG_LOCALVERSION/d' \
+ -e '/CONFIG_LOCALVERSION_AUTO/d' \
+ < '${WORKDIR}/defconfig' >>'${S}/.config'
+
+ echo 'CONFIG_LOCALVERSION=""' >>${S}/.config
+ echo '# CONFIG_LOCALVERSION_AUTO is not set' >>${S}/.config
+
+ #
+ # Udev quirks
+ #
+
+ # Newer versions of udev mandate that sysfs doesn't have deprecated entries
+ if [ "${UDEV_GE_141}" = "1" ] ; then
+ sed -e /CONFIG_SYSFS_DEPRECATED/d \
+ -e /CONFIG_SYSFS_DEPRECATED_V2/d \
+ -e /CONFIG_HOTPLUG/d \
+ -e /CONFIG_UEVENT_HELPER_PATH/d \
+ -e /CONFIG_UNIX/d \
+ -e /CONFIG_SYSFS/d \
+ -e /CONFIG_PROC_FS/d \
+ -e /CONFIG_TMPFS/d \
+ -e /CONFIG_INOTIFY_USER/d \
+ -e /CONFIG_SIGNALFD/d \
+ -e /CONFIG_TMPFS_POSIX_ACL/d \
+ -e /CONFIG_BLK_DEV_BSG/d \
+ -i '${S}/.config'
+
+ echo '# CONFIG_SYSFS_DEPRECATED is not set' >> ${S}/.config
+ echo '# CONFIG_SYSFS_DEPRECATED_V2 is not set' >> ${S}/.config
+ echo 'CONFIG_HOTPLUG=y' >> ${S}/.config
+ echo 'CONFIG_UEVENT_HELPER_PATH=""' >> ${S}/.config
+ echo 'CONFIG_UNIX=y' >> ${S}/.config
+ echo 'CONFIG_SYSFS=y' >> ${S}/.config
+ echo 'CONFIG_PROC_FS=y' >> ${S}/.config
+ echo 'CONFIG_TMPFS=y' >> ${S}/.config
+ echo 'CONFIG_INOTIFY_USER=y' >> ${S}/.config
+ echo 'CONFIG_SIGNALFD=y' >> ${S}/.config
+ echo 'CONFIG_TMPFS_POSIX_ACL=y' >> ${S}/.config
+ echo 'CONFIG_BLK_DEV_BSG=y' >> ${S}/.config
+ echo 'CONFIG_DEVTMPFS=y' >> ${S}/.config
+ echo 'CONFIG_DEVTMPFS_MOUNT=y' >> ${S}/.config
+ fi
+
+ # Newer inits like systemd need cgroup support
+ if [ "${KERNEL_ENABLE_CGROUPS}" = "1" ] ; then
+ sed -e /CONFIG_CGROUP_SCHED/d \
+ -e /CONFIG_CGROUPS/d \
+ -i '${S}/.config'
+
+ echo 'CONFIG_CGROUP_SCHED=y' >> ${S}/.config
+ echo 'CONFIG_CGROUPS=y' >> ${S}/.config
+ echo 'CONFIG_CGROUP_NS=y' >> ${S}/.config
+ echo 'CONFIG_CGROUP_FREEZER=y' >> ${S}/.config
+ echo 'CONFIG_CGROUP_DEVICE=y' >> ${S}/.config
+ echo 'CONFIG_CPUSETS=y' >> ${S}/.config
+ echo 'CONFIG_PROC_PID_CPUSET=y' >> ${S}/.config
+ echo 'CONFIG_CGROUP_CPUACCT=y' >> ${S}/.config
+ echo 'CONFIG_RESOURCE_COUNTERS=y' >> ${S}/.config
+ fi
+
+ #
+ # root-over-nfs-over-usb-eth support. Limited, but should cover some cases.
+ # Enable this by setting a proper CMDLINE_NFSROOT_USB.
+ #
+ if [ ! -z "${CMDLINE_NFSROOT_USB}" ]; then
+ oenote "Configuring the kernel for root-over-nfs-over-usb-eth with CMDLINE ${CMDLINE_NFSROOT_USB}"
+ sed -e '/CONFIG_INET/d' \
+ -e '/CONFIG_IP_PNP=/d' \
+ -e '/CONFIG_USB_GADGET=/d' \
+ -e '/CONFIG_USB_GADGET_SELECTED=/d' \
+ -e '/CONFIG_USB_ETH=/d' \
+ -e '/CONFIG_NFS_FS=/d' \
+ -e '/CONFIG_ROOT_NFS=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ -i ${S}/.config
+ echo "CONFIG_INET=y" >> ${S}/.config
+ echo "CONFIG_IP_PNP=y" >> ${S}/.config
+ echo "CONFIG_USB_GADGET=y" >> ${S}/.config
+ echo "CONFIG_USB_GADGET_SELECTED=y" >> ${S}/.config
+ echo "CONFIG_USB_ETH=y" >> ${S}/.config
+ echo "CONFIG_NFS_FS=y" >> ${S}/.config
+ echo "CONFIG_ROOT_NFS=y" >> ${S}/.config
+ echo "CONFIG_CMDLINE=\"${CMDLINE_NFSROOT_USB}\"" >> ${S}/.config
+ fi
+ yes '' | oe_runmake oldconfig
+}
+
+do_configure_append() {
+ if test -e scripts/Makefile.fwinst ; then
+ sed -i -e "s:-m0644:-m 0644:g" scripts/Makefile.fwinst
+ fi
+}
+
+# bitbake.conf only prepends PARALLEL make in tasks called do_compile, which isn't the case for compile_modules
+# So explicitly enable it for that in here
+EXTRA_OEMAKE = "${PARALLEL_MAKE} "
+
+do_install_append() {
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix}/src/linux-${KERNEL_VERSION} ARCH=$ARCH
+}
+
+PACKAGES =+ "kernel-headers"
+FILES_kernel-headers = "${exec_prefix}/src/linux*"
+
+do_devicetree_image() {
+ if test -n "${KERNEL_DEVICETREE}" ; then
+ dtc -I dts -O dtb ${KERNEL_DEVICETREE_FLAGS} -o devicetree ${KERNEL_DEVICETREE}
+ install -d ${D}/boot
+ install -m 0644 devicetree ${D}/boot/devicetree-${KERNEL_VERSION}
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 devicetree ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb
+ cd ${DEPLOY_DIR_IMAGE}
+ rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ fi
+}
+
+addtask devicetree_image after do_install before do_package do_deploy
+
+pkg_postinst_kernel-devicetree () {
+ cd /${KERNEL_IMAGEDEST}; update-alternatives --install /${KERNEL_IMAGEDEST}/devicetree devicetree devicetree-${KERNEL_VERSION} ${KERNEL_PRIORITY} || true
+}
+
+pkg_postrm_kernel-devicetree () {
+ cd /${KERNEL_IMAGEDEST}; update-alternatives --remove devicetree devicetree-${KERNEL_VERSION} || true
+}
+
+# Automatically depend on lzop-native if CONFIG_KERNEL_LZO is enabled
+python () {
+ try:
+ defconfig = bb.fetch2.localpath('file://defconfig', d)
+ except bb.fetch2.FetchError:
+ return
+
+ try:
+ configfile = open(defconfig)
+ except IOError:
+ return
+
+ if 'CONFIG_KERNEL_LZO=y\n' in configfile.readlines():
+ depends = d.getVar('DEPENDS', False)
+ d.setVar('DEPENDS', depends + ' lzop-native')
+}
diff --git a/recipes-lxde/lxappearance-obconf/lxappearance-obconf_0.0.1.bb b/recipes-lxde/lxappearance-obconf/lxappearance-obconf_0.0.1.bb
new file mode 100644
index 0000000..7fe349c
--- /dev/null
+++ b/recipes-lxde/lxappearance-obconf/lxappearance-obconf_0.0.1.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "LXDE Appearance Obconfig"
+HOMEPAGE = "http://lxde.org/"
+SECTION = "x11"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9d19a9495cc76dc96b703fb4aa157183"
+
+DEPENDS = "menu-cache lxappearance"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "7c6381bc1ff60e23ef7f31d5e70a1803"
+SRC_URI[sha256sum] = "0a7390ba9e59c132b1a82dbf766a4b472007cc891e5c7574f7f03088faa332b9"
+
+inherit autotools gettext pkgconfig
+
+FILES_${PN} += "${datadir}/lxappearance/obconf/obconf.glade \
+ ${libdir}/lxappearance/plugins/obconf.so"
+FILES_${PN}-dbg += "${libdir}/lxappearance/plugins/.debug/obconf.so"
+
+FILES_${PN}-dev += "${libdir}/lxappearance/plugins/obconf.la \
+ ${libdir}/lxappearance/plugins/obconf.a "
diff --git a/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb b/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb
new file mode 100644
index 0000000..cb88752
--- /dev/null
+++ b/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "LXDE Launcher"
+HOMEPAGE = "http://lxde.org/"
+SECTION = "x11"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "menu-cache gtk+"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "16df627447838b170a72cc3a9ee21497"
+SRC_URI[sha256sum] = "ad586e3a2668f98bbf0217ec1be1f8f1be4ff876b180a407c7db2fe354303cbc"
+
+FILE_${pn} += "${datadir}/desktop-directories/*"
+
+inherit autotools gettext pkgconfig
+
diff --git a/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb~ b/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb~
new file mode 100644
index 0000000..2bc07ab
--- /dev/null
+++ b/recipes-lxde/lxlauncher/lxlauncher_0.2.2.bb~
@@ -0,0 +1,17 @@
+DESCRIPTION = "LXDE Launcher"
+HOMEPAGE = "http://lxde.org/"
+SECTION = "x11"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9d19a9495cc76dc96b703fb4aa157183"
+
+DEPENDS = "menu-cache gtk+"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "16df627447838b170a72cc3a9ee21497"
+SRC_URI[sha256sum] = "ad586e3a2668f98bbf0217ec1be1f8f1be4ff876b180a407c7db2fe354303cbc"
+
+FILE_${pn} += "${datadir}/desktop-directories/*"
+
+inherit autotools gettext pkgconfig
+
diff --git a/recipes-lxde/lxrandr/lxrandr_0.1.2.bb b/recipes-lxde/lxrandr/lxrandr_0.1.2.bb
new file mode 100644
index 0000000..9673d87
--- /dev/null
+++ b/recipes-lxde/lxrandr/lxrandr_0.1.2.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "LXDE Randr graphical frontend"
+HOMEPAGE = "http://lxde.org/"
+SECTION = "x11"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "xrandr gtk+"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "8a7391581541bba58839ac11dbf5b575"
+SRC_URI[sha256sum] = "fb8139478f6cfeac6a2d8adb4e55e8cad099bfe2da7c82253c935ba719f9cf19"
+
+inherit autotools gettext pkgconfig
diff --git a/recipes-lxde/lxrandr/lxrandr_0.1.2.bb~ b/recipes-lxde/lxrandr/lxrandr_0.1.2.bb~
new file mode 100644
index 0000000..9ac3d35
--- /dev/null
+++ b/recipes-lxde/lxrandr/lxrandr_0.1.2.bb~
@@ -0,0 +1,14 @@
+DESCRIPTION = "LXDE Randr graphical frontend"
+HOMEPAGE = "http://lxde.org/"
+SECTION = "x11"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "xrandr gtk+"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "8a7391581541bba58839ac11dbf5b575"
+SRC_URI[sha256sum] = "fb8139478f6cfeac6a2d8adb4e55e8cad099bfe2da7c82253c935ba719f9cf19"
+
+inherit autotools gettext pkgconfig
diff --git a/recipes/base-files/base-files/colibri-t20/fstab b/recipes/base-files/base-files/colibri-t20/fstab
new file mode 100644
index 0000000..fea4501
--- /dev/null
+++ b/recipes/base-files/base-files/colibri-t20/fstab
@@ -0,0 +1,14 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+debugfs /sys/kernel/debug debugfs defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbfs /proc/bus/usb usbfs defaults 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
diff --git a/recipes/base-files/base-files/colibri-t30/fstab b/recipes/base-files/base-files/colibri-t30/fstab
new file mode 100644
index 0000000..fea4501
--- /dev/null
+++ b/recipes/base-files/base-files/colibri-t30/fstab
@@ -0,0 +1,14 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+debugfs /sys/kernel/debug debugfs defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbfs /proc/bus/usb usbfs defaults 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
diff --git a/recipes/base-files/base-files_3.0.14.bbappend b/recipes/base-files/base-files_3.0.14.bbappend
new file mode 100644
index 0000000..1615df3
--- /dev/null
+++ b/recipes/base-files/base-files_3.0.14.bbappend
@@ -0,0 +1,5 @@
+PRINC = "2"
+
+THISDIR := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}"
+FILESPATH =. "${@base_set_filespath(["${THISDIR}/${PN}"], d)}:"
+
diff --git a/recipes/flash-plugins/files/bin-files.tar.bz2 b/recipes/flash-plugins/files/bin-files.tar.bz2
new file mode 100644
index 0000000..1e79cb5
--- /dev/null
+++ b/recipes/flash-plugins/files/bin-files.tar.bz2
Binary files differ
diff --git a/recipes/flash-plugins/files/staging/libflashplayer.so b/recipes/flash-plugins/files/staging/libflashplayer.so
new file mode 100644
index 0000000..a570c92
--- /dev/null
+++ b/recipes/flash-plugins/files/staging/libflashplayer.so
Binary files differ
diff --git a/recipes/flash-plugins/files/staging/libysshared.so b/recipes/flash-plugins/files/staging/libysshared.so
new file mode 100644
index 0000000..ca59fd1
--- /dev/null
+++ b/recipes/flash-plugins/files/staging/libysshared.so
Binary files differ
diff --git a/recipes/flash-plugins/flash-plugins.bb b/recipes/flash-plugins/flash-plugins.bb
new file mode 100644
index 0000000..5e6fc5e
--- /dev/null
+++ b/recipes/flash-plugins/flash-plugins.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "binary netscape plugins for flash support"
+LICENSE = "CLOSED"
+#licensing required"
+
+PR = "r1"
+
+SRC_URI = "file://bin-files.tar.bz2 \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += " \
+ /usr/lib/* \
+ "
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+#we have symlinks ending in .so , remove "dev-so", refere to ./openembedded-core/meta/classes/insane.bbclass
+ERROR_QA = "arch la2 pkgconfig la perms"
+
+do_install () {
+ install -d ${D} ${D}/usr/lib/firefox-3.6.8/plugins
+ install -m 0755 ${WORKDIR}/*.so ${D}/usr/lib/firefox-3.6.8/plugins/
+}
diff --git a/recipes/flash-plugins/flash-plugins.bb~ b/recipes/flash-plugins/flash-plugins.bb~
new file mode 100644
index 0000000..ee67936
--- /dev/null
+++ b/recipes/flash-plugins/flash-plugins.bb~
@@ -0,0 +1,24 @@
+DESCRIPTION = "binary netscape plugins for flash support"
+LICENSE = "CLOSED"
+#licensing required"
+
+PR = "r1"
+
+SRC_URI = "file://bin-files.tar.bz2 \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += " \
+ /usr/lib/* \
+ "
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+
+do_install () {
+ install -d ${D} ${D}/usr/lib/firefox-3.6.8/plugins
+ install -m 0755 ${WORKDIR}/*.so ${D}/usr/lib/firefox-3.6.8/plugins/
+}
diff --git a/recipes/gpioconfig/files/GPIOConfig.desktop b/recipes/gpioconfig/files/GPIOConfig.desktop
new file mode 100755
index 0000000..18467ab
--- /dev/null
+++ b/recipes/gpioconfig/files/GPIOConfig.desktop
@@ -0,0 +1,11 @@
+#!/usr/bin/env xdg-open
+
+[Desktop Entry]
+Version=1.0
+Type=Application
+Terminal=false
+Icon[C]=GPIOConfig.png
+Exec=/usr/bin/GPIOConfig
+Name[C]=GPIOConfig
+Name=GPIOConfig
+Icon=GPIOConfig.png
diff --git a/recipes/gpioconfig/files/GPIOConfig.desktop~ b/recipes/gpioconfig/files/GPIOConfig.desktop~
new file mode 100755
index 0000000..4a0e9ac
--- /dev/null
+++ b/recipes/gpioconfig/files/GPIOConfig.desktop~
@@ -0,0 +1,11 @@
+#!/usr/bin/env xdg-open
+
+[Desktop Entry]
+Version=1.0
+Type=Application
+Terminal=false
+Icon[C]=gnome-panel-launcher
+Exec=/usr/bin/GPIOConfig
+Name[C]=GPIOConfig
+Name=GPIOConfig
+Icon=/usr/share/pixmaps/GPIOConfig.png
diff --git a/recipes/gpioconfig/files/GPIOConfig.png b/recipes/gpioconfig/files/GPIOConfig.png
new file mode 100644
index 0000000..2227e81
--- /dev/null
+++ b/recipes/gpioconfig/files/GPIOConfig.png
Binary files differ
diff --git a/recipes/gpioconfig/files/Makefile b/recipes/gpioconfig/files/Makefile
new file mode 100755
index 0000000..2b0143d
--- /dev/null
+++ b/recipes/gpioconfig/files/Makefile
@@ -0,0 +1,31 @@
+CROSS_COMPILE ?= /vibrante/toolchains/tegra2-4.4.1-nv/bin/arm-none-linux-gnueabi-
+CC ?= $(CROSS_COMPILE)gcc
+STRIP ?= $(CROSS_COMPILE)strip
+
+SYSROOT_DIR=/srv/nfs/rootfs-include-lib-gtk
+prefix = ""
+bindir = $(prefix)/usr/bin
+
+CFLAGS ?= -Wall -g -O2 `pkg-config --cflags gtk+-2.0`
+
+#DRV = gpio_usr_drv
+
+PROG = GPIOConfig
+
+OBJS = gpio_gtk.o custom-list.o gpio_usr_drv.o
+
+all: $(OBJS)
+# $(CC) -o $(DRV) $(DRV).c
+ $(CC) -o $(PROG) $(OBJS) $(LDFLAGS) `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -L $(SYSROOT_DIR)/usr/lib -Wl,--allow-shlib-undefined
+ $(STRIP) $(PROG)
+
+%o: %c
+ $(CC) $(CFLAGS) $(CPPFLAGS) `pkg-config --cflags gtk+-2.0` -c $<
+
+clean:
+ rm -f $(DRV) $(PROG) $(OBJS) *.o~ *.h~ 2>/dev/null
+
+install:
+ install -d $(bindir)
+ install $(PROG) $(bindir)
+
diff --git a/recipes/gpioconfig/gpioconfig.bb b/recipes/gpioconfig/gpioconfig.bb
new file mode 100644
index 0000000..2c27a46
--- /dev/null
+++ b/recipes/gpioconfig/gpioconfig.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "GPIOConfig tool for Colibri T20"
+SECTION = "base"
+LICENSE = "propriatry"
+PR = "r3"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+DEPENDS = "gtk+"
+RDEPENDS = "gtk+"
+
+S = "${WORKDIR}/target-utils/GPIOConfig"
+
+SVN_REV = "190"
+SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=target-utils/GPIOConfig;rev=${SVN_REV};proto=http"
+#SRC_URI += "file://Makefile"
+SRC_URI += "file://GPIOConfig.desktop"
+SRC_URI += "file://GPIOConfig.png"
+
+PACKAGES = "${PN}"
+
+# just don't do any configuring
+do_configure() {
+}
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -d ${D}/${datadir}/applications
+ install -d ${D}/${datadir}/pixmaps
+ install ${S}/GPIOConfig ${D}/${bindir}
+ install ${WORKDIR}/GPIOConfig.desktop ${D}/${datadir}/applications
+ install ${WORKDIR}/GPIOConfig.png ${D}/${datadir}/pixmaps/GPIOConfig.png
+}
+
+pkg_postinst_${PN}() {
+ mkdir -p ${base_prefix}/home/root/Desktop
+ cp ${datadir}/applications/GPIOConfig.desktop ${base_prefix}/home/root/Desktop/
+}
+
+pkg_postremove_${PN}() {
+ rm -f ${base_prefix}/home/Desktop/GPIOConfig.desktop
+}
+
+
+
diff --git a/recipes/gpioconfig/gpioconfig.bb~ b/recipes/gpioconfig/gpioconfig.bb~
new file mode 100644
index 0000000..e5e6435
--- /dev/null
+++ b/recipes/gpioconfig/gpioconfig.bb~
@@ -0,0 +1,44 @@
+DESCRIPTION = "GPIOConfig tool for Colibri T20"
+SECTION = "base"
+LICENSE = "propriatry"
+PR = "r3"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+DEPENDS = "gtk+"
+RDEPENDS = "gtk+"
+
+S = "${WORKDIR}/target-utils/GPIOConfig"
+
+SVN_REV = "230"
+SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=target-utils/GPIOConfig;rev=${SVN_REV};proto=http"
+#SRC_URI += "file://Makefile"
+SRC_URI += "file://GPIOConfig.desktop"
+SRC_URI += "file://GPIOConfig.png"
+
+PACKAGES = "${PN}"
+
+# just don't do any configuring
+do_configure() {
+}
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -d ${D}/${datadir}/applications
+ install -d ${D}/${datadir}/pixmaps
+ install ${S}/GPIOConfig ${D}/${bindir}
+ install ${WORKDIR}/GPIOConfig.desktop ${D}/${datadir}/applications
+ install ${WORKDIR}/GPIOConfig.png ${D}/${datadir}/pixmaps/GPIOConfig.png
+}
+
+pkg_postinst_${PN}() {
+ mkdir -p ${base_prefix}/home/root/Desktop
+ cp ${datadir}/applications/GPIOConfig.desktop ${base_prefix}/home/root/Desktop/
+}
+
+pkg_postremove_${PN}() {
+ rm -f ${base_prefix}/home/Desktop/GPIOConfig.desktop
+}
+
+
+
diff --git a/recipes/images/angstrom-lxde-image.bb b/recipes/images/angstrom-lxde-image.bb
new file mode 100644
index 0000000..1b7b314
--- /dev/null
+++ b/recipes/images/angstrom-lxde-image.bb
@@ -0,0 +1,102 @@
+#Angstrom image
+DESCRIPTION = "Image based on the LXDE desktop"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+#create the file /etc/timestamp
+IMAGE_PREPROCESS_COMMAND = "rootfs_update_timestamp"
+
+#IMAGE_LINGUAS = ""
+#IMAGE_LINGUAS = "en-us"
+#IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
+#ROOTFS_POSTPROCESS_COMMAND += 'install_linguas; '
+
+#MAYBE WE WILL NEED THESE ALSO:
+# xorg-minimal-fonts xserver-xorg-multimedia-modules xerver-xorg-utils xrandr
+
+IMAGE_SPLASH = "psplash-angstrom"
+
+DISTRO_UPDATE_ALTERNATIVES ??= ""
+ROOTFS_PKGMANAGE_PKGS ?= '${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${ROOTFS_PKGMANAGE} ${DISTRO_UPDATE_ALTERNATIVES}", d)}'
+
+CONMANPKGS ?= "connman connman-plugin-loopback connman-plugin-ethernet connman-plugin-wifi connman-systemd"
+CONMANPKGS_libc-uclibc = ""
+
+DEPENDS += "gst-plugins-good gst-plugins-bad gst-plugins-ugly"
+
+# Additional X libs not pulled in by any package \
+# xtrans libxdamage libxvmc libxinerama libxevie \
+
+# Required for starting X but not RDEPEND by the using package \
+# libxcursor \
+
+# glib-2.0 has some additional packages which are not pulled in, let's do this here \
+# gobject-2.0 gmodule-2.0 gthread-2.0 gio-2.0 \
+
+# this would pull in a large amount of gst-plugins, we only add a selected few
+# gst-plugins-base-meta \
+# gst-plugins-good-meta \
+# gst-plugins-bad-meta \
+# gst-ffmpeg \
+
+# needed by nvidia commandline player \
+# libpcre \
+
+IMAGE_INSTALL += " \
+ angstrom-task-boot \
+ task-basic \
+ ${CONMANPKGS} \
+ ${ROOTFS_PKGMANAGE_PKGS} \
+ task-base-extended \
+ ${IMAGE_SPLASH} \
+ ${XSERVER} \
+ \
+ libxdamage libxvmc libxinerama \
+ libxcursor \
+ \
+ bash \
+ tinylogin \
+ \
+ gstreamer \
+ gst-plugins-base \
+ gst-plugins-base-alsa \
+ gst-plugins-base-audioconvert \
+ gst-plugins-base-audioresample \
+ gst-plugins-base-audiotestsrc \
+ gst-plugins-base-decodebin \
+ gst-plugins-base-decodebin2 \
+ gst-plugins-base-playbin \
+ gst-plugins-base-typefindfunctions \
+ gst-plugins-base-ivorbisdec \
+ gst-plugins-base-ogg \
+ gst-plugins-base-theora \
+ gst-plugins-base-videotestsrc \
+ gst-plugins-base-vorbis \
+ gst-plugins-good-matroska \
+ gst-plugins-good-rtp \
+ gst-plugins-good-udp \
+ gst-plugins-good-avi \
+ gst-plugins-good-wavenc \
+ gst-plugins-good-wavparse \
+ gst-plugins-ugly-asf \
+ libpcre \
+ libxcomposite \
+ firefox \
+ flash-plugins \
+"
+#libxevie
+# gst-plugin-qtdemux \
+# gst-plugin-mpegdemux \
+
+include lx.inc
+include trdx-extra.inc
+
+IMAGE_DEV_MANAGER = "udev"
+IMAGE_INIT_MANAGER = "sysvinit sysvinit-pidof"
+IMAGE_INITSCRIPTS = "initscripts"
+IMAGE_LOGIN_MANAGER = "tinylogin shadow"
+
+export IMAGE_BASENAME = "LXDE-image"
+
+inherit image
diff --git a/recipes/images/angstrom-lxde-image.bb~ b/recipes/images/angstrom-lxde-image.bb~
new file mode 100644
index 0000000..8e39f51
--- /dev/null
+++ b/recipes/images/angstrom-lxde-image.bb~
@@ -0,0 +1,103 @@
+#Angstrom image
+DESCRIPTION = "Image based on the LXDE desktop"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+#create the file /etc/timestamp
+IMAGE_PREPROCESS_COMMAND = "rootfs_update_timestamp"
+
+#IMAGE_LINGUAS = ""
+#IMAGE_LINGUAS = "en-us"
+#IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
+#ROOTFS_POSTPROCESS_COMMAND += 'install_linguas; '
+
+#MAYBE WE WILL NEED THESE ALSO:
+# xorg-minimal-fonts xserver-xorg-multimedia-modules xerver-xorg-utils xrandr
+
+IMAGE_SPLASH = "psplash-angstrom"
+
+DISTRO_UPDATE_ALTERNATIVES ??= ""
+ROOTFS_PKGMANAGE_PKGS ?= '${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${ROOTFS_PKGMANAGE} ${DISTRO_UPDATE_ALTERNATIVES}", d)}'
+
+CONMANPKGS ?= "connman connman-plugin-loopback connman-plugin-ethernet connman-plugin-wifi connman-systemd"
+CONMANPKGS_libc-uclibc = ""
+
+DEPENDS += "gst-plugins-good gst-plugins-bad gst-plugins-ugly"
+
+# Additional X libs not pulled in by any package \
+# xtrans libxdamage libxvmc libxinerama libxevie \
+
+# Required for starting X but not RDEPEND by the using package \
+# libxcursor \
+
+# glib-2.0 has some additional packages which are not pulled in, let's do this here \
+# gobject-2.0 gmodule-2.0 gthread-2.0 gio-2.0 \
+
+# this would pull in a large amount of gst-plugins, we only add a selected few
+# gst-plugins-base-meta \
+# gst-plugins-good-meta \
+# gst-plugins-bad-meta \
+# gst-ffmpeg \
+
+# needed by nvidia commandline player \
+# libpcre \
+
+IMAGE_INSTALL += " \
+ angstrom-task-boot \
+ task-basic \
+ ${CONMANPKGS} \
+ ${ROOTFS_PKGMANAGE_PKGS} \
+ task-base-extended \
+ ${IMAGE_SPLASH} \
+ ${XSERVER} \
+ \
+ libxdamage libxvmc libxinerama \
+ libxcursor \
+ xtrans \
+ \
+ bash \
+ tinylogin \
+ \
+ gstreamer \
+ gst-plugins-base \
+ gst-plugins-base-alsa \
+ gst-plugins-base-audioconvert \
+ gst-plugins-base-audioresample \
+ gst-plugins-base-audiotestsrc \
+ gst-plugins-base-decodebin \
+ gst-plugins-base-decodebin2 \
+ gst-plugins-base-playbin \
+ gst-plugins-base-typefindfunctions \
+ gst-plugins-base-ivorbisdec \
+ gst-plugins-base-ogg \
+ gst-plugins-base-theora \
+ gst-plugins-base-videotestsrc \
+ gst-plugins-base-vorbis \
+ gst-plugins-good-matroska \
+ gst-plugins-good-rtp \
+ gst-plugins-good-udp \
+ gst-plugins-good-avi \
+ gst-plugins-good-wavenc \
+ gst-plugins-good-wavparse \
+ gst-plugins-ugly-asf \
+ libpcre \
+ libxcomposite \
+ firefox \
+ flash-plugins \
+"
+#libxevie
+# gst-plugin-qtdemux \
+# gst-plugin-mpegdemux \
+
+include lx.inc
+include trdx-extra.inc
+
+IMAGE_DEV_MANAGER = "udev"
+IMAGE_INIT_MANAGER = "sysvinit sysvinit-pidof"
+IMAGE_INITSCRIPTS = "initscripts"
+IMAGE_LOGIN_MANAGER = "tinylogin shadow"
+
+export IMAGE_BASENAME = "LXDE-image"
+
+inherit image
diff --git a/recipes/images/console-trdx-image.bb b/recipes/images/console-trdx-image.bb
new file mode 100644
index 0000000..5531579
--- /dev/null
+++ b/recipes/images/console-trdx-image.bb
@@ -0,0 +1,43 @@
+#Angstrom image
+DESCRIPTION = "Image booting to a console"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+#create the file /etc/timestamp
+IMAGE_PREPROCESS_COMMAND = "rootfs_update_timestamp"
+
+#IMAGE_LINGUAS = ""
+#IMAGE_LINGUAS = "en-us"
+#IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
+#ROOTFS_POSTPROCESS_COMMAND += 'install_linguas; '
+
+ZZAPSPLASH = ' ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)}'
+
+DISTRO_UPDATE_ALTERNATIVES ??= ""
+ROOTFS_PKGMANAGE_PKGS ?= '${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${ROOTFS_PKGMANAGE} ${DISTRO_UPDATE_ALTERNATIVES}", d)}'
+
+CONMANPKGS ?= "connman connman-plugin-loopback connman-plugin-ethernet connman-plugin-wifi connman-systemd"
+CONMANPKGS_libc-uclibc = ""
+
+
+IMAGE_INSTALL += " \
+ angstrom-task-boot \
+ task-basic \
+ ${CONMANPKGS} \
+ ${ROOTFS_PKGMANAGE_PKGS} \
+ task-base-extended \
+ ${SPLASH} \
+ ${ZZAPSPLASH} \
+"
+
+include trdx-extra.inc
+
+IMAGE_DEV_MANAGER = "udev"
+IMAGE_INIT_MANAGER = "sysvinit sysvinit-pidof"
+IMAGE_INITSCRIPTS = "initscripts"
+IMAGE_LOGIN_MANAGER = "tinylogin shadow"
+
+export IMAGE_BASENAME = "console-trdx-image"
+
+inherit image
diff --git a/recipes/images/console-trdx-image.bb~ b/recipes/images/console-trdx-image.bb~
new file mode 100644
index 0000000..8d56094
--- /dev/null
+++ b/recipes/images/console-trdx-image.bb~
@@ -0,0 +1,44 @@
+#Angstrom image
+DESCRIPTION = "Image booting to a console"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+#create the file /etc/timestamp
+IMAGE_PREPROCESS_COMMAND = "rootfs_update_timestamp"
+
+#IMAGE_LINGUAS = ""
+#IMAGE_LINGUAS = "en-us"
+#IMAGE_LINGUAS = "de-de fr-fr en-gb en-us pt-br es-es kn-in ml-in ta-in"
+#ROOTFS_POSTPROCESS_COMMAND += 'install_linguas; '
+
+ZZAPSPLASH = ' ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)}'
+
+DISTRO_UPDATE_ALTERNATIVES ??= ""
+ROOTFS_PKGMANAGE_PKGS ?= '${@base_conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "${ROOTFS_PKGMANAGE} ${DISTRO_UPDATE_ALTERNATIVES}", d)}'
+
+CONMANPKGS ?= "connman connman-plugin-loopback connman-plugin-ethernet connman-plugin-wifi connman-systemd"
+CONMANPKGS_libc-uclibc = ""
+
+
+IMAGE_INSTALL += " \
+ angstrom-task-boot \
+ task-basic \
+ ${CONMANPKGS} \
+ ${ROOTFS_PKGMANAGE_PKGS} \
+ task-base-extended \
+ ${ANGSTROM_EXTRA_INSTALL} \
+ ${SPLASH} \
+ ${ZZAPSPLASH} \
+"
+
+include trdx-extra.inc
+
+IMAGE_DEV_MANAGER = "udev"
+IMAGE_INIT_MANAGER = "sysvinit sysvinit-pidof"
+IMAGE_INITSCRIPTS = "initscripts"
+IMAGE_LOGIN_MANAGER = "tinylogin shadow"
+
+export IMAGE_BASENAME = "console-trdx-image"
+
+inherit image
diff --git a/recipes/images/lx.inc b/recipes/images/lx.inc
new file mode 100644
index 0000000..9716522
--- /dev/null
+++ b/recipes/images/lx.inc
@@ -0,0 +1,39 @@
+IMAGE_INSTALL += " \
+ task-lxde-extended \
+ \
+ xinput-calibrator \
+ \
+ lxde-common \
+ openbox \
+ openbox-theme-clearlooks \
+ openbox-theme-onyx \
+ lxde-icon-theme \
+ hicolor-icon-theme \
+ lxdm \
+ lxsession \
+ lxmenu-data \
+ menu-cache \
+ lxappearance \
+ obconf \
+ lxrandr \
+ lxpanel \
+ \
+ lxtask \
+ lxpolkit \
+ lxsession-edit \
+ \
+ lxshortcut \
+ lxlauncher \
+ pcmanfm \
+ leafpad \
+ gpicview \
+ lxterminal \
+ lxinput \
+"
+# angstrom-task-lxde \
+# task-lxde-xserver \
+# task-lxde-xserver-base \
+# lxappearance-obconf \
+# xkbd \
+# xcursor-themes \
+# policykit-gnome \
diff --git a/recipes/images/lx.inc~ b/recipes/images/lx.inc~
new file mode 100644
index 0000000..1d9cfad
--- /dev/null
+++ b/recipes/images/lx.inc~
@@ -0,0 +1,39 @@
+IMAGE_INSTALL += " \
+ task-lxde-extended \
+ \
+ xinput-calibrator \
+ \
+ lxde-common \
+ openbox \
+ openbox-theme-clearlooks \
+ openbox-theme-onyx \
+ lxde-icon-theme \
+ hicolor-icon-theme \
+ lxdm \
+ lxsession \
+ lxmenu-data \
+ menu-cache \
+ lxappearance \
+ obconf \
+ lxpanel \
+ \
+ lxtask \
+ lxpolkit \
+ lxsession-edit \
+ \
+ lxshortcut \
+ lxlauncher \
+ pcmanfm \
+ leafpad \
+ gpicview \
+ lxterminal \
+ lxinput \
+"
+# angstrom-task-lxde \
+# task-lxde-xserver \
+# task-lxde-xserver-base \
+# xkbd \
+# xcursor-themes \
+# lxappearance-obconf \
+# lxrandr \
+# policykit-gnome \
diff --git a/recipes/images/trdx-extra.inc b/recipes/images/trdx-extra.inc
new file mode 100644
index 0000000..145e6f5
--- /dev/null
+++ b/recipes/images/trdx-extra.inc
@@ -0,0 +1,56 @@
+#additional packages to include in our Toradex images
+
+#the following builds cross gdb
+DEPENDS += "gdb-cross"
+
+#the gdb recipe provides gdbserver
+DEPENDS += "gdb"
+
+IMAGE_INSTALL_MACHINE_colibri-t20 += " \
+ trdx-odm \
+"
+IMAGE_INSTALL_MACHINE += " \
+"
+
+IMAGE-INSTALL += " \
+ alsa-utils \
+ alsa-utils-aplay \
+ alsa-utils-amixer \
+ \
+ \
+ aspell \
+ consolekit \
+ sqlite3 \
+ \
+ curl \
+ ntp \
+ nfs-utils-client \
+ openssh-scp \
+ openssh-sftp \
+ pam-plugin-ck-connector \
+ \
+ bzip2 \
+ gdbserver \
+ grep \
+ joe \
+ ldd \
+ mtd-utils \
+ update-modules \
+ \
+ hdparm \
+ iperf \
+ memtester \
+ stress \
+ lmbench \
+ nbench-byte \
+ \
+ trdx-nv-binaries \
+ ${IMAGE_INSTALL_MACHINE} \
+ trdx-config \
+ \
+ trdx-oak-sensors \
+"
+# tegrastats \
+# gpioconfig \
+# openssl-conf \
+# ntpclient \
diff --git a/recipes/images/trdx-extra.inc.orig b/recipes/images/trdx-extra.inc.orig
new file mode 100644
index 0000000..09d7d09
--- /dev/null
+++ b/recipes/images/trdx-extra.inc.orig
@@ -0,0 +1,52 @@
+#additional packages to include in our Toradex images
+
+#the following would build cross gdb
+#DEPENDS += "gdb-cross"
+
+#the gdb recipe provides gdbserver
+DEPENDS += "gdb"
+
+IMAGE_INSTALL += " alsa-utils \
+ alsa-utils-aplay \
+ alsa-utils-amixer \
+ \
+ \
+ aspell \
+ consolekit \
+ sqlite3 \
+ \
+ curl \
+ nfs-utils-client \
+ openssh-scp \
+ openssh-sftp \
+ openssl-conf \
+ ntpclient \
+ pam-plugin-ck-connector \
+ \
+ bzip2 \
+ gdbserver \
+ grep \
+ joe \
+ ldd \
+ mtd-utils \
+ update-modules \
+ \
+ hdparm \
+ iperf \
+ memtester \
+ stress \
+ lmbench \
+ nbench-byte \
+ \
+ tegrastats \
+ trdx-nv-binaries \
+ trdx-config \
+ gpioconfig \
+ \
+ trdx-oak-sensors \
+ "
+
+IMAGE_INSTALL_colibri-t20 += " \
+ trdx-odm \
+ "
+
diff --git a/recipes/images/trdx-extra.inc~ b/recipes/images/trdx-extra.inc~
new file mode 100644
index 0000000..df14875
--- /dev/null
+++ b/recipes/images/trdx-extra.inc~
@@ -0,0 +1,55 @@
+#additional packages to include in our Toradex images
+
+#the following builds cross gdb
+DEPENDS += "gdb-cross"
+
+#the gdb recipe provides gdbserver
+DEPENDS += "gdb"
+
+IMAGE_INSTALL_MACHINE_colibri-t20 += " \
+ trdx-odm \
+"
+IMAGE_INSTALL_MACHINE += " \
+"
+
+IMAGE-INSTALL += " \
+ alsa-utils \
+ alsa-utils-aplay \
+ alsa-utils-amixer \
+ \
+ \
+ aspell \
+ consolekit \
+ sqlite3 \
+ \
+ curl \
+ nfs-utils-client \
+ openssh-scp \
+ openssh-sftp \
+ pam-plugin-ck-connector \
+ \
+ bzip2 \
+ gdbserver \
+ grep \
+# joe \
+ ldd \
+ mtd-utils \
+ update-modules \
+ \
+ hdparm \
+ iperf \
+ memtester \
+ stress \
+ lmbench \
+ nbench-byte \
+ \
+ trdx-nv-binaries \
+ ${IMAGE_INSTALL_MACHINE} \
+ trdx-config \
+ \
+ trdx-oak-sensors \
+"
+# tegrastats \
+# gpioconfig \
+# openssl-conf \
+# ntpclient \
diff --git a/recipes/joe/joe_3.1.bb b/recipes/joe/joe_3.1.bb
new file mode 100644
index 0000000..9c2a2b2
--- /dev/null
+++ b/recipes/joe/joe_3.1.bb
@@ -0,0 +1,15 @@
+SECTION = "console/utils"
+DESCRIPTION = "Console text editor with good functionality, good choice for vi-haters."
+HOMEPAGE = "http://joe-editor.sourceforge.net/"
+LICENSE ="GPL"
+RDEPENDS_${PN} = "ncurses-terminfo"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/joe-editor/joe-${PV}.tar.gz"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da10ed7cf8038981c580e11c1d3e8fb6"
+
+PR = "r3"
+
+inherit autotools
+
+SRC_URI[md5sum] = "2a6ef018870fca9b7df85401994fb0e0"
+SRC_URI[sha256sum] = "252390e4bc687957f09f334095904c8cc53b39c7b663ed47861ae1d11aef5946"
diff --git a/recipes/joe/joe_3.1.bb~ b/recipes/joe/joe_3.1.bb~
new file mode 100644
index 0000000..75eb049
--- /dev/null
+++ b/recipes/joe/joe_3.1.bb~
@@ -0,0 +1,15 @@
+SECTION = "console/utils"
+DESCRIPTION = "Console text editor with good functionality, good choice for vi-haters."
+HOMEPAGE = "http://joe-editor.sourceforge.net/"
+LICENSE ="GPLv1"
+RDEPENDS_${PN} = "ncurses-terminfo"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/joe-editor/joe-${PV}.tar.gz"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da10ed7cf8038981c580e11c1d3e8fb6"
+
+PR = "r3"
+
+inherit autotools
+
+SRC_URI[md5sum] = "2a6ef018870fca9b7df85401994fb0e0"
+SRC_URI[sha256sum] = "252390e4bc687957f09f334095904c8cc53b39c7b663ed47861ae1d11aef5946"
diff --git a/recipes/stress/stress_1.0.0.bb b/recipes/stress/stress_1.0.0.bb
new file mode 100644
index 0000000..9614ab1
--- /dev/null
+++ b/recipes/stress/stress_1.0.0.bb
@@ -0,0 +1,14 @@
+# stress .bb build file
+# Copyright (C) 2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see /COPYING)
+
+HOMEPAGE="http://weather.ou.edu/~apw/projects/stress/"
+DESCRIPTION = "a simple tool that imposes certain types of compute stress on UNIX-like operating systems."
+LICENSE = "GPL"
+
+inherit autotools
+
+SRC_URI="http://weather.ou.edu/~apw/projects/stress/stress-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "d693ff044ac7d34f8aaea202cd96f679"
+SRC_URI[sha256sum] = "778126fdcc3ecb54d4a8dad6164001603bcc3b79ba64b3c2c5285275bc0cbedf"
diff --git a/recipes/stress/stress_1.0.4.bb b/recipes/stress/stress_1.0.4.bb
new file mode 100644
index 0000000..8b8fd9f
--- /dev/null
+++ b/recipes/stress/stress_1.0.4.bb
@@ -0,0 +1,15 @@
+# stress .bb build file
+# Copyright (C) 2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see /COPYING)
+
+HOMEPAGE="http://weather.ou.edu/~apw/projects/stress/"
+DESCRIPTION = "a simple tool that imposes certain types of compute stress on UNIX-like operating systems."
+LICENSE = "GPL"
+
+inherit autotools
+
+SRC_URI="http://weather.ou.edu/~apw/projects/stress/stress-${PV}.tar.gz"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI[md5sum] = "a607afa695a511765b40993a64c6e2f4"
+SRC_URI[sha256sum] = "369c997f65e8426ae8b318d4fdc8e6f07a311cfa77cc4b25dace465c582163c0" \ No newline at end of file
diff --git a/recipes/stress/stress_1.0.4.bb~ b/recipes/stress/stress_1.0.4.bb~
new file mode 100644
index 0000000..5c2da31
--- /dev/null
+++ b/recipes/stress/stress_1.0.4.bb~
@@ -0,0 +1,15 @@
+# stress .bb build file
+# Copyright (C) 2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see /COPYING)
+
+HOMEPAGE="http://weather.ou.edu/~apw/projects/stress/"
+DESCRIPTION = "a simple tool that imposes certain types of compute stress on UNIX-like operating systems."
+LICENSE = "GPL"
+
+inherit autotools
+
+SRC_URI="http://weather.ou.edu/~apw/projects/stress/stress-${PV}.tar.gz"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd6c0b07c871f890801cda80e9ab8e4a"
+
+SRC_URI[md5sum] = "a607afa695a511765b40993a64c6e2f4"
+SRC_URI[sha256sum] = "369c997f65e8426ae8b318d4fdc8e6f07a311cfa77cc4b25dace465c582163c0" \ No newline at end of file
diff --git a/recipes/tegrastats-gtk/files/Makefile b/recipes/tegrastats-gtk/files/Makefile
new file mode 100644
index 0000000..bed9164
--- /dev/null
+++ b/recipes/tegrastats-gtk/files/Makefile
@@ -0,0 +1,17 @@
+CFLAGS_LOC = -Wall `pkg-config --cflags gtk+-2.0`
+LDFLAGS_LOC = `pkg-config --libs gtk+-2.0`
+
+CC = gcc
+
+OBJS = main.o stats.o
+
+all: tegrastats-gtk
+
+.c.o :
+ $(CC) $(CFLAGS) $(CFLAGS_LOC) -c $<
+
+tegrastats-gtk: $(OBJS)
+ $(CC) $(GTK_LIB) $(X11_LIB) $(OBJS) -o $@ $(LDFLAGS) $(LDFLAGS_LOC)
+
+clean:
+ rm -f *.o *~ helloworld
diff --git a/recipes/tegrastats-gtk/files/main.c b/recipes/tegrastats-gtk/files/main.c
new file mode 100644
index 0000000..973bd47
--- /dev/null
+++ b/recipes/tegrastats-gtk/files/main.c
@@ -0,0 +1,975 @@
+/*
+ * Copyright (c) 2009-2011 NVIDIA Corporation. All Rights Reserved.
+ *
+ * NVIDIA Corporation and its licensors retain all intellectual property and
+ * proprietary rights in and to this software and related documentation. Any
+ * use, reproduction, disclosure or distribution of this software and related
+ * documentation without an express license agreement from NVIDIA Corporation
+ * is strictly prohibited.
+ */
+
+#define GTK_OUTPUT
+
+#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <string.h>
+#include <dirent.h>
+#include <fnmatch.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#ifndef GTK_OUTPUT
+#if !NV_IS_LDK
+ #include <utils/Log.h>
+ #undef LOG_TAG
+ #define LOG_TAG "TegraStats"
+#else
+ #include <string.h>
+ #define LOGE(...) \
+ do { \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+ } while (0)
+
+ #define LOGI(...) \
+ do { \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+ } while (0)
+#endif
+
+#define PRINTE(toLog, logFile, ...) \
+do{ \
+ if (toLog && (logFile != NULL)) \
+ { \
+ fprintf(logFile, __VA_ARGS__); \
+ fprintf(logFile, "\n"); \
+ } \
+ else \
+ { \
+ LOGE(__VA_ARGS__); \
+ } \
+}while(0)
+#endif
+#define NVMAP_BASE_PATH "/sys/devices/platform/tegra-nvmap/misc/nvmap/"
+#define CARVEOUT(x) NVMAP_BASE_PATH "heap-generic-0/" # x
+#define IRAM(x) NVMAP_BASE_PATH "heap-iram/" # x
+
+#define EDP_LIMIT_DEBUGFS_PATH "/sys/kernel/debug/edp_limit"
+#define DVFS_CLOCKS_BASE_PATH "/sys/kernel/debug/clock/"
+#define EMCCLK DVFS_CLOCKS_BASE_PATH "emc/rate"
+#define AVPCLK DVFS_CLOCKS_BASE_PATH "avp.sclk/rate"
+#define VDECLK DVFS_CLOCKS_BASE_PATH "vde/rate"
+
+#define READ_VALUE(bToLog, logFile, path, pvalue) { \
+ f = fopen(path, "r"); \
+ if (f) { \
+ (void) fscanf(f, "%d", pvalue); \
+ fclose(f); \
+ } else { \
+ PRINTE(bToLog, logFile, "Failed to open %s", path); \
+ } \
+}
+
+#define NUM_SLOTS 11
+#define PAGE_SIZE 4096
+#define FREQUENCY_CONVERT 1000
+#define AP20_CHIPID 20
+#define T30_CHIPID 30
+#define ALLOC_BUFFER_SIZE 1024
+
+/* Prototypes. */
+
+#ifndef GTK_OUTPUT
+int main(int argc, char *argv[]);
+#endif
+
+static void logFlush(void);
+static int B2MB(int bytes);
+static int kB2MB(int kiloBytes);
+static int B2kB(int bytes);
+static int SmartB2Str(char* str, size_t size, int bytes);
+#ifndef GTK_OUTPUT
+static void setFreq(int setMax);
+static long processdir(const struct dirent *dir);
+static void signal_handler(int signal);
+static int filter(const struct dirent *dir);
+#endif
+static int getChipId(void);
+
+/* Store clk values to restore later */
+// Assuming clk frequencies are same for both CPUs
+unsigned int cpuclk[2];
+
+FILE *f = NULL;
+FILE *logFile = NULL;
+
+/* Functions. */
+
+static void logFlush(void)
+{
+#if NV_IS_LDK
+ // need to fflush on LDK to make output redirectable
+ fflush(stdout);
+#endif
+ if ((logFile != NULL) && (fileno(logFile) != -1))
+ {
+ fflush(logFile);
+ }
+}
+
+static int B2MB(int bytes)
+{
+ bytes += (1<<19)-1; // rounding
+ return bytes >> 20;
+}
+
+static int kB2MB(int kiloBytes)
+{
+ kiloBytes += (1<<9)-1; // rounding
+ return kiloBytes >> 10;
+}
+
+static int B2kB(int bytes)
+{
+ bytes += (1<<9)-1; // rounding
+ return bytes >> 10;
+}
+
+static int SmartB2Str(char* str, size_t size, int bytes)
+{
+ if (bytes < 1024)
+ {
+ return snprintf(str, size, "%dB", bytes);
+ }
+ else if (bytes < 1024*1024)
+ {
+ return snprintf(str, size, "%dkB", B2kB(bytes));
+ }
+ else
+ {
+ return snprintf(str, size, "%dMB", B2MB(bytes));
+ }
+}
+#ifndef GTK_OUTPUT
+
+static void setFreq(int setMax)
+{
+ FILE* f;
+ LOGI("setFreq %d", setMax);
+
+ if (!cpuclk[0]) {
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", "r");
+ if (f)
+ {
+ fscanf(f, "%u", &cpuclk[0]);
+ while(fscanf(f, "%u", &cpuclk[1]) != EOF);
+
+ LOGI("cpuclk: minfreq = %u maxfreq = %u\n", cpuclk[0], cpuclk[1]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_available_frequencies");
+ }
+ }
+ if (setMax)
+ {
+ // set CPU frequency to highest value
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "w");
+ if (f)
+ {
+ fprintf(f, "%u", cpuclk[1]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_min_freq\n");
+ }
+ }
+ else
+ {
+ // set default
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "w");
+ if (f)
+ {
+ fprintf(f, "%u", cpuclk[0]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_min_freq\n");
+ }
+ }
+}
+
+static long processdir(const struct dirent *dir)
+{
+ char path[256];
+ char linkinfo[256];
+
+ memset(path, 0, sizeof path);
+ memset(linkinfo, 0, sizeof linkinfo);
+
+ strcpy(path, "/proc/");
+ strcat(path, dir->d_name);
+ strcat(path, "/exe");
+ readlink(path, linkinfo, sizeof linkinfo);
+ if (strstr(linkinfo, "tegrastats") != NULL)
+ {
+ return strtol(dir->d_name, (char **) NULL, 10);
+ }
+ return 0;
+}
+
+static void signal_handler(int signal)
+{
+ if ((f != NULL) && (fileno(f) != -1))
+ {
+ fclose(f);
+ }
+ logFlush();
+ if ((logFile != NULL) && (fileno(logFile) != -1))
+ {
+ fclose(logFile);
+ }
+ exit(0);
+}
+
+static int filter(const struct dirent *dir)
+{
+ return !fnmatch("[1-9]*", dir->d_name, 0);
+}
+#endif
+
+static int getChipId(void)
+{
+ char *contents = NULL;
+ char *tegraid = NULL;
+ int count = 0;
+ int chipid = 0;
+
+ /* open file */
+ int fd = open("/proc/cmdline", O_RDONLY);
+ if (fd < 0)
+ {
+ printf("Couldn't open %s\n", "/proc/cmdline");
+ goto failout;
+ }
+
+ /* allocate enough memory */
+ contents = malloc(ALLOC_BUFFER_SIZE);
+ if (!contents)
+ {
+ printf("Couldn't allocate mem %d bytes\n", ALLOC_BUFFER_SIZE);
+ goto failout;
+ }
+
+ /* read the contents of the file */
+ count = read(fd, contents, ALLOC_BUFFER_SIZE-1);
+ if (count < 0)
+ {
+ printf("Couldn't read the file %s\n", "/proc/cmdline");
+ goto failout;
+ }
+
+ /* add zero to make it a string */
+ contents[count] = '\0';
+
+ tegraid = strstr(contents, "tegraid=");
+ if (tegraid)
+ {
+ tegraid += strlen("tegraid=");
+ chipid = atoi(tegraid);
+ }
+
+failout:
+ if (fd >= 0)
+ {
+ close(fd);
+ }
+ free(contents);
+ return chipid;
+}
+#ifndef GTK_OUTPUT
+
+int main (int argc, char *argv[])
+{
+ int i;
+ unsigned int sleepMS = 1000;
+ int isCpu0Active;
+ int isCpu1Active;
+ int cpuLoadPrev[4*10];
+ int cpu0Load = 0;
+ int cpu1Load = 0;
+ int cpu2Load = 0;
+ int cpu3Load = 0;
+ int isCpu2Active;
+ int isCpu3Active;
+ int debug = 0;
+ int bStart = 0;
+ int bStop = 0;
+ int bToLog = 0;
+ int chipId = 0;
+ int pid = 0;
+ char logName[256] = {0};
+
+ memset(cpuLoadPrev, 0, 4*10*sizeof(int));
+
+ for (i = 1; i < argc; i++)
+ {
+ if (argv && argv[i])
+ {
+ LOGE("argv[%d] = %s\n", i, argv[i]);
+
+ if (argv[i][0] == '-')
+ {
+ if (!strcmp(argv[i], "-max"))
+ {
+ setFreq(1);
+ LOGI("Set all components to max frequency");
+ return 0;
+ }
+ else if (!strcmp(argv[i], "-default"))
+ {
+ setFreq( 0);
+ return 0;
+ }
+ else if (!strcmp(argv[i], "-debug"))
+ {
+ debug = 1;
+ }
+ else if (!strcmp(argv[i], "--start"))
+ {
+ bStart = 1;
+ }
+ else if (!strcmp(argv[i], "--stop"))
+ {
+ bStop = 1;
+ }
+ else if (!strcmp(argv[i], "--logfile"))
+ {
+ if ((i+1) <argc)
+ {
+ strcpy(logName, argv[i+1]);
+ i++;
+ bToLog = 1;
+ }
+ }
+ }
+ else
+ {
+ sscanf(argv[1], "%d", &sleepMS);
+ if (sleepMS < 100)
+ sleepMS = 100;
+ }
+ }
+ }
+
+ if (bStop)
+ {
+ struct dirent **namelist;
+ int n;
+
+ n = scandir("/proc", &namelist, filter, 0);
+ if (n < 0)
+ perror("Not enough memory.");
+ else
+ {
+ while (n--)
+ {
+ pid = processdir(namelist[n]);
+ if ((pid != 0) && (getpid() != (pid_t) pid))
+ {
+ kill((pid_t) pid, SIGTERM);
+ }
+ free(namelist[n]);
+ }
+ free(namelist);
+ }
+
+ return 0;
+ }
+ else if (bStart)
+ {
+ // run in background
+ pid = fork();
+ if (pid > 0)
+ {
+ // parent exit now..
+ exit(0);
+ }
+ else if (pid == 0)
+ {
+ setpgrp();
+ signal(SIGINT, signal_handler);
+ signal(SIGTERM, signal_handler);
+ }
+ else
+ {
+ // print warning, but do not exit..
+ LOGE("failed to fork a child process \n");
+ }
+ }
+
+ if (strlen(logName))
+ {
+ if ((logFile = fopen(logName, "a")) == NULL)
+ {
+ LOGE("failed to open %s \n", logName);
+ bToLog = 0;
+ }
+ }
+#else
+
+#define PRINTE(toLog, logFile, ...) \
+do{ \
+ (void) toLog; \
+ (void)logFile; \
+ sprintf(str, __VA_ARGS__); \
+ \
+}while(0)
+
+int GetStats(char * str)
+{
+ int isCpu0Active;
+ int isCpu1Active;
+ static int cpuLoadPrev[4*10];
+ int cpu0Load = 0;
+ int cpu1Load = 0;
+ int cpu2Load = 0;
+ int cpu3Load = 0;
+ int isCpu2Active;
+ int isCpu3Active;
+ int bToLog = 0;
+ int chipId = 0;
+
+#endif
+ chipId = getChipId();
+
+#ifndef GTK_OUTPUT
+ for (;;)
+#endif
+ {
+ int totalRAMkB = -1;
+ int freeRAMkB = -1;
+ int largestFreeRAMBlockB = -1;
+ int numLargestRAMBlock = -1;
+ int buffersRAMkB = -1;
+ int cachedRAMkB = -1;
+ int totalCarveoutB = -1;
+ int freeCarveoutB = -1;
+ int largestFreeCarveoutBlockB = -1;
+ int totalGARTkB = -1;
+ int freeGARTkB = -1;
+ int largestFreeGARTBlockkB = -1;
+ int totalIRAMB = -1;
+ int freeIRAMB = -1;
+ int largestFreeIRAMBlockB = -1;
+ int currCpuFreq = -1;
+ int emcClk = -1;
+ int avpClk = -1;
+ int vdeClk = -1;
+ int no_cpus = 4;
+ int edp_limit = -1;
+
+ // RAM
+ f = fopen("/proc/meminfo", "r");
+ if (f)
+ {
+ (void) fscanf(f, "MemTotal: %d kB\n", &totalRAMkB);
+ (void) fscanf(f, "MemFree: %d kB\n", &freeRAMkB);
+ (void) fscanf(f, "Buffers: %d kB\n", &buffersRAMkB);
+ (void) fscanf(f, "Cached: %d kB\n", &cachedRAMkB);
+
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/meminfo");
+ }
+
+ f = fopen("/proc/buddyinfo", "r");
+ if (f)
+ {
+ char line[256];
+ int lineNum = 0;
+ int slots[NUM_SLOTS];
+ int i;
+
+ //
+ // Get the number of free blocks for each size.
+ // Separation into nodes and zones is not kept.
+ //
+ while (fgets(line, sizeof(line), f))
+ {
+ int j = 0;
+ int n;
+ int tmpSlots[NUM_SLOTS];
+ char* buf = line;
+
+ (void) sscanf(buf, "Node %*d, zone %*s%n", &n);
+ buf += n;
+
+ while (sscanf(buf, "%d%n", &tmpSlots[j], &n) == 1)
+ {
+ buf += n;
+ slots[j] = lineNum ? slots[j] + tmpSlots[j] : tmpSlots[j];
+ j++;
+ }
+
+ lineNum++;
+ }
+
+ fclose(f);
+
+ // Extract info about the largest available blocks
+ i = NUM_SLOTS - 1;
+ while (slots[i] == 0 && i > 0)
+ i--;
+ numLargestRAMBlock = slots[i];
+ largestFreeRAMBlockB = (1 << i) * PAGE_SIZE;
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/buddyinfo");
+ }
+
+ // CPU 0/1 On/Off
+ f = fopen("/sys/devices/system/cpu/cpu0/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu0Active);
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "/sys/devices/system/cpu/cpu0/online");
+ }
+
+ f = fopen("/sys/devices/system/cpu/cpu1/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu1Active);
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "/sys/devices/system/cpu/cpu1/online");
+ }
+
+ // CPU 2/3 On/Off
+ f = fopen("/sys/devices/system/cpu/cpu2/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu2Active);
+ fclose(f);
+ }
+ else
+ {
+ no_cpus = 2;
+ }
+
+ if (no_cpus == 4)
+ {
+ f = fopen("/sys/devices/system/cpu/cpu3/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu3Active);
+ fclose(f);
+ }
+ }
+
+ // EDP limit
+ f = fopen(EDP_LIMIT_DEBUGFS_PATH, "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &edp_limit);
+ fclose(f);
+ }
+
+ // CPU load
+ f = fopen("/proc/stat", "r");
+ if (f)
+ {
+ int c[40];
+ int l[40];
+ int i;
+
+ //
+ // from http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
+ // Various pieces of information about kernel activity are available
+ // in the /proc/stat file. All of the numbers reported in this file
+ // are aggregates since the system first booted. The very first
+ // "cpu" line aggregates the numbers in all of the other "cpuN"
+ // lines. These numbers identify the amount of time the CPU has spent
+ // performing different kinds of work. Time units are in USER_HZ
+ // (typically hundredths of a second). The meanings of the columns
+ // are as follows, from left to right:
+ // - user: normal processes executing in user mode
+ // - nice: niced processes executing in user mode
+ // - system: processes executing in kernel mode
+ // - idle: twiddling thumbs
+ // - iowait: waiting for I/O to complete
+ // - irq: servicing interrupts
+ // - softirq: servicing softirqs
+ // - steal: involuntary wait
+ // - guest: running a normal guest
+ // - guest_nice: running a niced guest
+ //
+
+ memset(c, 0, sizeof(c));
+
+ for (;;)
+ {
+ int *p;
+ int r;
+ char cpunum;
+
+ r = fscanf(f, "cpu%c", &cpunum);
+
+ if (r != 1)
+ break;
+ if (cpunum < '0' || cpunum > '3')
+ {
+ (void) fscanf(f, "%*[^\n]\n");
+ continue;
+ }
+
+ p = c + (cpunum - '0') * 10;
+
+ r = fscanf(f, "%d %d %d %d %d %d %d %d %d %d\n",
+ p, p+1, p+2, p+3, p+4, p+5, p+6, p+7, p+8, p+9);
+
+ if (r != 10)
+ memset(p, 0, 10 * sizeof(int));
+
+ }
+
+ fclose(f);
+
+ //
+ // cpu load = (time spent on something else but idle since the last
+ // update) / (total time spent since the last update)
+ //
+ cpu0Load = 0;
+ cpu1Load = 0;
+ cpu2Load = 0;
+ cpu3Load = 0;
+ for (i = 0;i < (no_cpus*10); i++)
+ {
+ l[i] = c[i] - cpuLoadPrev[i];
+ if (i < 10)
+ cpu0Load += l[i];
+ else if (i < 20)
+ cpu1Load += l[i];
+ else if (i < 30)
+ cpu2Load += l[i];
+ else
+ cpu3Load += l[i];
+ cpuLoadPrev[i] = c[i];
+ }
+ /* if (debug)
+ LOGE("total0 %d idle0 %d | total1 %d idle1 %d", cpu0Load,
+ l[3+9], cpu1Load, l[3+18]); */
+ if (cpu0Load)
+ cpu0Load = 100*(cpu0Load-l[3])/cpu0Load;
+ if (cpu1Load)
+ cpu1Load = 100*(cpu1Load-l[3+10])/cpu1Load;
+ if (no_cpus == 4)
+ {
+ if (cpu2Load)
+ cpu2Load = 100*(cpu2Load-l[3+20])/cpu2Load;
+ if (cpu3Load)
+ cpu3Load = 100*(cpu3Load-l[3+30])/cpu3Load;
+ }
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/stat");
+ }
+
+ // Carveout
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ break;
+ case AP20_CHIPID:
+ default:
+ READ_VALUE(bToLog, logFile, CARVEOUT(total_size),
+ &totalCarveoutB);
+ READ_VALUE(bToLog, logFile, CARVEOUT(free_size),
+ &freeCarveoutB);
+ READ_VALUE(bToLog, logFile, CARVEOUT(free_max),
+ &largestFreeCarveoutBlockB);
+ break;
+ }
+
+ // GART
+ f = fopen("/proc/iovmminfo", "r");
+ if (f)
+ {
+ char tmp[4];
+ // add if (blah) {} to get around compiler warning
+ if(fscanf(f, "\ngroups\n\t<unnamed> (device: iovmm-%4c)\n\t\tsize: "
+ "%dKiB free: %dKiB largest: %dKiB",
+ &tmp[0], &totalGARTkB, &freeGARTkB,
+ &largestFreeGARTBlockkB)) {}
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/iovmminfo");
+ }
+
+ // If the largest free GART block is -1, change it to 0.
+ if (largestFreeGARTBlockkB == -1)
+ largestFreeGARTBlockkB = 0;
+
+ // IRAM
+ READ_VALUE(bToLog, logFile, IRAM(total_size), &totalIRAMB);
+ READ_VALUE(bToLog, logFile, IRAM(free_size), &freeIRAMB);
+ READ_VALUE(bToLog, logFile, IRAM(free_max), &largestFreeIRAMBlockB);
+
+ // CPU
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &currCpuFreq);
+ fclose(f);
+ }
+ // DFS
+ READ_VALUE(bToLog, logFile, EMCCLK, &emcClk);
+ READ_VALUE(bToLog, logFile, AVPCLK, &avpClk);
+ READ_VALUE(bToLog, logFile, VDECLK, &vdeClk);
+
+ {
+ char cpu0String[5], cpu1String[5];
+ char cpu2String[5], cpu3String[5];
+ char lfbRAM[10], lfbCarveout[10], lfbGART[10], lfbIRAM[10];
+ if (isCpu0Active)
+ {
+ snprintf(cpu0String, 5, "%d%%", cpu0Load);
+ }
+ else
+ {
+ snprintf(cpu0String, 5, "off");
+ }
+
+ if (isCpu1Active)
+ {
+ snprintf(cpu1String, 5, "%d%%", cpu1Load);
+ }
+ else
+ {
+ snprintf(cpu1String, 5, "off");
+ }
+
+ if (no_cpus == 4)
+ {
+ if (isCpu2Active)
+ {
+ snprintf(cpu2String, 5, "%d%%", cpu2Load);
+ }
+ else
+ {
+ snprintf(cpu2String, 5, "off");
+ }
+
+ if (isCpu3Active)
+ {
+ snprintf(cpu3String, 5, "%d%%", cpu3Load);
+ }
+ else
+ {
+ snprintf(cpu3String, 5, "off");
+ }
+ }
+ SmartB2Str(lfbRAM, 10, largestFreeRAMBlockB);
+ SmartB2Str(lfbCarveout, 10, largestFreeCarveoutBlockB);
+ SmartB2Str(lfbGART, 10, largestFreeGARTBlockkB * 1024);
+ SmartB2Str(lfbIRAM, 10, largestFreeIRAMBlockB);
+ if (no_cpus == 2)
+ {
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) IRAM "
+ "%d/%dkB(lfb %s) cpu [%s,%s]@%d EMC %d AVP %d "
+ "VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2kB(totalIRAMB-freeIRAMB),
+ B2kB(totalIRAMB), lfbIRAM, cpu0String, cpu1String,
+ currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+
+ case AP20_CHIPID:
+ // intentionally fall through
+ default:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) "
+ "Carveout %d/%dMB (lfb %s) GART %d/%dMB (lfb %s)"
+ " IRAM %d/%dkB(lfb %s) cpu [%s,%s]@%d EMC %d AVP"
+ " %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2MB(totalCarveoutB-freeCarveoutB),
+ B2MB(totalCarveoutB), lfbCarveout,
+ kB2MB(totalGARTkB-freeGARTkB), kB2MB(totalGARTkB),
+ lfbGART, B2kB(totalIRAMB-freeIRAMB), B2kB(totalIRAMB),
+ lfbIRAM, cpu0String, cpu1String,
+ currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+ }
+
+ }
+ else
+ {
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) IRAM "
+ "%d/%dkB(lfb %s) cpu [%s,%s,%s,%s]@%d EMC %d AVP"
+ " %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2kB(totalIRAMB-freeIRAMB), B2kB(totalIRAMB),
+ lfbIRAM, cpu0String, cpu1String, cpu2String,
+ cpu3String, currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+
+ case AP20_CHIPID:
+ // intentionally fall through
+ default:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) "
+ "Carveout %d/%dMB (lfb %s) GART %d/%dMB (lfb %s)"
+ " IRAM %d/%dkB(lfb %s) cpu [%s,%s,%s,%s]@%d "
+ "EMC %d AVP %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2MB(totalCarveoutB-freeCarveoutB),
+ B2MB(totalCarveoutB), lfbCarveout,
+ kB2MB(totalGARTkB-freeGARTkB), kB2MB(totalGARTkB),
+ lfbGART, B2kB(totalIRAMB-freeIRAMB),
+ B2kB(totalIRAMB), lfbIRAM, cpu0String, cpu1String,
+ cpu2String, cpu3String, currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+ }
+ }
+ }
+
+ // fflush stdout (on LDK) to make the output redirectable.
+ logFlush();
+#ifndef GTK_OUTPUT
+ usleep(sleepMS*1000);
+#endif
+ }
+
+ return 0;
+}
+
+/* example contents of /proc/meminfo
+MemTotal: 450164 kB
+MemFree: 269628 kB
+Buffers: 2320 kB
+Cached: 69008 kB
+SwapCached: 0 kB
+Active: 89476 kB
+Inactive: 63612 kB
+Active(anon): 82272 kB
+Inactive(anon): 0 kB
+Active(file): 7204 kB
+Inactive(file): 63612 kB
+Unevictable: 0 kB
+Mlocked: 0 kB
+SwapTotal: 0 kB
+SwapFree: 0 kB
+Dirty: 0 kB
+Writeback: 0 kB
+AnonPages: 81764 kB
+Mapped: 35148 kB
+Slab: 5204 kB
+SReclaimable: 1760 kB
+SUnreclaim: 3444 kB
+PageTables: 4316 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 225080 kB
+Committed_AS: 1054316 kB
+VmallocTotal: 450560 kB
+VmallocUsed: 45964 kB
+VmallocChunk: 340056 kB
+
+http://www.linuxweblog.com/meminfo
+ * MemTotal: Total usable ram (i.e. physical ram minus a few reserved bits
+ and the kernel binary code)
+ * MemFree: Is sum of LowFree+HighFree (overall stat)
+ * MemShared: 0 is here for compat reasons but always zero.
+ * Buffers: Memory in buffer cache. mostly useless as metric nowadays
+ * Cached: Memory in the pagecache (diskcache) minus SwapCache
+ * SwapCache: Memory that once was swapped out, is swapped back in but still
+ also is in the swapfile (if memory is needed it doesn't need to be swapped
+ out AGAIN because it is already in the swapfile. This saves I/O)
+
+VM splits the cache pages into "active" and "inactive" memory. The idea is that
+if you need memory and some cache needs to be sacrificed for that, you take it
+from inactive since that's expected to be not used. The vm checks what is used
+on a regular basis and moves stuff around. When you use memory, the CPU sets a
+bit in the pagetable and the VM checks that bit occasionally, and based on that,
+it can move pages back to active. And within active there's an order of "longest
+ago not used" (roughly, it's a little more complex in reality).
+ * Active: Memory that has been used more recently and usually not reclaimed
+ unless absolutely necessary.
+ * Inact_dirty: Dirty means "might need writing to disk or swap." Takes more
+ work to free. Examples might be files that have not been written to yet.
+ They aren't written to memory too soon in order to keep the I/O down. For
+ instance, if you're writing logs, it might be better to wait until you have
+ a complete log ready before sending it to disk.
+ * Inact_clean: Assumed to be easily freeable. The kernel will try to keep
+ some clean stuff around always to have a bit of breathing room.
+ * Inact_target: Just a goal metric the kernel uses for making sure there are
+ enough inactive pages around. When exceeded, the kernel will not do work to
+ move pages from active to inactive. A page can also get inactive in a few
+ other ways, e.g. if you do a long sequential I/O, the kernel assumes you're
+ not going to use that memory and makes it inactive preventively. So you can
+ get more inactive pages than the target because the kernel marks some cache
+ as "more likely to be never used" and lets it cheat in the "last used"
+ order.
+ * HighTotal: is the total amount of memory in the high region. Highmem is all
+ memory above (approx) 860MB of physical RAM. Kernel uses indirect tricks to
+ access the high memory region. Data cache can go in this memory region.
+ * LowTotal: The total amount of non-highmem memory.
+ * LowFree: The amount of free memory of the low memory region. This is the
+ memory the kernel can address directly. All kernel datastructures need to go
+ into low memory.
+ * SwapTotal: Total amount of physical swap memory.
+ * SwapFree: Total amount of swap memory free.
+ * Committed_AS: An estimate of how much RAM you would need to make a 99.99%
+ guarantee that there never is OOM (out of memory) for this workload. Normally
+ the kernel will overcommit memory. The Committed_AS is a guesstimate of how
+ much RAM/swap you would need worst-case.
+*/
diff --git a/recipes/tegrastats-gtk/files/main.c~ b/recipes/tegrastats-gtk/files/main.c~
new file mode 100644
index 0000000..782b235
--- /dev/null
+++ b/recipes/tegrastats-gtk/files/main.c~
@@ -0,0 +1,975 @@
+/*
+ * Copyright (c) 2009-2011 NVIDIA Corporation. All Rights Reserved.
+ *
+ * NVIDIA Corporation and its licensors retain all intellectual property and
+ * proprietary rights in and to this software and related documentation. Any
+ * use, reproduction, disclosure or distribution of this software and related
+ * documentation without an express license agreement from NVIDIA Corporation
+ * is strictly prohibited.
+ */
+
+#define GTK_OUTPUT
+
+#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <string.h>
+#include <dirent.h>
+#include <fnmatch.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#ifndef GTK_OUTPUT
+#if !NV_IS_LDK
+ #include <utils/Log.h>
+ #undef LOG_TAG
+ #define LOG_TAG "TegraStats"
+#else
+ #include <string.h>
+ #define LOGE(...) \
+ do { \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+ } while (0)
+
+ #define LOGI(...) \
+ do { \
+ printf(__VA_ARGS__); \
+ printf("\n"); \
+ } while (0)
+#endif
+
+#define PRINTE(toLog, logFile, ...) \
+do{ \
+ if (toLog && (logFile != NULL)) \
+ { \
+ fprintf(logFile, __VA_ARGS__); \
+ fprintf(logFile, "\n"); \
+ } \
+ else \
+ { \
+ LOGE(__VA_ARGS__); \
+ } \
+}while(0)
+#endif
+#define NVMAP_BASE_PATH "/sys/devices/platform/tegra-nvmap/misc/nvmap/"
+#define CARVEOUT(x) NVMAP_BASE_PATH "heap-generic-0/" # x
+#define IRAM(x) NVMAP_BASE_PATH "heap-iram/" # x
+
+#define EDP_LIMIT_DEBUGFS_PATH "/sys/kernel/debug/edp_limit"
+#define DVFS_CLOCKS_BASE_PATH "/sys/kernel/debug/clock/"
+#define EMCCLK DVFS_CLOCKS_BASE_PATH "emc/rate"
+#define AVPCLK DVFS_CLOCKS_BASE_PATH "avp.sclk/rate"
+#define VDECLK DVFS_CLOCKS_BASE_PATH "vde/rate"
+
+#define READ_VALUE(bToLog, logFile, path, pvalue) { \
+ f = fopen(path, "r"); \
+ if (f) { \
+ (void) fscanf(f, "%d", pvalue); \
+ fclose(f); \
+ } else { \
+ PRINTE(bToLog, logFile, "Failed to open %s", path); \
+ } \
+}
+
+#define NUM_SLOTS 11
+#define PAGE_SIZE 4096
+#define FREQUENCY_CONVERT 1000
+#define AP20_CHIPID 20
+#define T30_CHIPID 30
+#define ALLOC_BUFFER_SIZE 1024
+
+/* Prototypes. */
+
+#ifndef GTK_OUTPUT
+int main(int argc, char *argv[]);
+#endif
+
+static void logFlush(void);
+static int B2MB(int bytes);
+static int kB2MB(int kiloBytes);
+static int B2kB(int bytes);
+static int SmartB2Str(char* str, size_t size, int bytes);
+#ifndef GTK_OUTPUT
+static void setFreq(int setMax);
+static long processdir(const struct dirent *dir);
+static void signal_handler(int signal);
+static int filter(const struct dirent *dir);
+#endif
+static int getChipId(void);
+
+/* Store clk values to restore later */
+// Assuming clk frequencies are same for both CPUs
+unsigned int cpuclk[2];
+
+FILE *f = NULL;
+FILE *logFile = NULL;
+
+/* Functions. */
+
+static void logFlush(void)
+{
+#if NV_IS_LDK
+ // need to fflush on LDK to make output redirectable
+ fflush(stdout);
+#endif
+ if ((logFile != NULL) && (fileno(logFile) != -1))
+ {
+ fflush(logFile);
+ }
+}
+
+static int B2MB(int bytes)
+{
+ bytes += (1<<19)-1; // rounding
+ return bytes >> 20;
+}
+
+static int kB2MB(int kiloBytes)
+{
+ kiloBytes += (1<<9)-1; // rounding
+ return kiloBytes >> 10;
+}
+
+static int B2kB(int bytes)
+{
+ bytes += (1<<9)-1; // rounding
+ return bytes >> 10;
+}
+
+static int SmartB2Str(char* str, size_t size, int bytes)
+{
+ if (bytes < 1024)
+ {
+ return snprintf(str, size, "%dB", bytes);
+ }
+ else if (bytes < 1024*1024)
+ {
+ return snprintf(str, size, "%dkB", B2kB(bytes));
+ }
+ else
+ {
+ return snprintf(str, size, "%dMB", B2MB(bytes));
+ }
+}
+#ifndef GTK_OUTPUT
+
+static void setFreq(int setMax)
+{
+ FILE* f;
+ LOGI("setFreq %d", setMax);
+
+ if (!cpuclk[0]) {
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", "r");
+ if (f)
+ {
+ fscanf(f, "%u", &cpuclk[0]);
+ while(fscanf(f, "%u", &cpuclk[1]) != EOF);
+
+ LOGI("cpuclk: minfreq = %u maxfreq = %u\n", cpuclk[0], cpuclk[1]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_available_frequencies");
+ }
+ }
+ if (setMax)
+ {
+ // set CPU frequency to highest value
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "w");
+ if (f)
+ {
+ fprintf(f, "%u", cpuclk[1]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_min_freq\n");
+ }
+ }
+ else
+ {
+ // set default
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", "w");
+ if (f)
+ {
+ fprintf(f, "%u", cpuclk[0]);
+ fclose(f);
+ }
+ else
+ {
+ LOGE("Error opening file scaling_min_freq\n");
+ }
+ }
+}
+
+static long processdir(const struct dirent *dir)
+{
+ char path[256];
+ char linkinfo[256];
+
+ memset(path, 0, sizeof path);
+ memset(linkinfo, 0, sizeof linkinfo);
+
+ strcpy(path, "/proc/");
+ strcat(path, dir->d_name);
+ strcat(path, "/exe");
+ readlink(path, linkinfo, sizeof linkinfo);
+ if (strstr(linkinfo, "tegrastats") != NULL)
+ {
+ return strtol(dir->d_name, (char **) NULL, 10);
+ }
+ return 0;
+}
+
+static void signal_handler(int signal)
+{
+ if ((f != NULL) && (fileno(f) != -1))
+ {
+ fclose(f);
+ }
+ logFlush();
+ if ((logFile != NULL) && (fileno(logFile) != -1))
+ {
+ fclose(logFile);
+ }
+ exit(0);
+}
+
+static int filter(const struct dirent *dir)
+{
+ return !fnmatch("[1-9]*", dir->d_name, 0);
+}
+#endif
+
+static int getChipId(void)
+{
+ char *contents = NULL;
+ char *tegraid = NULL;
+ int count = 0;
+ int chipid = 0;
+
+ /* open file */
+ int fd = open("/proc/cmdline", O_RDONLY);
+ if (fd < 0)
+ {
+ printf("Couldn't open %s\n", "/proc/cmdline");
+ goto failout;
+ }
+
+ /* allocate enough memory */
+ contents = malloc(ALLOC_BUFFER_SIZE);
+ if (!contents)
+ {
+ printf("Couldn't allocate mem %d bytes\n", ALLOC_BUFFER_SIZE);
+ goto failout;
+ }
+
+ /* read the contents of the file */
+ count = read(fd, contents, ALLOC_BUFFER_SIZE-1);
+ if (count < 0)
+ {
+ printf("Couldn't read the file %s\n", "/proc/cmdline");
+ goto failout;
+ }
+
+ /* add zero to make it a string */
+ contents[count] = '\0';
+
+ tegraid = strstr(contents, "tegraid=");
+ if (tegraid)
+ {
+ tegraid += strlen("tegraid=");
+ chipid = atoi(tegraid);
+ }
+
+failout:
+ if (fd >= 0)
+ {
+ close(fd);
+ }
+ free(contents);
+ return chipid;
+}
+#ifndef GTK_OUTPUT
+
+int main (int argc, char *argv[])
+{
+ int i;
+ unsigned int sleepMS = 1000;
+ int isCpu0Active;
+ int isCpu1Active;
+ int cpuLoadPrev[4*10];
+ int cpu0Load = 0;
+ int cpu1Load = 0;
+ int cpu2Load = 0;
+ int cpu3Load = 0;
+ int isCpu2Active;
+ int isCpu3Active;
+ int debug = 0;
+ int bStart = 0;
+ int bStop = 0;
+ int bToLog = 0;
+ int chipId = 0;
+ int pid = 0;
+ char logName[256] = {0};
+
+ memset(cpuLoadPrev, 0, 4*10*sizeof(int));
+
+ for (i = 1; i < argc; i++)
+ {
+ if (argv && argv[i])
+ {
+ LOGE("argv[%d] = %s\n", i, argv[i]);
+
+ if (argv[i][0] == '-')
+ {
+ if (!strcmp(argv[i], "-max"))
+ {
+ setFreq(1);
+ LOGI("Set all components to max frequency");
+ return 0;
+ }
+ else if (!strcmp(argv[i], "-default"))
+ {
+ setFreq( 0);
+ return 0;
+ }
+ else if (!strcmp(argv[i], "-debug"))
+ {
+ debug = 1;
+ }
+ else if (!strcmp(argv[i], "--start"))
+ {
+ bStart = 1;
+ }
+ else if (!strcmp(argv[i], "--stop"))
+ {
+ bStop = 1;
+ }
+ else if (!strcmp(argv[i], "--logfile"))
+ {
+ if ((i+1) <argc)
+ {
+ strcpy(logName, argv[i+1]);
+ i++;
+ bToLog = 1;
+ }
+ }
+ }
+ else
+ {
+ sscanf(argv[1], "%d", &sleepMS);
+ if (sleepMS < 100)
+ sleepMS = 100;
+ }
+ }
+ }
+
+ if (bStop)
+ {
+ struct dirent **namelist;
+ int n;
+
+ n = scandir("/proc", &namelist, filter, 0);
+ if (n < 0)
+ perror("Not enough memory.");
+ else
+ {
+ while (n--)
+ {
+ pid = processdir(namelist[n]);
+ if ((pid != 0) && (getpid() != (pid_t) pid))
+ {
+ kill((pid_t) pid, SIGTERM);
+ }
+ free(namelist[n]);
+ }
+ free(namelist);
+ }
+
+ return 0;
+ }
+ else if (bStart)
+ {
+ // run in background
+ pid = fork();
+ if (pid > 0)
+ {
+ // parent exit now..
+ exit(0);
+ }
+ else if (pid == 0)
+ {
+ setpgrp();
+ signal(SIGINT, signal_handler);
+ signal(SIGTERM, signal_handler);
+ }
+ else
+ {
+ // print warning, but do not exit..
+ LOGE("failed to fork a child process \n");
+ }
+ }
+
+ if (strlen(logName))
+ {
+ if ((logFile = fopen(logName, "a")) == NULL)
+ {
+ LOGE("failed to open %s \n", logName);
+ bToLog = 0;
+ }
+ }
+#else
+
+#define PRINTE(toLog, logFile, ...) \
+do{ \
+ (void) toLog; \
+ (void)logFile; \
+ sprintf(str, __VA_ARGS__); \
+ \
+}while(0)
+
+int GetStats(char * str)
+{
+ int isCpu0Active;
+ int isCpu1Active;
+ int cpuLoadPrev[4*10];
+ int cpu0Load = 0;
+ int cpu1Load = 0;
+ int cpu2Load = 0;
+ int cpu3Load = 0;
+ int isCpu2Active;
+ int isCpu3Active;
+ int bToLog = 0;
+ int chipId = 0;
+
+#endif
+ chipId = getChipId();
+
+#ifndef GTK_OUTPUT
+ for (;;)
+#endif
+ {
+ int totalRAMkB = -1;
+ int freeRAMkB = -1;
+ int largestFreeRAMBlockB = -1;
+ int numLargestRAMBlock = -1;
+ int buffersRAMkB = -1;
+ int cachedRAMkB = -1;
+ int totalCarveoutB = -1;
+ int freeCarveoutB = -1;
+ int largestFreeCarveoutBlockB = -1;
+ int totalGARTkB = -1;
+ int freeGARTkB = -1;
+ int largestFreeGARTBlockkB = -1;
+ int totalIRAMB = -1;
+ int freeIRAMB = -1;
+ int largestFreeIRAMBlockB = -1;
+ int currCpuFreq = -1;
+ int emcClk = -1;
+ int avpClk = -1;
+ int vdeClk = -1;
+ int no_cpus = 4;
+ int edp_limit = -1;
+
+ // RAM
+ f = fopen("/proc/meminfo", "r");
+ if (f)
+ {
+ (void) fscanf(f, "MemTotal: %d kB\n", &totalRAMkB);
+ (void) fscanf(f, "MemFree: %d kB\n", &freeRAMkB);
+ (void) fscanf(f, "Buffers: %d kB\n", &buffersRAMkB);
+ (void) fscanf(f, "Cached: %d kB\n", &cachedRAMkB);
+
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/meminfo");
+ }
+
+ f = fopen("/proc/buddyinfo", "r");
+ if (f)
+ {
+ char line[256];
+ int lineNum = 0;
+ int slots[NUM_SLOTS];
+ int i;
+
+ //
+ // Get the number of free blocks for each size.
+ // Separation into nodes and zones is not kept.
+ //
+ while (fgets(line, sizeof(line), f))
+ {
+ int j = 0;
+ int n;
+ int tmpSlots[NUM_SLOTS];
+ char* buf = line;
+
+ (void) sscanf(buf, "Node %*d, zone %*s%n", &n);
+ buf += n;
+
+ while (sscanf(buf, "%d%n", &tmpSlots[j], &n) == 1)
+ {
+ buf += n;
+ slots[j] = lineNum ? slots[j] + tmpSlots[j] : tmpSlots[j];
+ j++;
+ }
+
+ lineNum++;
+ }
+
+ fclose(f);
+
+ // Extract info about the largest available blocks
+ i = NUM_SLOTS - 1;
+ while (slots[i] == 0 && i > 0)
+ i--;
+ numLargestRAMBlock = slots[i];
+ largestFreeRAMBlockB = (1 << i) * PAGE_SIZE;
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/buddyinfo");
+ }
+
+ // CPU 0/1 On/Off
+ f = fopen("/sys/devices/system/cpu/cpu0/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu0Active);
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "/sys/devices/system/cpu/cpu0/online");
+ }
+
+ f = fopen("/sys/devices/system/cpu/cpu1/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu1Active);
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "/sys/devices/system/cpu/cpu1/online");
+ }
+
+ // CPU 2/3 On/Off
+ f = fopen("/sys/devices/system/cpu/cpu2/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu2Active);
+ fclose(f);
+ }
+ else
+ {
+ no_cpus = 2;
+ }
+
+ if (no_cpus == 4)
+ {
+ f = fopen("/sys/devices/system/cpu/cpu3/online", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &isCpu3Active);
+ fclose(f);
+ }
+ }
+
+ // EDP limit
+ f = fopen(EDP_LIMIT_DEBUGFS_PATH, "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &edp_limit);
+ fclose(f);
+ }
+
+ // CPU load
+ f = fopen("/proc/stat", "r");
+ if (f)
+ {
+ int c[40];
+ int l[40];
+ int i;
+
+ //
+ // from http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
+ // Various pieces of information about kernel activity are available
+ // in the /proc/stat file. All of the numbers reported in this file
+ // are aggregates since the system first booted. The very first
+ // "cpu" line aggregates the numbers in all of the other "cpuN"
+ // lines. These numbers identify the amount of time the CPU has spent
+ // performing different kinds of work. Time units are in USER_HZ
+ // (typically hundredths of a second). The meanings of the columns
+ // are as follows, from left to right:
+ // - user: normal processes executing in user mode
+ // - nice: niced processes executing in user mode
+ // - system: processes executing in kernel mode
+ // - idle: twiddling thumbs
+ // - iowait: waiting for I/O to complete
+ // - irq: servicing interrupts
+ // - softirq: servicing softirqs
+ // - steal: involuntary wait
+ // - guest: running a normal guest
+ // - guest_nice: running a niced guest
+ //
+
+ memset(c, 0, sizeof(c));
+
+ for (;;)
+ {
+ int *p;
+ int r;
+ char cpunum;
+
+ r = fscanf(f, "cpu%c", &cpunum);
+
+ if (r != 1)
+ break;
+ if (cpunum < '0' || cpunum > '3')
+ {
+ (void) fscanf(f, "%*[^\n]\n");
+ continue;
+ }
+
+ p = c + (cpunum - '0') * 10;
+
+ r = fscanf(f, "%d %d %d %d %d %d %d %d %d %d\n",
+ p, p+1, p+2, p+3, p+4, p+5, p+6, p+7, p+8, p+9);
+
+ if (r != 10)
+ memset(p, 0, 10 * sizeof(int));
+
+ }
+
+ fclose(f);
+
+ //
+ // cpu load = (time spent on something else but idle since the last
+ // update) / (total time spent since the last update)
+ //
+ cpu0Load = 0;
+ cpu1Load = 0;
+ cpu2Load = 0;
+ cpu3Load = 0;
+ for (i = 0;i < (no_cpus*10); i++)
+ {
+ l[i] = c[i] - cpuLoadPrev[i];
+ if (i < 10)
+ cpu0Load += l[i];
+ else if (i < 20)
+ cpu1Load += l[i];
+ else if (i < 30)
+ cpu2Load += l[i];
+ else
+ cpu3Load += l[i];
+ cpuLoadPrev[i] = c[i];
+ }
+ /* if (debug)
+ LOGE("total0 %d idle0 %d | total1 %d idle1 %d", cpu0Load,
+ l[3+9], cpu1Load, l[3+18]); */
+ if (cpu0Load)
+ cpu0Load = 100*(cpu0Load-l[3])/cpu0Load;
+ if (cpu1Load)
+ cpu1Load = 100*(cpu1Load-l[3+10])/cpu1Load;
+ if (no_cpus == 4)
+ {
+ if (cpu2Load)
+ cpu2Load = 100*(cpu2Load-l[3+20])/cpu2Load;
+ if (cpu3Load)
+ cpu3Load = 100*(cpu3Load-l[3+30])/cpu3Load;
+ }
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/stat");
+ }
+
+ // Carveout
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ break;
+ case AP20_CHIPID:
+ default:
+ READ_VALUE(bToLog, logFile, CARVEOUT(total_size),
+ &totalCarveoutB);
+ READ_VALUE(bToLog, logFile, CARVEOUT(free_size),
+ &freeCarveoutB);
+ READ_VALUE(bToLog, logFile, CARVEOUT(free_max),
+ &largestFreeCarveoutBlockB);
+ break;
+ }
+
+ // GART
+ f = fopen("/proc/iovmminfo", "r");
+ if (f)
+ {
+ char tmp[4];
+ // add if (blah) {} to get around compiler warning
+ if(fscanf(f, "\ngroups\n\t<unnamed> (device: iovmm-%4c)\n\t\tsize: "
+ "%dKiB free: %dKiB largest: %dKiB",
+ &tmp[0], &totalGARTkB, &freeGARTkB,
+ &largestFreeGARTBlockkB)) {}
+ fclose(f);
+ }
+ else
+ {
+ PRINTE(bToLog, logFile, "Failed to open /proc/iovmminfo");
+ }
+
+ // If the largest free GART block is -1, change it to 0.
+ if (largestFreeGARTBlockkB == -1)
+ largestFreeGARTBlockkB = 0;
+
+ // IRAM
+ READ_VALUE(bToLog, logFile, IRAM(total_size), &totalIRAMB);
+ READ_VALUE(bToLog, logFile, IRAM(free_size), &freeIRAMB);
+ READ_VALUE(bToLog, logFile, IRAM(free_max), &largestFreeIRAMBlockB);
+
+ // CPU
+ f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq", "r");
+ if (f)
+ {
+ (void) fscanf(f, "%d", &currCpuFreq);
+ fclose(f);
+ }
+ // DFS
+ READ_VALUE(bToLog, logFile, EMCCLK, &emcClk);
+ READ_VALUE(bToLog, logFile, AVPCLK, &avpClk);
+ READ_VALUE(bToLog, logFile, VDECLK, &vdeClk);
+
+ {
+ char cpu0String[5], cpu1String[5];
+ char cpu2String[5], cpu3String[5];
+ char lfbRAM[10], lfbCarveout[10], lfbGART[10], lfbIRAM[10];
+ if (isCpu0Active)
+ {
+ snprintf(cpu0String, 5, "%d%%", cpu0Load);
+ }
+ else
+ {
+ snprintf(cpu0String, 5, "off");
+ }
+
+ if (isCpu1Active)
+ {
+ snprintf(cpu1String, 5, "%d%%", cpu1Load);
+ }
+ else
+ {
+ snprintf(cpu1String, 5, "off");
+ }
+
+ if (no_cpus == 4)
+ {
+ if (isCpu2Active)
+ {
+ snprintf(cpu2String, 5, "%d%%", cpu2Load);
+ }
+ else
+ {
+ snprintf(cpu2String, 5, "off");
+ }
+
+ if (isCpu3Active)
+ {
+ snprintf(cpu3String, 5, "%d%%", cpu3Load);
+ }
+ else
+ {
+ snprintf(cpu3String, 5, "off");
+ }
+ }
+ SmartB2Str(lfbRAM, 10, largestFreeRAMBlockB);
+ SmartB2Str(lfbCarveout, 10, largestFreeCarveoutBlockB);
+ SmartB2Str(lfbGART, 10, largestFreeGARTBlockkB * 1024);
+ SmartB2Str(lfbIRAM, 10, largestFreeIRAMBlockB);
+ if (no_cpus == 2)
+ {
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) IRAM "
+ "%d/%dkB(lfb %s) cpu [%s,%s]@%d EMC %d AVP %d "
+ "VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2kB(totalIRAMB-freeIRAMB),
+ B2kB(totalIRAMB), lfbIRAM, cpu0String, cpu1String,
+ currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+
+ case AP20_CHIPID:
+ // intentionally fall through
+ default:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) "
+ "Carveout %d/%dMB (lfb %s) GART %d/%dMB (lfb %s)"
+ " IRAM %d/%dkB(lfb %s) cpu [%s,%s]@%d EMC %d AVP"
+ " %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2MB(totalCarveoutB-freeCarveoutB),
+ B2MB(totalCarveoutB), lfbCarveout,
+ kB2MB(totalGARTkB-freeGARTkB), kB2MB(totalGARTkB),
+ lfbGART, B2kB(totalIRAMB-freeIRAMB), B2kB(totalIRAMB),
+ lfbIRAM, cpu0String, cpu1String,
+ currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+ }
+
+ }
+ else
+ {
+ switch (chipId)
+ {
+ case T30_CHIPID:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) IRAM "
+ "%d/%dkB(lfb %s) cpu [%s,%s,%s,%s]@%d EMC %d AVP"
+ " %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2kB(totalIRAMB-freeIRAMB), B2kB(totalIRAMB),
+ lfbIRAM, cpu0String, cpu1String, cpu2String,
+ cpu3String, currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+
+ case AP20_CHIPID:
+ // intentionally fall through
+ default:
+ PRINTE(bToLog, logFile, "RAM %d/%dMB (lfb %dx%s) "
+ "Carveout %d/%dMB (lfb %s) GART %d/%dMB (lfb %s)"
+ " IRAM %d/%dkB(lfb %s) cpu [%s,%s,%s,%s]@%d "
+ "EMC %d AVP %d VDE %d EDP limit %d",
+ kB2MB(totalRAMkB-freeRAMkB-buffersRAMkB-cachedRAMkB),
+ kB2MB(totalRAMkB), numLargestRAMBlock, lfbRAM,
+ B2MB(totalCarveoutB-freeCarveoutB),
+ B2MB(totalCarveoutB), lfbCarveout,
+ kB2MB(totalGARTkB-freeGARTkB), kB2MB(totalGARTkB),
+ lfbGART, B2kB(totalIRAMB-freeIRAMB),
+ B2kB(totalIRAMB), lfbIRAM, cpu0String, cpu1String,
+ cpu2String, cpu3String, currCpuFreq/FREQUENCY_CONVERT,
+ emcClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ avpClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ vdeClk/(FREQUENCY_CONVERT*FREQUENCY_CONVERT),
+ edp_limit);
+ break;
+ }
+ }
+ }
+
+ // fflush stdout (on LDK) to make the output redirectable.
+ logFlush();
+#ifndef GTK_OUTPUT
+ usleep(sleepMS*1000);
+#endif
+ }
+
+ return 0;
+}
+
+/* example contents of /proc/meminfo
+MemTotal: 450164 kB
+MemFree: 269628 kB
+Buffers: 2320 kB
+Cached: 69008 kB
+SwapCached: 0 kB
+Active: 89476 kB
+Inactive: 63612 kB
+Active(anon): 82272 kB
+Inactive(anon): 0 kB
+Active(file): 7204 kB
+Inactive(file): 63612 kB
+Unevictable: 0 kB
+Mlocked: 0 kB
+SwapTotal: 0 kB
+SwapFree: 0 kB
+Dirty: 0 kB
+Writeback: 0 kB
+AnonPages: 81764 kB
+Mapped: 35148 kB
+Slab: 5204 kB
+SReclaimable: 1760 kB
+SUnreclaim: 3444 kB
+PageTables: 4316 kB
+NFS_Unstable: 0 kB
+Bounce: 0 kB
+WritebackTmp: 0 kB
+CommitLimit: 225080 kB
+Committed_AS: 1054316 kB
+VmallocTotal: 450560 kB
+VmallocUsed: 45964 kB
+VmallocChunk: 340056 kB
+
+http://www.linuxweblog.com/meminfo
+ * MemTotal: Total usable ram (i.e. physical ram minus a few reserved bits
+ and the kernel binary code)
+ * MemFree: Is sum of LowFree+HighFree (overall stat)
+ * MemShared: 0 is here for compat reasons but always zero.
+ * Buffers: Memory in buffer cache. mostly useless as metric nowadays
+ * Cached: Memory in the pagecache (diskcache) minus SwapCache
+ * SwapCache: Memory that once was swapped out, is swapped back in but still
+ also is in the swapfile (if memory is needed it doesn't need to be swapped
+ out AGAIN because it is already in the swapfile. This saves I/O)
+
+VM splits the cache pages into "active" and "inactive" memory. The idea is that
+if you need memory and some cache needs to be sacrificed for that, you take it
+from inactive since that's expected to be not used. The vm checks what is used
+on a regular basis and moves stuff around. When you use memory, the CPU sets a
+bit in the pagetable and the VM checks that bit occasionally, and based on that,
+it can move pages back to active. And within active there's an order of "longest
+ago not used" (roughly, it's a little more complex in reality).
+ * Active: Memory that has been used more recently and usually not reclaimed
+ unless absolutely necessary.
+ * Inact_dirty: Dirty means "might need writing to disk or swap." Takes more
+ work to free. Examples might be files that have not been written to yet.
+ They aren't written to memory too soon in order to keep the I/O down. For
+ instance, if you're writing logs, it might be better to wait until you have
+ a complete log ready before sending it to disk.
+ * Inact_clean: Assumed to be easily freeable. The kernel will try to keep
+ some clean stuff around always to have a bit of breathing room.
+ * Inact_target: Just a goal metric the kernel uses for making sure there are
+ enough inactive pages around. When exceeded, the kernel will not do work to
+ move pages from active to inactive. A page can also get inactive in a few
+ other ways, e.g. if you do a long sequential I/O, the kernel assumes you're
+ not going to use that memory and makes it inactive preventively. So you can
+ get more inactive pages than the target because the kernel marks some cache
+ as "more likely to be never used" and lets it cheat in the "last used"
+ order.
+ * HighTotal: is the total amount of memory in the high region. Highmem is all
+ memory above (approx) 860MB of physical RAM. Kernel uses indirect tricks to
+ access the high memory region. Data cache can go in this memory region.
+ * LowTotal: The total amount of non-highmem memory.
+ * LowFree: The amount of free memory of the low memory region. This is the
+ memory the kernel can address directly. All kernel datastructures need to go
+ into low memory.
+ * SwapTotal: Total amount of physical swap memory.
+ * SwapFree: Total amount of swap memory free.
+ * Committed_AS: An estimate of how much RAM you would need to make a 99.99%
+ guarantee that there never is OOM (out of memory) for this workload. Normally
+ the kernel will overcommit memory. The Committed_AS is a guesstimate of how
+ much RAM/swap you would need worst-case.
+*/
diff --git a/recipes/tegrastats-gtk/files/stats.c b/recipes/tegrastats-gtk/files/stats.c
new file mode 100644
index 0000000..a02bf68
--- /dev/null
+++ b/recipes/tegrastats-gtk/files/stats.c
@@ -0,0 +1,42 @@
+#include <gtk/gtk.h>
+void GetStats(char * str);
+gboolean
+UpdateTitle (gpointer user_data)
+{
+ gchar title[255];
+
+ (void)GetStats(title);
+ gtk_window_set_title ((GtkWindow*)user_data, title);
+ //we want to start a new intervall
+ return 1;
+}
+
+void
+destroy (void)
+{
+ gtk_main_quit ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *window;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC (destroy), NULL);
+ gtk_container_border_width (GTK_CONTAINER (window), 10);
+ gtk_window_set_default_size ((GtkWindow*)window, 1200, 0);
+
+ (void)UpdateTitle(GTK_CONTAINER (window));
+
+ //update title every 2 seconds
+ g_timeout_add_seconds (1, UpdateTitle, window);
+ gtk_widget_show (window);
+
+ gtk_main ();
+
+ return 0;
+}
diff --git a/recipes/tegrastats-gtk/tegrastats-gtk.bb b/recipes/tegrastats-gtk/tegrastats-gtk.bb
new file mode 100644
index 0000000..9f6f8d5
--- /dev/null
+++ b/recipes/tegrastats-gtk/tegrastats-gtk.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "NVIDIAS tegrastats output in a gtk title bar"
+LICENSE = "NVIDIA Propriatry"
+
+DEPENDS = "gtk+"
+PR = "r1"
+
+S = "${WORKDIR}"
+
+SRC_URI="file://stats.c file://main.c file://Makefile"
+LIC_FILES_CHKSUM = "file://main.c;endline=9;md5=2fa47532d931bff0348b6d6835bf86ed"
+
+do_install () {
+ install -d ${D}${bindir}/
+ install -m 0755 ${S}/tegrastats-gtk ${D}${bindir}/
+}
+
+FILES_${PN} = "${bindir}/tegrastats-gtk" \ No newline at end of file
diff --git a/recipes/tegrastats-gtk/tegrastats-gtk.bb~ b/recipes/tegrastats-gtk/tegrastats-gtk.bb~
new file mode 100644
index 0000000..00746d2
--- /dev/null
+++ b/recipes/tegrastats-gtk/tegrastats-gtk.bb~
@@ -0,0 +1,16 @@
+DESCRIPTION = "NVIDIAS tegrastats output in a gtk title bar"
+LICENSE = "NVIDIA Propriatry"
+
+PR = "r1"
+
+S = "${WORKDIR}"
+
+SRC_URI="file://stats.c file://main.c file://Makefile"
+LIC_FILES_CHKSUM = "file://main.c;endline=9;md5=yyyy "
+
+do_install () {
+ install -d ${D}${bindir}/
+ install -m 0755 ${S}/tegrastats-gtk ${D}${bindir}/
+}
+
+FILES_${PN} = "${bindir}/tegrastats-gtk" \ No newline at end of file
diff --git a/recipes/tegrastats/files/Makefile b/recipes/tegrastats/files/Makefile
new file mode 100644
index 0000000..7eb1f2d
--- /dev/null
+++ b/recipes/tegrastats/files/Makefile
@@ -0,0 +1,4 @@
+all:
+ echo "Hallo max"
+ $(CC) ${CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o tegrastats main.c
+ \ No newline at end of file
diff --git a/recipes/tegrastats/files/tegrastats b/recipes/tegrastats/files/tegrastats
new file mode 100755
index 0000000..1285d4d
--- /dev/null
+++ b/recipes/tegrastats/files/tegrastats
Binary files differ
diff --git a/recipes/tegrastats/tegrastats.bb b/recipes/tegrastats/tegrastats.bb
new file mode 100644
index 0000000..3d40f2b
--- /dev/null
+++ b/recipes/tegrastats/tegrastats.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "tegrastats, gives information about cpu use"
+LICENSE = "Nvidia propriatry"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#SRC_URI = "file://tegrastats \
+# "
+
+S = "${WORKDIR}/target-utils/tegrastats"
+
+SVN_REV = "230"
+SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=target-utils/tegrastats;rev=${SVN_REV};proto=http"
+
+PACKAGES = "${PN}"
+
+#FILES_${PN} =
+
+do_compile() {
+ ${CC} -DNV_IS_LDK=1 ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${S}/main.c -o tegrastats
+}
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/tegrastats ${D}/usr/bin
+}
diff --git a/recipes/tegrastats/tegrastats.bb~ b/recipes/tegrastats/tegrastats.bb~
new file mode 100644
index 0000000..58eb47a
--- /dev/null
+++ b/recipes/tegrastats/tegrastats.bb~
@@ -0,0 +1,26 @@
+DESCRIPTION = "tegrastats, gives information about cpu use"
+LICENSE = "Nvidia propriatry"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#SRC_URI = "file://tegrastats \
+# "
+
+S = "${WORKDIR}/target-utils/tegrastats"
+
+SVN_REV = 230
+SRC_URI = "svn://tegradev:tegra123!@mammut.toradex.int:8090/colibri_tegra_linux/trunk;module=target-utils/tegrastats;rev=${SVN_REV};proto=http"
+
+PACKAGES = "${PN}"
+
+#FILES_${PN} =
+
+do_compile() {
+ ${CC} -DNV_IS_LDK=1 ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${S}/main.c -o tegrastats
+}
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -m 0755 ${S}/tegrastats ${D}/usr/bin
+}
diff --git a/recipes/trdx-config/angstrom-feed-configs.bb b/recipes/trdx-config/angstrom-feed-configs.bb
new file mode 100644
index 0000000..2e2e58c
--- /dev/null
+++ b/recipes/trdx-config/angstrom-feed-configs.bb
@@ -0,0 +1,79 @@
+DESCRIPTION = "Configuration files for online package repositories aka feeds"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+#PV = "${DISTRO_VERSION}"
+PR = "r17"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FEED_BASEPATH ?= "unstable/feed/"
+
+IWMMXT_FEED = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '',d)}"
+
+do_compile() {
+ mkdir -p ${S}/${sysconfdir}/opkg
+
+ for feed in base debug perl python gstreamer ; do
+ echo "src/gz ${feed} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/${feed}" > ${S}/${sysconfdir}/opkg/${feed}-feed.conf
+ done
+
+ #trdx: make available the feeds of other, but compatible arm architectures and of the unstable feeds
+ echo "src/gz base2 ${ANGSTROM_URI}/feeds/next/ipk/eglibc/armv6/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base3 ${ANGSTROM_URI}/feeds/next/ipk/eglibc/armv5te/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base4 ${ANGSTROM_URI}/feeds/unstable/ipk/glibc/armv6/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base5 ${ANGSTROM_URI}/feeds/unstable/ipk/glibc/armv5te/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+
+ echo "src/gz ${MACHINE_ARCH} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/machine/${MACHINE_ARCH}" > ${S}/${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf
+ echo "#src/gz sdk ${ANGSTROM_URI}/${FEED_BASEPATH}sdk" > ${S}/${sysconfdir}/opkg/sdk-feed.conf
+ echo "src/gz no-arch ${ANGSTROM_URI}/${FEED_BASEPATH}all" > ${S}/${sysconfdir}/opkg/noarch-feed.conf
+
+ # iwmmxt is a special case, add the iwmmxt feed for machine that have 'iwmmxt' in MACHINE_FEATURES
+ if [ "${IWMMXT_FEED}" = "iwmmxt" ] ; then
+ echo "src/gz iwmmxt ${ANGSTROM_URI}/${FEED_BASEPATH}iwmmxt/base" > ${S}/${sysconfdir}/opkg/iwmmxt-feed.conf
+ fi
+
+
+ for localepkg in a af am an ang ar as ast ay az be bg bn br bs byn ca co crh cs csb cy da de dv dz el en eo es et eu fa ff fi fo fr fur fy ga gd gez gl gn gu gv ha haw he hi hr hsb ht hu hy ia id ig io is it iu iw ja ka kk kl km kn ko kok ks ku kw ky la lg li lo locale lt lv mai mg mi mk ml mn mr ms mt mvo my nb ne nl nn no nr nso oc om or pa pap pis pl ps pt qu ro ru rw sa sd se si sid sk sl so sp sq sr ss st sv sw syr ta te tet tg th ti tig tk tl tn tpi tr ts tt ug uk ur uz ve vi wa wal wo xh yi yo zh zu ; do
+ echo "src/gz locale-${localepkg}-feed ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/locales/${localepkg}" > ${S}/${sysconfdir}/opkg/locale-${localepkg}-feed.conf
+ done
+}
+
+
+do_install () {
+ install -d ${D}${sysconfdir}/opkg
+ install -m 0644 ${S}/${sysconfdir}/opkg/* ${D}${sysconfdir}/opkg/
+}
+
+FILES_${PN} = "${sysconfdir}/opkg/base-feed.conf \
+ ${sysconfdir}/opkg/debug-feed.conf \
+ ${sysconfdir}/opkg/perl-feed.conf \
+ ${sysconfdir}/opkg/python-feed.conf \
+ ${sysconfdir}/opkg/gstreamer-feed.conf \
+ ${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf \
+ ${sysconfdir}/opkg/noarch-feed.conf \
+ ${sysconfdir}/opkg/iwmmxt-feed.conf \
+ ${sysconfdir}/opkg/sdk-feed.conf \
+ "
+
+CONFFILES_${PN} += "${sysconfdir}/opkg/base-feed.conf \
+ ${sysconfdir}/opkg/debug-feed.conf \
+ ${sysconfdir}/opkg/perl-feed.conf \
+ ${sysconfdir}/opkg/python-feed.conf \
+ ${sysconfdir}/opkg/gstreamer-feed.conf \
+ ${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf \
+ ${sysconfdir}/opkg/noarch-feed.conf \
+ ${sysconfdir}/opkg/sdk-feed.conf \
+ "
+
+# Get rid of opkg-collateral
+RCONFLICTS_${PN} = "opkg-collateral"
+RREPLACES_${PN} = "opkg-collateral"
+RPROVIDES_${PN} = "opkg-collateral"
+
+RRECOMMENDS_${PN} += "opkg"
+
+python populate_packages_prepend () {
+ etcdir = bb.data.expand('${sysconfdir}/opkg', d)
+ do_split_packages(d, etcdir, '^locale-(.*)\.conf$', 'angstrom-locale-%s-config', 'Angstrom feed config for the %s locale', extra_depends='', allow_links=True)
+}
+
diff --git a/recipes/trdx-config/angstrom-feed-configs.bb~ b/recipes/trdx-config/angstrom-feed-configs.bb~
new file mode 100644
index 0000000..fabc334
--- /dev/null
+++ b/recipes/trdx-config/angstrom-feed-configs.bb~
@@ -0,0 +1,89 @@
+DESCRIPTION = "Configuration files for online package repositories aka feeds"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=aabb"
+
+RRECOMMENDS_${PN} += "opkg"
+
+#PV = "${DISTRO_VERSION}"
+PR = "r15"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FEED_BASEPATH ?= "unstable/feed/"
+
+IWMMXT_FEED = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '',d)}"
+
+do_fetch () {
+ echo "MIT" > ${S}/COPYING
+}
+
+do_compile() {
+ mkdir -p ${S}/${sysconfdir}/opkg
+
+ rm ${S}/${sysconfdir}/opkg/arch.conf || true
+ ipkgarchs="${PACKAGE_ARCHS}"
+ priority=1
+ for arch in $ipkgarchs; do
+ echo "arch $arch $priority" >> ${S}/${sysconfdir}/opkg/arch.conf
+ priority=$(expr $priority + 5)
+ done
+
+ for feed in base debug perl python gstreamer ; do
+ echo "src/gz ${feed} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/${feed}" > ${S}/${sysconfdir}/opkg/${feed}-feed.conf
+ done
+
+ #trdx: make available the feeds of other, but compatible arm architectures and of the unstable feeds
+ echo "src/gz base2 ${ANGSTROM_URI}/feeds/next/ipk/eglibc/armv6/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base3 ${ANGSTROM_URI}/feeds/next/ipk/eglibc/armv5te/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base4 ${ANGSTROM_URI}/feeds/unstable/ipk/glibc/armv6/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+ echo "src/gz base5 ${ANGSTROM_URI}/feeds/unstable/ipk/glibc/armv5te/base" >> ${S}/${sysconfdir}/opkg/base-feed.conf
+
+ echo "src/gz ${MACHINE_ARCH} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/machine/${MACHINE_ARCH}" > ${S}/${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf
+ echo "#src/gz sdk ${ANGSTROM_URI}/${FEED_BASEPATH}sdk" > ${S}/${sysconfdir}/opkg/sdk-feed.conf
+ echo "src/gz no-arch ${ANGSTROM_URI}/${FEED_BASEPATH}all" > ${S}/${sysconfdir}/opkg/noarch-feed.conf
+
+ # iwmmxt is a special case, add the iwmmxt feed for machine that have 'iwmmxt' in MACHINE_FEATURES
+ if [ "${IWMMXT_FEED}" = "iwmmxt" ] ; then
+ echo "src/gz iwmmxt ${ANGSTROM_URI}/${FEED_BASEPATH}iwmmxt/base" > ${S}/${sysconfdir}/opkg/iwmmxt-feed.conf
+ fi
+
+
+ for localepkg in a af am an ang ar as ast ay az be bg bn br bs byn ca co crh cs csb cy da de dv dz el en eo es et eu fa ff fi fo fr fur fy ga gd gez gl gn gu gv ha haw he hi hr hsb ht hu hy ia id ig io is it iu iw ja ka kk kl km kn ko kok ks ku kw ky la lg li lo locale lt lv mai mg mi mk ml mn mr ms mt mvo my nb ne nl nn no nr nso oc om or pa pap pis pl ps pt qu ro ru rw sa sd se si sid sk sl so sp sq sr ss st sv sw syr ta te tet tg th ti tig tk tl tn tpi tr ts tt ug uk ur uz ve vi wa wal wo xh yi yo zh zu ; do
+ echo "src/gz locale-${localepkg}-feed ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/locales/${localepkg}" > ${S}/${sysconfdir}/opkg/locale-${localepkg}-feed.conf
+ done
+}
+
+
+do_install () {
+ install -d ${D}${sysconfdir}/opkg
+ install -m 0644 ${S}/${sysconfdir}/opkg/* ${D}${sysconfdir}/opkg/
+}
+
+FILES_${PN} = "${sysconfdir}/opkg/base-feed.conf \
+ ${sysconfdir}/opkg/debug-feed.conf \
+ ${sysconfdir}/opkg/perl-feed.conf \
+ ${sysconfdir}/opkg/python-feed.conf \
+ ${sysconfdir}/opkg/gstreamer-feed.conf \
+ ${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf \
+ ${sysconfdir}/opkg/noarch-feed.conf \
+ ${sysconfdir}/opkg/iwmmxt-feed.conf \
+ ${sysconfdir}/opkg/sdk-feed.conf \
+ ${sysconfdir}/opkg/arch.conf \
+ "
+
+
+CONFFILES_${PN} += "${sysconfdir}/opkg/base-feed.conf \
+ ${sysconfdir}/opkg/debug-feed.conf \
+ ${sysconfdir}/opkg/perl-feed.conf \
+ ${sysconfdir}/opkg/python-feed.conf \
+ ${sysconfdir}/opkg/gstreamer-feed.conf \
+ ${sysconfdir}/opkg/${MACHINE_ARCH}-feed.conf \
+ ${sysconfdir}/opkg/noarch-feed.conf \
+ ${sysconfdir}/opkg/sdk-feed.conf \
+ ${sysconfdir}/opkg/arch.conf \
+ "
+
+python populate_packages_prepend () {
+ etcdir = bb.data.expand('${sysconfdir}/opkg', d)
+ do_split_packages(d, etcdir, '^locale-(.*)\.conf$', 'angstrom-locale-%s-config', 'Angstrom feed config for the %s locale', extra_depends='', allow_links=True)
+}
+
diff --git a/recipes/trdx-config/files/COPYING b/recipes/trdx-config/files/COPYING
new file mode 100644
index 0000000..040e990
--- /dev/null
+++ b/recipes/trdx-config/files/COPYING
@@ -0,0 +1,5 @@
+This piece is software is provided by Toradex AG as sample code.
+There is no warranty for the program.
+Toradex AG put this program in public domain, uncopyrighted.
+
+Renens, Swizterland, 2008-10-23
diff --git a/recipes/trdx-config/files/base-feed.conf b/recipes/trdx-config/files/base-feed.conf
new file mode 100644
index 0000000..6fd2130
--- /dev/null
+++ b/recipes/trdx-config/files/base-feed.conf
@@ -0,0 +1,5 @@
+src/gz base http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/armv7a-vfp/base
+src/gz base2 http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/armv6/base
+src/gz base3 http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/armv5te/base
+src/gz base4 http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv6/base
+src/gz base5 http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv5te/base \ No newline at end of file
diff --git a/recipes/trdx-config/files/inittab b/recipes/trdx-config/files/inittab
new file mode 100644
index 0000000..a43057d
--- /dev/null
+++ b/recipes/trdx-config/files/inittab
@@ -0,0 +1,42 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:5:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+S:2345:respawn:/sbin/getty 115200 ttyS0
+# /sbin/getty invocations for the runlevels.
+#
+# The "id" field MUST be the same as the last
+# characters of the device (after "tty").
+#
+# Format:
+# <id>:<runlevels>:<action>:<process>
+#
+
+1:2345:respawn:/sbin/getty 115200 tty1
+
diff --git a/recipes/trdx-config/files/noarch-feed.conf b/recipes/trdx-config/files/noarch-feed.conf
new file mode 100644
index 0000000..d2b1835
--- /dev/null
+++ b/recipes/trdx-config/files/noarch-feed.conf
@@ -0,0 +1,2 @@
+src/gz no-arch http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/all
+src/gz no-arch2 http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/all
diff --git a/recipes/trdx-config/files/nvrm_daemon b/recipes/trdx-config/files/nvrm_daemon
new file mode 100755
index 0000000..c3a9268
--- /dev/null
+++ b/recipes/trdx-config/files/nvrm_daemon
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Start or stop the Nvidia Ressource Manager Daemon.
+#
+# Based on debian apmd scripts
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+
+case "$1" in
+ start)
+ echo -n "Nvidia Ressource Manager Daemon: "
+ start-stop-daemon -S -x /bin/nvrm_daemon -- --daemon &
+ if [ $? = 0 ]; then
+ echo "nvrm_daemon."
+ else
+ echo "(failed.)"
+ fi
+ ;;
+ stop)
+ echo -n "Nvidia Ressource Manager Daemon: "
+ start-stop-daemon -K -x /bin/nvrm_daemon
+ echo "nvrm_daemon."
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ exit
+ ;;
+ *)
+ echo "Usage: /etc/init.d/nvrm_daemon {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes/trdx-config/trdx-config.bb b/recipes/trdx-config/trdx-config.bb
new file mode 100644
index 0000000..81c0191
--- /dev/null
+++ b/recipes/trdx-config/trdx-config.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "setup files"
+LICENSE = "Public Domain"
+PR = "r2"
+
+inherit update-rc.d
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = " file://inittab \
+ file://nvrm_daemon \
+ file://COPYING \
+ "
+LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYING;md5=1c3a7fb45253c11c74434676d84fe7dd"
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "/etc/* ${sysconfdir}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+DEPENDS_${PN} += "update-rc.d"
+RDEPENDS_${PN} += "update-rc.d"
+
+do_install () {
+ install -d ${D}/etc/init.d
+ install -m 0644 ${WORKDIR}/inittab ${D}/etc/
+ install -m 0755 ${WORKDIR}/nvrm_daemon ${D}/etc/init.d
+}
+
+INITSCRIPT_NAME = "nvrm_daemon"
+INITSCRIPT_PARAMS = "defaults 91" \ No newline at end of file
diff --git a/recipes/trdx-config/trdx-config.bb~ b/recipes/trdx-config/trdx-config.bb~
new file mode 100644
index 0000000..ce6e1b9
--- /dev/null
+++ b/recipes/trdx-config/trdx-config.bb~
@@ -0,0 +1,30 @@
+DESCRIPTION = "setup files"
+LICENSE = "Public Domain"
+PR = "r2"
+
+inherit update-rc.d
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = " file://inittab \
+ file://nvrm_daemon \
+ file://COPYING \
+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=1c3a7fb45253c11c74434676d84fe7dd"
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "/etc/* ${sysconfdir}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+DEPENDS_${PN} += "update-rc.d"
+RDEPENDS_${PN} += "update-rc.d"
+
+do_install () {
+ install -d ${D}/etc/init.d
+ install -m 0644 ${WORKDIR}/inittab ${D}/etc/
+ install -m 0755 ${WORKDIR}/nvrm_daemon ${D}/etc/init.d
+}
+
+INITSCRIPT_NAME = "nvrm_daemon"
+INITSCRIPT_PARAMS = "defaults 91" \ No newline at end of file
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/bin-files.tar.bz2 b/recipes/trdx-nv-binaries/files/colibri-t20/bin-files.tar.bz2
new file mode 100644
index 0000000..f11dba5
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/bin-files.tar.bz2
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/bin/nvrm_daemon b/recipes/trdx-nv-binaries/files/colibri-t20/staging/bin/nvrm_daemon
new file mode 100755
index 0000000..524015a
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/bin/nvrm_daemon
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/default-display-manager b/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/default-display-manager
new file mode 100644
index 0000000..17fdb92
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/default-display-manager
@@ -0,0 +1 @@
+/usr/sbin/gdm
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/xorg.conf.tfttouch b/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/xorg.conf.tfttouch
new file mode 100644
index 0000000..1cd42db
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/etc/X11/xorg.conf.tfttouch
@@ -0,0 +1,91 @@
+# This is the minimal configuration necessary to use the Tegra driver.
+# Please refer to the xorg.conf man page for more configuration
+# options provided by the X server, including display-related options
+# provided by RandR 1.2 and higher.
+
+# Disable extensions not useful on Tegra.
+Section "Module"
+ Disable "dri"
+ Disable "dri2"
+ Disable "glx"
+ SubSection "extmod"
+ Option "omit xfree86-dga"
+ EndSubSection
+EndSection
+
+Section "Device"
+ Identifier "Tegra"
+ Driver "tegra"
+
+# VirtualDesktop indicates which virtual desktops should be used by X.
+# X will use the specified virtual desktop *and* the next one. In
+# order for an external app to share a display with the X server, it
+# needs to use the same virtual desktop. Valid values are integers 0
+# (default) or 1.
+
+# Option "VirtualDesktop" "1"
+
+# OverlayDepth is a 32-bit integer which is used to control overlay
+# stacking order. The overlay with the lowest depth is in front of
+# all others. This value has meaning only when multiple overlays are
+# present on a display.
+
+# Option "OverlayDepth" "255"
+
+# OverlayCombineMode determines how the X overlay is combined with the
+# overlay behind it during scanout. Available modes are: Opaque
+# (default), SourceAlphaBlend, and PremultSourceAlphaBlend. This
+# value has meaning only when an external process has created a
+# display which is behind the X server.
+
+# Option "OverlayCombineMode" "PremultSourceAlphaBlend"
+
+# ARGBHWCursor controls whether the X driver uses an overlay to
+# display 32-bit "true-color" cursors, or whether such cursors are
+# emulated in software. Valid values are "true" (default) to enable
+# hardware cursors, and "false" to disable them.
+
+ Option "ARGBHWCursor" "false"
+EndSection
+
+Section "ServerFlags"
+# Set the basic blanking screen saver timeout in minutes. 0 to disable.
+
+ Option "blank time" "0"
+
+# Set the DPMS timeouts. These are set here because they are global
+# rather than screen-specific. These settings alone don't enable DPMS.
+# It is enabled per-screen (or per-monitor), and even then only when
+# the driver supports it.
+
+ Option "standby time" "0"
+ Option "suspend time" "0"
+ Option "off time" "0"
+EndSection
+
+Section "Monitor"
+ Identifier "TFTLCD"
+EndSection
+
+Section "Screen"
+
+ Identifier "Screen TFTLCD"
+ Device "Tegra"
+ Monitor "TFTLCD"
+
+ DefaultDepth 16
+
+ SubSection "Display"
+ Depth 16
+ Modes "800x480"
+ ViewPort 0 0
+ Virtual 800 480
+ EndSubsection
+
+EndSection
+
+Section "ServerLayout"
+ Identifier "TouchView"
+ Screen "Screen TFTLCD"
+EndSection
+
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_core.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_core.axf
new file mode 100644
index 0000000..631caa0
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_core.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_transport.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_transport.axf
new file mode 100644
index 0000000..7617db4
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvddk_audiofx_transport.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_aacdec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_aacdec.axf
new file mode 100644
index 0000000..b269141
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_aacdec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_adtsdec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_adtsdec.axf
new file mode 100644
index 0000000..3105648
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_adtsdec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_audiomixer.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_audiomixer.axf
new file mode 100644
index 0000000..b9676da
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_audiomixer.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_h264dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_h264dec.axf
new file mode 100644
index 0000000..0c1a154
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_h264dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegdec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegdec.axf
new file mode 100644
index 0000000..36f56d3
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegdec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegenc.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegenc.axf
new file mode 100644
index 0000000..d572f91
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_jpegenc.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_manager.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_manager.axf
new file mode 100644
index 0000000..eccc052
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_manager.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp2dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp2dec.axf
new file mode 100644
index 0000000..8c0056c
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp2dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp3dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp3dec.axf
new file mode 100644
index 0000000..7cc4368
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mp3dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mpeg4dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mpeg4dec.axf
new file mode 100644
index 0000000..1977535
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_mpeg4dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_reference.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_reference.axf
new file mode 100644
index 0000000..a0e6da5
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_reference.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_service.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_service.axf
new file mode 100644
index 0000000..8357edc
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_service.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sorensondec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sorensondec.axf
new file mode 100644
index 0000000..3de90e6
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sorensondec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sw_mp3dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sw_mp3dec.axf
new file mode 100644
index 0000000..7703ef4
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_sw_mp3dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vc1dec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vc1dec.axf
new file mode 100644
index 0000000..d0b4568
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vc1dec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vp6dec_vld.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vp6dec_vld.axf
new file mode 100644
index 0000000..eb69f0a
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_vp6dec_vld.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wavdec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wavdec.axf
new file mode 100644
index 0000000..5943399
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wavdec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmadec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmadec.axf
new file mode 100644
index 0000000..0baf64d
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmadec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmaprodec.axf b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmaprodec.axf
new file mode 100644
index 0000000..178e113
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvmm_wmaprodec.axf
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvrm_avp.bin b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvrm_avp.bin
new file mode 100644
index 0000000..de7652c
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/lib/firmware/nvrm_avp.bin
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/gstreamer-0.10/libgstomx.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/gstreamer-0.10/libgstomx.so
new file mode 100755
index 0000000..7d725c8
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/gstreamer-0.10/libgstomx.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libEGL.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libEGL.so
new file mode 100755
index 0000000..abe35cb
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libEGL.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libGLESv2.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libGLESv2.so
new file mode 100755
index 0000000..8b2003e
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libGLESv2.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libKD.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libKD.so
new file mode 100755
index 0000000..2c286e1
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libKD.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libcgdrv.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libcgdrv.so
new file mode 100755
index 0000000..999b8ac
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libcgdrv.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvcwm.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvcwm.so
new file mode 100755
index 0000000..a0bb4db
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvcwm.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d.so
new file mode 100755
index 0000000..6272d7e
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d_v2.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d_v2.so
new file mode 100755
index 0000000..f99d78b
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_2d_v2.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_audiofx.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_audiofx.so
new file mode 100755
index 0000000..512cd4b
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_audiofx.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_disp.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_disp.so
new file mode 100755
index 0000000..8671209
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvddk_disp.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispatch_helper.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispatch_helper.so
new file mode 100755
index 0000000..bf0116c
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispatch_helper.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_d.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_d.so
new file mode 100755
index 0000000..bfd91e3
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_d.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_impl_d.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_impl_d.so
new file mode 100755
index 0000000..f542a83
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvdispmgr_impl_d.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm.so
new file mode 100755
index 0000000..752da41
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_audio.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_audio.so
new file mode 100755
index 0000000..53116a6
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_audio.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_contentpipe.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_contentpipe.so
new file mode 100755
index 0000000..97fcaa8
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_contentpipe.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_image.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_image.so
new file mode 100755
index 0000000..f920eab
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_image.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_manager.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_manager.so
new file mode 100755
index 0000000..6eb0d59
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_manager.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_misc.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_misc.so
new file mode 100755
index 0000000..c6a116a
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_misc.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_parser.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_parser.so
new file mode 100755
index 0000000..67404ac
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_parser.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_service.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_service.so
new file mode 100755
index 0000000..e7d53e4
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_service.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_tracklist.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_tracklist.so
new file mode 100755
index 0000000..49d0765
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_tracklist.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_utils.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_utils.so
new file mode 100755
index 0000000..fb32b2c
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_utils.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_video.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_video.so
new file mode 100755
index 0000000..a58330d
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_video.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_videorenderer.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_videorenderer.so
new file mode 100755
index 0000000..f3f564b
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_videorenderer.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_vp6_video.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_vp6_video.so
new file mode 100755
index 0000000..4532675
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_vp6_video.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_writer.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_writer.so
new file mode 100755
index 0000000..bc78360
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvmm_writer.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvomx.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvomx.so
new file mode 100755
index 0000000..73972ac
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvomx.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvos.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvos.so
new file mode 100755
index 0000000..cd74930
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvos.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm.so
new file mode 100755
index 0000000..1363d9a
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics.so
new file mode 100755
index 0000000..2795caf
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics_impl.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics_impl.so
new file mode 100755
index 0000000..bdedef7
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvrm_graphics_impl.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvsm.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvsm.so
new file mode 100755
index 0000000..7a8f2d8
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvsm.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvtvmr.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvtvmr.so
new file mode 100755
index 0000000..05a295b
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvtvmr.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwinsys.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwinsys.so
new file mode 100755
index 0000000..81ef0a3
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwinsys.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwsi.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwsi.so
new file mode 100755
index 0000000..864b9f6
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/libnvwsi.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/xorg/modules/drivers/tegra_drv.so b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/xorg/modules/drivers/tegra_drv.so
new file mode 100755
index 0000000..4f87818
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t20/staging/usr/lib/xorg/modules/drivers/tegra_drv.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/LICENSE b/recipes/trdx-nv-binaries/files/colibri-t30/LICENSE
new file mode 100644
index 0000000..11bcb76
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/LICENSE
@@ -0,0 +1,127 @@
+ License For Customer Use of NVIDIA Software
+
+
+IMPORTANT NOTICE -- READ CAREFULLY: This License For Customer Use of
+NVIDIA Software ("LICENSE") is the agreement which governs use of
+the software of NVIDIA Corporation and its subsidiaries ("NVIDIA")
+downloadable herefrom, including computer software and associated
+printed materials ("SOFTWARE"). By downloading, installing, copying,
+or otherwise using the SOFTWARE, you agree to be bound by the terms
+of this LICENSE. If you do not agree to the terms of this LICENSE,
+do not download the SOFTWARE.
+
+RECITALS
+
+Use of NVIDIA's products requires three elements: the SOFTWARE, the
+hardware on a graphics controller board, and a personal computer. The
+SOFTWARE is protected by copyright laws and international copyright
+treaties, as well as other intellectual property laws and treaties.
+The SOFTWARE is not sold, and instead is only licensed for use,
+strictly in accordance with this document. The hardware is protected
+by various patents, and is sold, but this agreement does not cover
+that sale, since it may not necessarily be sold as a package with
+the SOFTWARE. This agreement sets forth the terms and conditions
+of the SOFTWARE LICENSE only.
+
+1. DEFINITIONS
+
+1.1 Customer. Customer means the entity or individual that
+downloads the SOFTWARE.
+
+2. GRANT OF LICENSE
+
+2.1 Rights and Limitations of Grant. NVIDIA hereby grants Customer
+the following non-exclusive, non-transferable right to use the
+SOFTWARE, with the following limitations:
+
+2.1.1 Rights. Customer may install and use one copy of the SOFTWARE
+on a single computer, and except for making one back-up copy of
+the Software, may not otherwise copy the SOFTWARE. This LICENSE
+of SOFTWARE may not be shared or used concurrently on different
+computers.
+
+2.1.2 Linux/FreeBSD Exception. Notwithstanding the foregoing terms
+of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux or
+FreeBSD operating systems, or other operating systems derived from the
+source code to these operating systems, may be copied and redistributed,
+provided that the binary files thereof are not modified in any way
+(except for unzipping of compressed files).
+
+2.1.3 Limitations.
+
+No Reverse Engineering. Customer may not reverse engineer,
+decompile, or disassemble the SOFTWARE, nor attempt in any other
+manner to obtain the source code.
+
+No Separation of Components. The SOFTWARE is licensed as a
+single product. Its component parts may not be separated for use
+on more than one computer, nor otherwise used separately from the
+other parts.
+
+No Rental. Customer may not rent or lease the SOFTWARE to someone
+else.
+
+3. TERMINATION
+
+This LICENSE will automatically terminate if Customer fails to
+comply with any of the terms and conditions hereof. In such event,
+Customer must destroy all copies of the SOFTWARE and all of its
+component parts.
+
+Defensive Suspension. If Customer commences or participates in any legal
+proceeding against NVIDIA, then NVIDIA may, in its sole discretion,
+suspend or terminate all license grants and any other rights provided
+under this LICENSE during the pendency of such legal proceedings.
+
+4. COPYRIGHT
+
+All title and copyrights in and to the SOFTWARE (including but
+not limited to all images, photographs, animations, video, audio,
+music, text, and other information incorporated into the SOFTWARE),
+the accompanying printed materials, and any copies of the SOFTWARE,
+are owned by NVIDIA, or its suppliers. The SOFTWARE is protected
+by copyright laws and international treaty provisions. Accordingly,
+Customer is required to treat the SOFTWARE like any other copyrighted
+material, except as otherwise allowed pursuant to this LICENSE
+and that it may make one copy of the SOFTWARE solely for backup or
+archive purposes.
+
+5. APPLICABLE LAW
+
+This agreement shall be deemed to have been made in, and shall be
+construed pursuant to, the laws of the State of California.
+
+6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY
+
+6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE
+LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS
+DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT
+NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE.
+
+6.2 No Liability for Consequential Damages. TO THE MAXIMUM
+EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR
+ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR
+CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION,
+DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS
+OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT
+OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. MISCELLANEOUS
+
+The United Nations Convention on Contracts for the International
+Sale of Goods is specifically disclaimed. If any provision of this
+LICENSE is inconsistent with, or cannot be fully enforced under,
+the law, such provision will be construed as limited to the extent
+necessary to be consistent with and fully enforceable under the law.
+This agreement is the final, complete and exclusive agreement between
+the parties relating to the subject matter hereof, and supersedes
+all prior or contemporaneous understandings and agreements relating
+to such subject matter, whether oral or written. Customer agrees
+that it will not ship, transfer or export the SOFTWARE into any
+country, or use the SOFTWARE in any manner, prohibited by the
+United States Bureau of Export Administration or any export laws,
+restrictions or regulations. This LICENSE may only be modified in
+writing signed by an authorized officer of NVIDIA.
+
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/base.tgz b/recipes/trdx-nv-binaries/files/colibri-t30/base.tgz
new file mode 100644
index 0000000..4166b82
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/base.tgz
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/kernel_supplements.tbz2 b/recipes/trdx-nv-binaries/files/colibri-t30/kernel_supplements.tbz2
new file mode 100644
index 0000000..9e1ece0
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/kernel_supplements.tbz2
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/nvgstplayer.tbz2 b/recipes/trdx-nv-binaries/files/colibri-t30/nvgstplayer.tbz2
new file mode 100644
index 0000000..4a06b33
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/nvgstplayer.tbz2
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/restricted_codecs.tbz2 b/recipes/trdx-nv-binaries/files/colibri-t30/restricted_codecs.tbz2
new file mode 100644
index 0000000..33f2255
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/restricted_codecs.tbz2
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/wifi.tbz2 b/recipes/trdx-nv-binaries/files/colibri-t30/wifi.tbz2
new file mode 100644
index 0000000..f4dedc9
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/wifi.tbz2
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi10.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi10.so
new file mode 100755
index 0000000..95d77db
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi10.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi11.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi11.so
new file mode 100755
index 0000000..db26aa4
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi11.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi5.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi5.so
new file mode 100755
index 0000000..c7f7434
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi5.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi6.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi6.so
new file mode 100755
index 0000000..7d95bbc
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi6.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi7.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi7.so
new file mode 100755
index 0000000..72d7635
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi7.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi8.so b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi8.so
new file mode 100755
index 0000000..da87009
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/x/tegra_drv.abi8.so
Binary files differ
diff --git a/recipes/trdx-nv-binaries/files/colibri-t30/xorg.conf b/recipes/trdx-nv-binaries/files/colibri-t30/xorg.conf
new file mode 100644
index 0000000..4cb4f5a
--- /dev/null
+++ b/recipes/trdx-nv-binaries/files/colibri-t30/xorg.conf
@@ -0,0 +1,92 @@
+# This is the minimal configuration necessary to use the Tegra driver.
+# Please refer to the xorg.conf man page for more configuration
+# options provided by the X server, including display-related options
+# provided by RandR 1.2 and higher.
+
+# Disable extensions not useful on Tegra.
+Section "Module"
+ Disable "dri"
+ Disable "dri2"
+ Disable "glx"
+ SubSection "extmod"
+ Option "omit xfree86-dga"
+ EndSubSection
+EndSection
+
+Section "Device"
+ Identifier "Tegra"
+ Driver "tegra"
+
+# VirtualDesktop indicates which virtual desktops should be used by X.
+# X will use the specified virtual desktop *and* the next one. In
+# order for an external app to share a display with the X server, it
+# needs to use the same virtual desktop. Valid values are integers 0
+# (default) or 1.
+
+# Option "VirtualDesktop" "1"
+
+# OverlayDepth is a 32-bit integer which is used to control overlay
+# stacking order. The overlay with the lowest depth is in front of
+# all others. This value has meaning only when multiple overlays are
+# present on a display.
+
+# Option "OverlayDepth" "255"
+
+# OverlayCombineMode determines how the X overlay is combined with the
+# overlay behind it during scanout. Available modes are: Opaque
+# (default), SourceAlphaBlend, and PremultSourceAlphaBlend. This
+# value has meaning only when an external process has created a
+# display which is behind the X server.
+
+# Option "OverlayCombineMode" "PremultSourceAlphaBlend"
+
+# ARGBHWCursor controls whether the X driver uses an overlay to
+# display 32-bit "true-color" cursors, or whether such cursors are
+# emulated in software. Valid values are "true" (default) to enable
+# hardware cursors, and "false" to disable them.
+
+ Option "ARGBHWCursor" "false"
+EndSection
+
+Section "ServerFlags"
+# Set the basic blanking screen saver timeout in minutes. 0 to disable.
+
+ Option "blank time" "0"
+
+# Set the DPMS timeouts. These are set here because they are global
+# rather than screen-specific. These settings alone don't enable DPMS.
+# It is enabled per-screen (or per-monitor), and even then only when
+# the driver supports it.
+
+ Option "standby time" "0"
+ Option "suspend time" "0"
+ Option "off time" "0"
+EndSection
+
+Section "Monitor"
+ Identifier "LVDS-1"
+ Option "DPMS" "off"
+EndSection
+
+Section "Screen"
+
+ Identifier "Screen LVDS-1"
+ Device "Tegra"
+ Monitor "LVDS-1"
+
+# DefaultDepth 16
+
+# SubSection "Display"
+# Depth 16
+# Modes "1280x720"
+# ViewPort 0 0
+# Virtual 1280 720
+# EndSubsection
+
+EndSection
+
+Section "ServerLayout"
+ Identifier "TouchView"
+ Screen "Screen LVDS-1"
+EndSection
+
diff --git a/recipes/trdx-nv-binaries/trdx-nv-binaries.bb b/recipes/trdx-nv-binaries/trdx-nv-binaries.bb
new file mode 100644
index 0000000..58c030f
--- /dev/null
+++ b/recipes/trdx-nv-binaries/trdx-nv-binaries.bb
@@ -0,0 +1,66 @@
+DESCRIPTION = "binary files from Nvidia along with there configuration"
+LICENSE = "CLOSED"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI_colibri-t20 = "file://bin-files.tar.bz2 \
+ "
+
+SRC_URI_colibri-t30 = "file://base.tgz \
+ file://x/tegra_drv.abi*.so \
+ file://restricted_codecs.tbz2 \
+ file://nvgstplayer.tbz2 \
+ file://wifi.tbz2 \
+ file://xorg.conf \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += " \
+ ${sysconfdir}/X11/def* \
+ ${sysconfdir}/X11/xorg.conf.* \
+ /lib/firmware/* \
+ /usr/lib/* \
+ "
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+#we have symlinks ending in .so , remove "dev-so", refere to ./openembedded-core/meta/classes/insane.bbclass
+ERROR_QA = "debug-deps dev-deps arch la2 pkgconfig la perms"
+
+do_install_colibri-t20 () {
+ install -d ${D} ${D}/bin ${D}/${sysconfdir}/X11 ${D}/lib/firmware ${D}/usr/lib/gstreamer-0.10 ${D}/usr/lib/xorg/modules/drivers
+ install -m 0755 ${WORKDIR}/bin/* ${D}/bin/
+ install -m 0644 ${WORKDIR}/${sysconfdir}/X11/* ${D}/${sysconfdir}/X11
+ install -m 0644 ${WORKDIR}/lib/firmware/* ${D}/lib/firmware/
+ install -m 0755 ${WORKDIR}/usr/lib/*.so ${D}/usr/lib/
+ install -m 0755 ${WORKDIR}/usr/lib/gstreamer-0.10/*.so ${D}/usr/lib/gstreamer-0.10
+ install -m 0755 ${WORKDIR}/usr/lib/xorg/modules/drivers/* ${D}/usr/lib/xorg/modules/drivers/
+}
+
+do_install_colibri-t30 () {
+ #base.tgz, xorg driver, restricted codecs
+ install -d ${D} ${D}/${sysconfdir}/X11/ ${D}/lib/firmware/ ${D}/usr/lib/xorg/modules/drivers
+ install -m 0644 ${WORKDIR}/${sysconfdir}/X11/xorg.conf ${D}/${sysconfdir}/X11/xorg.conf.nvidia
+ install -m 0644 ${WORKDIR}/lib/firmware/nv* ${D}/lib/firmware/
+ install -m 0644 ${WORKDIR}/usr/lib/*.so ${D}/usr/lib/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi5.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi6.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi7.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi8.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi10.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi11.so ${D}/usr/lib/xorg/modules/drivers/
+ ln -s tegra_drv.abi8.so ${D}/usr/lib/xorg/modules/drivers/tegra_drv.so
+ ln -s libGLESv2.so ${D}/usr/lib//libGLESv2.so.2
+ ln -s libEGL.so ${D}/usr/lib/libEGL.so.1
+
+ #nvgstplayer.tbz2
+ install -d ${D} ${D}/usr/bin ${D}/usr/lib/gstreamer-0.10
+ install -m 0755 ${WORKDIR}/usr/bin/nvgstplayer ${D}/usr/bin/
+ install -m 0644 ${WORKDIR}/usr/lib/gstreamer-0.10/*.so ${D}/usr/lib/gstreamer-0.10/
+
+ #wifi.tbz2
+ install -d ${D} ${D}/lib/firmware/bcm4329
+ install -m 0644 ${WORKDIR}/lib/firmware/bcm4329/* ${D}/lib/firmware/bcm4329
+}
diff --git a/recipes/trdx-nv-binaries/trdx-nv-binaries.bb~ b/recipes/trdx-nv-binaries/trdx-nv-binaries.bb~
new file mode 100644
index 0000000..12f5a77
--- /dev/null
+++ b/recipes/trdx-nv-binaries/trdx-nv-binaries.bb~
@@ -0,0 +1,69 @@
+DESCRIPTION = "binary files from Nvidia along with there configuration"
+LICENSE = "CLOSED"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI_colibri-t20 = "file://bin-files.tar.bz2 \
+ "
+
+SRC_URI_colibri-t30 = "file://base.tgz \
+ file://x/tegra_drv.abi*.so \
+ file://restricted_codecs.tbz2 \
+ file://nvgstplayer.tbz2 \
+ file://wifi.tbz2 \
+ file://xorg.conf \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += " \
+ ${sysconfdir}/X11/def* \
+ ${sysconfdir}/X11/xorg.conf.* \
+ /lib/firmware/* \
+ /usr/lib/* \
+ "
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+#we have symlinks ending in .so , remove "dev-so", refere to ./openembedded-core/meta/classes/insane.bbclass
+ERROR_QA = "arch la2 pkgconfig la perms"
+
+do_install_colibri-t20 () {
+ install -d ${D} ${D}/bin ${D}/${sysconfdir}/X11 ${D}/lib/firmware ${D}/usr/lib/gstreamer-0.10 ${D}/usr/lib/xorg/modules/drivers
+ install -m 0755 ${WORKDIR}/bin/* ${D}/bin/
+ install -m 0644 ${WORKDIR}/${sysconfdir}/X11/* ${D}/${sysconfdir}/X11
+ install -m 0644 ${WORKDIR}/lib/firmware/* ${D}/lib/firmware/
+ install -m 0755 ${WORKDIR}/usr/lib/*.so ${D}/usr/lib/
+ install -m 0755 ${WORKDIR}/usr/lib/gstreamer-0.10/*.so ${D}/usr/lib/gstreamer-0.10
+ install -m 0755 ${WORKDIR}/usr/lib/xorg/modules/drivers/* ${D}/usr/lib/xorg/modules/drivers/
+}
+
+do_install_colibri-t30 () {
+ #base.tgz, xorg driver, restricted codecs
+ install -d ${D} ${D}/${sysconfdir}/X11/ ${D}/lib/firmware/ ${D}/usr/lib/xorg/modules/drivers
+ install -m 0644 ${WORKDIR}/${sysconfdir}/X11/xorg.conf ${D}/${sysconfdir}/X11/xorg.conf.nvidia
+ install -m 0644 ${WORKDIR}/lib/firmware/nv* ${D}/lib/firmware/
+ install -m 0644 ${WORKDIR}/usr/lib/*.so ${D}/usr/lib/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi5.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi6.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi7.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi8.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi10.so ${D}/usr/lib/xorg/modules/drivers/
+ install -m 0644 ${WORKDIR}/x/tegra_drv.abi11.so ${D}/usr/lib/xorg/modules/drivers/
+ ln -s tegra_drv.abi8.so ${D}/usr/lib/xorg/modules/drivers/tegra_drv.so
+ ln -s libGLESv2.so ${D}/usr/lib//libGLESv2.so.2
+ ln -s libEGL.so ${D}/usr/lib/libEGL.so.1
+
+ #nvgstplayer.tbz2
+ install -d ${D} ${D}/usr/bin ${D}/usr/lib/gstreamer-0.10
+ install -m 0755 ${WORKDIR}/usr/bin/nvgstplayer ${D}/usr/bin/
+ install -m 0644 ${WORKDIR}/usr/lib/gstreamer-0.10/*.so ${D}/usr/lib/gstreamer-0.10/
+
+ #wifi.tbz2
+ install -d ${D} ${D}/lib/firmware/bcm4329
+ install -m 0644 ${WORKDIR}/lib/firmware/bcm4329/* ${D}/lib/firmware/bcm4329
+}
+
+# We want to provide several versions of a so and symlink the one actually used, have OE's QA not throw an error
+ERROR_QA = "debug-deps dev-deps debug-files arch la2 pkgconfig la perms" \ No newline at end of file
diff --git a/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb b/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb
new file mode 100644
index 0000000..7fa3323
--- /dev/null
+++ b/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "sample code to access the toradex oak sensors"
+LICENSE = "PublicDomain"
+
+S="${WORKDIR}/OakLinux_${PV}"
+
+SRC_URI = "http://files.toradex.com/Oak/Linux/OakLinux_${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "cedc87c056f961c15751ee899fb719d5"
+SRC_URI[sha256sum] = "69836dfa746422a64f6518cc9e785a7a64ca67d82f5fae0421515a59f4394929"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1c3a7fb45253c11c74434676d84fe7dd"
+
+inherit autotools
+
+FILES_${PN} += ""
+
diff --git a/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb~ b/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb~
new file mode 100644
index 0000000..2f83bba
--- /dev/null
+++ b/recipes/trdx-oak-sensors/trdx-oak-sensors_0082.bb~
@@ -0,0 +1,15 @@
+DESCRIPTION = "sample code to access the toradex oak sensors"
+LICENSE = "PublicDomain"
+
+S="${WORKDIR}/OakLinux_${PV}"
+
+SRC_URI = "http://files.toradex.com/Oak/Linux/OakLinux_${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "cedc87c056f961c15751ee899fb719d5"
+SRC_URI[sha256sum] = "69836dfa746422a64f6518cc9e785a7a64ca67d82f5fae0421515a59f4394929"
+LIC_FILES_CHKSUM = "file://COPYING;md5="1c3a7fb45253c11c74434676d84fe7dd"
+
+inherit autotools
+
+FILES_${PN} += ""
+
diff --git a/recipes/trdx-odm/files/libnvodm_disp.so.allmodes b/recipes/trdx-odm/files/libnvodm_disp.so.allmodes
new file mode 100755
index 0000000..523f873
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_disp.so.allmodes
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_disp.so.vgaonly b/recipes/trdx-odm/files/libnvodm_disp.so.vgaonly
new file mode 100755
index 0000000..463f121
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_disp.so.vgaonly
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_dtvtuner.so b/recipes/trdx-odm/files/libnvodm_dtvtuner.so
new file mode 100755
index 0000000..7d2d744
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_dtvtuner.so
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_hdmi.so b/recipes/trdx-odm/files/libnvodm_hdmi.so
new file mode 100755
index 0000000..9a46f28
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_hdmi.so
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_imager.so b/recipes/trdx-odm/files/libnvodm_imager.so
new file mode 100755
index 0000000..a81419f
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_imager.so
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_misc.so b/recipes/trdx-odm/files/libnvodm_misc.so
new file mode 100755
index 0000000..3c2d567
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_misc.so
Binary files differ
diff --git a/recipes/trdx-odm/files/libnvodm_query.so b/recipes/trdx-odm/files/libnvodm_query.so
new file mode 100755
index 0000000..4c06f3e
--- /dev/null
+++ b/recipes/trdx-odm/files/libnvodm_query.so
Binary files differ
diff --git a/recipes/trdx-odm/trdx-odm.bb b/recipes/trdx-odm/trdx-odm.bb
new file mode 100644
index 0000000..db3d132
--- /dev/null
+++ b/recipes/trdx-odm/trdx-odm.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "binary files"
+LICENSE = "CLOSED"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = " \
+ file://libnvodm_disp.so.vgaonly \
+ file://libnvodm_disp.so.allmodes \
+ file://libnvodm_dtvtuner.so \
+ file://libnvodm_hdmi.so \
+ file://libnvodm_imager.so \
+ file://libnvodm_misc.so \
+ file://libnvodm_query.so \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += "/usr/lib/* "
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+#we have symlinks ending in .so , remove "dev-so", refere to ./openembedded-core/meta/classes/insane.bbclass
+ERROR_QA = "debug-deps dev-deps debug-files arch la2 pkgconfig la perms"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_install () {
+ install -d ${D}/usr/lib
+ install -m 0755 ${WORKDIR}/lib* ${D}/usr/lib/
+ cd ${D}/usr/lib/ ; ln -s libnvodm_disp.so.vgaonly libnvodm_disp.so
+}
diff --git a/recipes/trdx-odm/trdx-odm.bb~ b/recipes/trdx-odm/trdx-odm.bb~
new file mode 100644
index 0000000..6493fff
--- /dev/null
+++ b/recipes/trdx-odm/trdx-odm.bb~
@@ -0,0 +1,32 @@
+DESCRIPTION = "binary files"
+LICENSE = "CLOSED"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = " \
+ file://libnvodm_disp.so.vgaonly \
+ file://libnvodm_disp.so.allmodes \
+ file://libnvodm_dtvtuner.so \
+ file://libnvodm_hdmi.so \
+ file://libnvodm_imager.so \
+ file://libnvodm_misc.so \
+ file://libnvodm_query.so \
+ "
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += "/usr/lib/* "
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "True"
+#we have symlinks ending in .so , remove "dev-so", refere to ./openembedded-core/meta/classes/insane.bbclass
+ERROR_QA ?= "debug-deps dev-deps debug-files arch la2 pkgconfig la perms"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_install () {
+ install -d ${D}/usr/lib
+ install -m 0755 ${WORKDIR}/lib* ${D}/usr/lib/
+ cd ${D}/usr/lib/ ; ln -s libnvodm_disp.so.vgaonly libnvodm_disp.so
+}
diff --git a/recipes/xorg-xserver/xserver-xf86-config/colibri-t20/xorg.conf b/recipes/xorg-xserver/xserver-xf86-config/colibri-t20/xorg.conf
new file mode 100644
index 0000000..cfe8d01
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xf86-config/colibri-t20/xorg.conf
@@ -0,0 +1,97 @@
+# This is the minimal configuration necessary to use the Tegra driver.
+# Please refer to the xorg.conf man page for more configuration
+# options provided by the X server, including display-related options
+# provided by RandR 1.2 and higher.
+
+# Disable extensions not useful on Tegra.
+Section "Module"
+ Disable "dri"
+ Disable "dri2"
+ Disable "glx"
+ SubSection "extmod"
+ Option "omit xfree86-dga"
+ EndSubSection
+EndSection
+
+Section "Device"
+ Identifier "Tegra"
+ Driver "tegra"
+
+# VirtualDesktop indicates which virtual desktops should be used by X.
+# X will use the specified virtual desktop *and* the next one. In
+# order for an external app to share a display with the X server, it
+# needs to use the same virtual desktop. Valid values are integers 0
+# (default) or 1.
+
+# Option "VirtualDesktop" "1"
+
+# OverlayDepth is a 32-bit integer which is used to control overlay
+# stacking order. The overlay with the lowest depth is in front of
+# all others. This value has meaning only when multiple overlays are
+# present on a display.
+
+# Option "OverlayDepth" "255"
+
+# OverlayCombineMode determines how the X overlay is combined with the
+# overlay behind it during scanout. Available modes are: Opaque
+# (default), SourceAlphaBlend, and PremultSourceAlphaBlend. This
+# value has meaning only when an external process has created a
+# display which is behind the X server.
+
+# Option "OverlayCombineMode" "PremultSourceAlphaBlend"
+
+# ARGBHWCursor controls whether the X driver uses an overlay to
+# display 32-bit "true-color" cursors, or whether such cursors are
+# emulated in software. Valid values are "true" (default) to enable
+# hardware cursors, and "false" to disable them.
+
+ Option "ARGBHWCursor" "false"
+EndSection
+
+Section "ServerFlags"
+# Set the basic blanking screen saver timeout in minutes. 0 to disable.
+
+ Option "blank time" "0"
+
+# Set the DPMS timeouts. These are set here because they are global
+# rather than screen-specific. These settings alone don't enable DPMS.
+# It is enabled per-screen (or per-monitor), and even then only when
+# the driver supports it.
+
+ Option "standby time" "0"
+ Option "suspend time" "0"
+ Option "off time" "0"
+EndSection
+
+Section "Monitor"
+
+ Identifier "HDMI"
+
+EndSection
+
+Section "Monitor"
+
+ Identifier "TFTLCD"
+
+EndSection
+
+Section "Screen"
+
+ Identifier "Screen HDMI"
+ Device "Tegra"
+ Monitor "HDMI"
+
+ DefaultDepth 16
+
+EndSection
+
+Section "Screen"
+
+ Identifier "Screen TFTLCD"
+ Device "Tegra"
+ Monitor "TFTLCD"
+
+ DefaultDepth 16
+
+EndSection
+
diff --git a/recipes/xorg-xserver/xserver-xf86-config/colibri-t30/xorg.conf b/recipes/xorg-xserver/xserver-xf86-config/colibri-t30/xorg.conf
new file mode 100644
index 0000000..4cb4f5a
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xf86-config/colibri-t30/xorg.conf
@@ -0,0 +1,92 @@
+# This is the minimal configuration necessary to use the Tegra driver.
+# Please refer to the xorg.conf man page for more configuration
+# options provided by the X server, including display-related options
+# provided by RandR 1.2 and higher.
+
+# Disable extensions not useful on Tegra.
+Section "Module"
+ Disable "dri"
+ Disable "dri2"
+ Disable "glx"
+ SubSection "extmod"
+ Option "omit xfree86-dga"
+ EndSubSection
+EndSection
+
+Section "Device"
+ Identifier "Tegra"
+ Driver "tegra"
+
+# VirtualDesktop indicates which virtual desktops should be used by X.
+# X will use the specified virtual desktop *and* the next one. In
+# order for an external app to share a display with the X server, it
+# needs to use the same virtual desktop. Valid values are integers 0
+# (default) or 1.
+
+# Option "VirtualDesktop" "1"
+
+# OverlayDepth is a 32-bit integer which is used to control overlay
+# stacking order. The overlay with the lowest depth is in front of
+# all others. This value has meaning only when multiple overlays are
+# present on a display.
+
+# Option "OverlayDepth" "255"
+
+# OverlayCombineMode determines how the X overlay is combined with the
+# overlay behind it during scanout. Available modes are: Opaque
+# (default), SourceAlphaBlend, and PremultSourceAlphaBlend. This
+# value has meaning only when an external process has created a
+# display which is behind the X server.
+
+# Option "OverlayCombineMode" "PremultSourceAlphaBlend"
+
+# ARGBHWCursor controls whether the X driver uses an overlay to
+# display 32-bit "true-color" cursors, or whether such cursors are
+# emulated in software. Valid values are "true" (default) to enable
+# hardware cursors, and "false" to disable them.
+
+ Option "ARGBHWCursor" "false"
+EndSection
+
+Section "ServerFlags"
+# Set the basic blanking screen saver timeout in minutes. 0 to disable.
+
+ Option "blank time" "0"
+
+# Set the DPMS timeouts. These are set here because they are global
+# rather than screen-specific. These settings alone don't enable DPMS.
+# It is enabled per-screen (or per-monitor), and even then only when
+# the driver supports it.
+
+ Option "standby time" "0"
+ Option "suspend time" "0"
+ Option "off time" "0"
+EndSection
+
+Section "Monitor"
+ Identifier "LVDS-1"
+ Option "DPMS" "off"
+EndSection
+
+Section "Screen"
+
+ Identifier "Screen LVDS-1"
+ Device "Tegra"
+ Monitor "LVDS-1"
+
+# DefaultDepth 16
+
+# SubSection "Display"
+# Depth 16
+# Modes "1280x720"
+# ViewPort 0 0
+# Virtual 1280 720
+# EndSubsection
+
+EndSection
+
+Section "ServerLayout"
+ Identifier "TouchView"
+ Screen "Screen LVDS-1"
+EndSection
+
diff --git a/recipes/xorg-xserver/xserver-xf86-config_0.1.bbappend b/recipes/xorg-xserver/xserver-xf86-config_0.1.bbappend
new file mode 100644
index 0000000..1615df3
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xf86-config_0.1.bbappend
@@ -0,0 +1,5 @@
+PRINC = "2"
+
+THISDIR := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}"
+FILESPATH =. "${@base_set_filespath(["${THISDIR}/${PN}"], d)}:"
+
diff --git a/tasks/angstrom-task-lxde.bb b/tasks/angstrom-task-lxde.bb
new file mode 100644
index 0000000..eb47477
--- /dev/null
+++ b/tasks/angstrom-task-lxde.bb
@@ -0,0 +1,59 @@
+DESCRIPTION = "Tasks for an LXDE based image"
+
+inherit task
+
+# Most of these tasks are arch independant
+PACKAGE_ARCH = "all"
+
+XSERVER ?= "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-video-fbdev \
+ xf86-input-keyboard \
+"
+
+PACKAGES += "task-lxde-apps task-lxde-xserver task-lxde-xserver-base"
+
+RDEPENDS_task-lxde-apps = " \
+ pcmanfm \
+ lxpanel \
+ lxsession-lite \
+ lxde-common \
+ openbox \
+ leafpad \
+ gpicview \
+"
+
+RDEPENDS_task-lxde-xserver-base = " \
+ dbus-x11 \
+ desktop-file-utils \
+ iso-codes \
+ mime-support \
+ notification-daemon inotify-tools \
+ xauth \
+ xdg-utils \
+ xhost \
+ xinetd \
+ xinit \
+ xlsfonts \
+ xrandr \
+ xrdb \
+ xrefresh \
+ xset \
+ xvinfo \
+ "
+
+RDEPENDS_task-lxde-xserver = " \
+ ${XSERVER} \
+"
+
+PACKAGE_ARCH_task-lxde-xserver = "${MACHINE_ARCH}"
+
+RDEPENDS_${PN} = " \
+ task-lxde-xserver-base \
+"
+
+RRECOMMENDS_${PN} = " \
+ task-lxde-xserver \
+"
+