ARMevaluationAELALIP

Differences between revisions 35 and 36
Revision 35 as of 2010-09-15 16:17:55
Size: 20921
Editor: fw-tnat
Comment:
Revision 36 as of 2010-09-15 16:33:23
Size: 9585
Editor: fw-tnat
Comment:
Deletions are marked like this. Additions are marked like this.
Line 76: Line 76:
Peter Pearse researched the list of packages currently in AEL/ALIP. Peter Pearse researched the list of packages currently in AEL/ALIP. See [[https://docs.google.com/document/edit?id=1k3_daUoOqFnS8vqF32meaq8Abk7FP6NKRHcoPWeGRPY&hl=en|Original alip-ael packages]]
Line 78: Line 78:
[[https://docs.google.com/document/edit?id=1k3_daUoOqFnS8vqF32meaq8Abk7FP6NKRHcoPWeGRPY&hl=en|Original alip-ael packages]]
Tom Gall has proposed an possible alip as listed in
Line 82: Line 81:


{{{
alip-ael source directory ubuntu package to replace
========================= ==========================
extra/bluez-hcidump: Package: universe/bluez-hcidump
extra/bluez-utils Package: main/bluez
extra/firefox-3.5 Package: main/firefox
extra/gnome-power-manager: Package: main/gnome-power-manager
extra/gtk-xfce-engine-2 Package: universe/gtk2-engines-xfce
extra/libexo Package: universe/exo
extra/libxfce4util: Package: universe/libxfce4util
extra/libxfcegui4: Package: universe/libxfcegui4
extra/nfs-utils: Package: main/nfs-utils
extra/portmap: Package: main/portmap
extra/startup-notification: Package: main/startup-notification
extra/tcp_wrappers Package: main/tcp-wrappers
extra/thunar: Package: universe/thunar
extra/util-linux-ng Package: main/util-linux
extra/vte: Package: main/vte
extra/xfce4-dev-tools: Package: universe/xfce4-dev-tools
extra/xfce4-panel: Package: universe/xfce4-panel
----
extra/xfce4-session: Package: universe/xfce4-session
extra/xfdesktop: Package: universe/xfdesktop4
extra/xfwm4-themes: Package: universe/xfwm4-themes
extra/xfwm4: Package: universe/xfwm4
main/ConsoleKit: Package: main/consolekit
main/NetworkManager Package: main/network-manager
main/PolicyKit-gnome Package: main/policykit-1-gnome
main/PolicyKit: Package: main/policykit-1
main/WebKit: Package: main/webkit
main/alsa-lib: Package: main/alsa-lib
main/alsa-utils: Package: main/alsa-utils
main/arora Package: main/arora
main/atk: Package: main/atk1.0
main/bigreqsproto Package: main/x11proto-bigreqs
main/binutils: Package: main/binutils
main/busybox: Package: main/busybox
main/bzip2: Package: main/bzip2
main/cairo: Package: main/cairo
main/compositeproto Package: main/x11proto-composite
=========
main/curl: Package: main/curl
main/damageproto Package: main/x11proto-damage
main/db: Package: main/db
main/dbus-glib: Package: main/dbus-glib
main/dbus: Package: main/dbus
main/dhclient Package: universe/dhcp3-client
main/dmxproto Package: main/x11proto-dmx
main/drm: Package: main/libdrm
main/dropbear: Package: universe/dropbear
main/e2fsprogs: Package: main/e2fsprogs
main/eggdbus: Package: main/eggdbus
main/eglibc: Package: main/eglibc
main/enchant: Package: main/enchant
main/evolution-data-server: Package: main/evolution-data-server
main/expat: Package: main/expat
main/fixesproto Package: main/x11proto-fixes
main/fontconfig: Package: main/fontconfig
main/fontsproto Package: main/x11proto-fonts
main/glib: Package: main/glib2.0
++++++++
main/glproto Package: main/x11proto-gl
main/gnome-keyring: Package: main/gnome-keyring
main/gnome-mime-data: Package: main/gnome-mime-data
main/gnome-vfs: Package: main/gnome-vfs
main/gst-plugins-base: Package: main/gst-plugins-base0.10
main/gst-plugins-good: Package: main/gst-plugins-good0.10
main/gstreamer0.10: Package: main/gstreamer0.10
main/gstreamer: Package: main/gstreamer0.10
main/gtk+: Package: main/gtk+2.0
main/gtk-chtheme: Package: universe/gtk-chtheme
main/hal-info: Package: main/hal-info
main/hal: Package: main/hal
main/hicolor-icon-theme: Package: main/hicolor-icon-theme
main/icu: Package: main/icu
main/inputproto Package: main/x11proto-input
main/jpeg: Package: main/libjpeg6b Package: libjpeg8
main/kbproto Package: main/x11proto-kb
main/kernel-headers: Package: universe/kfreebsd-kernel-headers
main/libICE: Package: main/libice
---------
main/libIDL: Package: main/libidl
main/libSM: Package: main/libsm
main/libX11: Package: main/libx11
main/libXScrnSaver Package: main/xscreensaver
main/libXau: Package: main/libxau
main/libXcomposite: Package: main/libxcomposite
main/libXcursor: Package: main/libxcursor
main/libXdamage: Package: main/libxdamage
main/libXdmcp: Package: main/libxdmcp
main/libXext: Package: main/libxext
main/libXfixes: Package: main/libxfixes
main/libXfont: Package: main/libxfont
main/libXft Package: main/xft
main/libXi: Package: main/libxi
main/libXinerama: Package: main/libxinerama
main/libXmu: Package: main/libxmu
main/libXp: Package: main/libxp
main/libXpm: Package: main/libxpm
main/libXrandr: Package: main/libxrandr
=======
main/libXrender: Package: main/libxrender
main/libXt: Package: main/libxt
main/libXtst: Package: main/libxtst
main/libXv: Package: main/libxv
main/libXxf86dga: Package: main/libxxf86dga
main/libXxf86vm: Package: main/libxxf86vm
main/libcroco: Package: main/libcroco
main/libdmx: Package: main/libdmx
main/libfakekey: Package: main/libfakekey
main/libfontenc: Package: main/libfontenc
main/libgconf-bridge: Package: universe/libgconf-bridge
main/libgcrypt: Package: main/libgcrypt11
main/libglade: Package: main/libglade2
main/libgnome-keyring: Package: main/libgnome-keyring
main/libgpg-error: Package: main/libgpg-error
main/libidl: Package: main/libidl
main/libmatchbox: Package: universe/libmatchbox
main/libnl: Package: main/libnl
main/libnotify: Package: main/libnotify
+++++++
main/libogg: Package: main/libogg
main/liboil: Package: main/liboil
main/libpciaccess: Package: main/libpciaccess
main/libpng: Package: main/libpng
main/librsvg: Package: main/librsvg
main/libsexy: Package: main/libsexy
main/libsoup: Package: main/libsoup2.4
main/libtasn1: Package: main/libtasn1-3
main/libusb: Package: main/libusb
main/libwnck: Package: main/libwnck
main/libxkbfile: Package: main/libxkbfile
main/libxml2: Package: main/libxml2
main/libxtrans Package: main/xtrans
main/linux-2.6 Package: main/linux
main/lrzsz: Package: universe/lrzsz
main/matchbox-common: Package: universe/matchbox-common
main/matchbox-desktop: Package: universe/matchbox-desktop
main/matchbox-keyboard: Package: universe/matchbox-keyboard
main/matchbox-panel-2 Package: main/matchbox-panel
-------
main/matchbox-window-manager: Package: universe/matchbox-window-manager
main/midori: Package: universe/midori
main/ncurses: Package: main/ncurses
main/network-manager-applet: Package: main/network-manager-applet
main/notification-daemon: Package: main/notification-daemon
main/nspr: Package: main/nspr
main/nss: Package: main/nss
main/openssh: Package: main/openssh
main/openssl: Package: main/openssl
main/oprofile: Package: main/oprofile
main/pango: Package: main/pango1.0
main/pixman: Package: main/pixman
main/popt: Package: main/popt
main/ppp: Package: main/ppp
main/printproto Package: main/x11proto-print
main/pthread-stubs: Package: main/libpthread-stubs
main/python2.6: Package: main/python2.6
main/qt: Package: main/qt-x11-free Package: qt4-x11
main/randrproto Package: main/x11proto-randr
====================
main/recordproto Package: main/x11proto-record
main/renderproto Package: main/x11proto-render
main/resourceproto Package: main/x11proto-resource
main/rxvt: Package: universe/rxvt
main/scim: Package: universe/scim
main/scrnsaverproto Package: main/x11proto-scrnsaver
main/seal: Package: universe/libtest-useallmodules-perl
main/shared-mime-info: Package: main/shared-mime-info
main/sqlite: Package: main/sqlite
main/tiff: Package: main/tiff
main/totem-pl-parser: Package: main/totem-pl-parser
main/totem: Package: main/totem
main/tslib: Package: main/tslib
main/udev: Package: main/udev
main/unique: Package: main/libunique
main/usbutils: Package: main/usbutils
main/util: Package: main/xfonts-utils
main/videoproto Package: main/x11proto-video
main/wireless-tools: Package: main/wireless-tools
main/wpa_supplicant Package: main/wpasupplicant
main/x11perf Package: main/x11-apps
main/xauth: Package: main/xauth
main/xcmiscproto Package: main/x11proto-xcmisc
main/xdpyinfo Package: main/x11-utils
main/xextproto Package: main/x11proto-xext
main/xf86-input-evdev Package: main/xserver-xorg-input-evdev
main/xf86-input-tslib: Package: universe/xf86-input-tslib
main/xf86-video-fbdev Package: main/xserver-xorg-video-fbdev
main/xf86bigfontproto Package: main/x11proto-xf86bigfont
main/xf86dgaproto Package: main/x11proto-xf86dga
main/xf86driproto Package: main/x11proto-xf86dri
main/xf86miscproto Package: main/x11proto-xf86misc
main/xf86vidmodeproto Package: main/x11proto-xf86vidmode
main/xineramaproto Package: main/x11proto-xinerama
main/xkbcomp Package: main/x11-xkb-utils
main/xkeyboard-config: Package: main/xkeyboard-config
main/xrandr: Package: main/libxrandr
main/xulrunner: Package: main/xulrunner-1.9.2
main/zlib: Package: main/zlib
}}}

Summary

ARM uses various linux file system images. This spec explores how these might be supplied from Ubuntu.

Release Note

An archive of the ALIP-AEL software stack can now be built for ARM architectures ARMv5 & ARMV6 using Ubuntu packages and associated tools. This method can be extended for the remaining packages of the full distribution, provided any dependency loops are broken and packages are well behaved under cross compilation.

Rationale

If Ubuntu is used from the very beginning of involvement with ARM it's more likely to be used for further activities. All initial examples of linux based systems provided by ARM Ltd. would tend to be Ubuntu based systems.

User stories

  • New Architecture: ARM designers design a new architecture. They package a GNU cross compilation toolchain for the architecture. They can now use the available tools to cross build a complete, or partial, system image. This both exercises the toolchain, provides a basis for demonstrating the architectures benefits and provides the build-essential packages required to build (bootstrap) the complete archive for the new architecture.
  • Development: ARM Ltd. developers want to develop a new BSP, tool or other software package. Pulling an original ALIP-AEL archive from Ubuntu they can use xdeb to quickly put their package into this & iterate builds for development.

  • uClinux To demonstrate an MMUless core ARM Ltd. developers pull a minimal uClinux system image from Ubuntu and boot it on their target.
  • Compiler Validation: To validate non-standard compiler options (including architectures) a partial, or complete, archive is rebuilt with a compiler defaulting to those options.
  • Demo: User supplied binary packages can be inserted into the ALIP-AEL software stack image with minimal effort.
  • Ship: ARM supplied development boards can be shipped with an installer or debootstrap style image which boots an ALIP-AEL stack with the ability to install further packages from the Ubuntu or related archives. Reduced images are flashed into boards such that they boot to a GUI out of box.

In the current cycle only the Compiler Validation use case will be satisfied, using xdeb. This method will be used rather than repeated native builds for the separate architectures since this aids development of solutions for the other cases. Those cases - New Architecture, Development, Demo may be considered for inclusion in future cycles.

The ucLinux case will not be considered further as it is one example of the New Architecture use case.

Assumptions

Required tools are provided, in a timely fashion, by

Cross compilation GNU toolchain supplied by user in standard GNU/Ubintu packaged form for use by the Ubuntu tools.

Design

The hardest use case is that of a complete new architecture. A roadmap to achieve this can be constructed:-

  • Compiler Validation
  • Development
  • Demo
  • Ship
  • New Architecture.

Implementation

Compiler Validation

  • Package toolchain with desired architecture as default into local archive.
  • Pull alip-ael source packages (list to be attached) from ubuntu into local archive.
  • Build a chroot by hand
  • Set up high level dependencies (seeds) to construct alip-ael
  • Use xdeb, in that chroot, on the local archive to rebuild the alip-ael stack
    • Break any dependency loops locally
    • Fix any packages not cross compilation compliant (pushed upstream)
  • Build images from the local archive using the image building tool.

Development

Satisfied by the above.

Demo

Satisfied by the above.

Ship

Modify the ubuntu installer, if required, to access archives produced above

New Architecture

  • Produce build-essential packages using xdeb
  • Modify buildd to use xdeb
  • Move to native buildds as hardware becomes available.

Unresolved issues

Does the ubuntu installer require adapting to use incomplete archives, in the manner described above.

Research on packages in AEL/ALIP

Peter Pearse researched the list of packages currently in AEL/ALIP. See Original alip-ael packages

Tom Gall has proposed an possible alip as listed in

alip Package Status

BoF agenda and discussion

Agenda: * AEL/ALIP introduction * Discussion

  • use-cases
  • procedures
  • delivery formats
  • cross compiling

AEL information and resources

ALIP Information and Resources

Discussion

Packages and filesystem

  • When pulling updates into ALIP, generally choose the latest upstream versions
  • Filesystem tarballs distributed per architecture baseline
    • ARMv5
    • ARMv6
    • ARMv7 +NEON
    • ARMv7 +-Thumb2 +NEON
    • Generally, compiler options enable as many processor features as possible.
      • -> this is an explicit intention to exercise build scenarios and processor features

    • System is flexible so the user can do a build with the right compiler options to target their use case / platform.
    • about 200 packages
    • Don't necessarily need to produce builds for all possible scenarios - this can be left to the user if they have specific requirements

Packaging

  • Git repository based on upstream
  • Some arm-specific patches held in git - but these are proactively pushed
    • upstream also.
  • The AEL kernel typically contains some patches which are unlikely to be merged upstream.

Do people really need to rebuild everything?

  • People find the flexibility useful
  • If the user cannot rebuild, they are restricted with the common subset of the architecture.
  • In debian packages, copmiler options are often overridden during the build process, making it difficult to do a clean build with user-specified options
  • Currently the default compiler flags are set in the toolchain scratchbox
  • Currently, different compilers are used - gcc , armcc (RVCT).
  • Supporting multiple toolchains can create packaging complications e.g., dependencies on libgcc don't make sense between different toolchains. Proper dependencies are needed if we want to use the Debian/Ubuntu tools to construct filesystems.
  • Build-dependencies can be addressed by a static chroot which provides the functionality of build-essential.
  • An options is to base off Debian source packages, without using prebuild binary packages.
  • Info on switching toolchains in scratchbox: http://www.scratchbox.org/wiki/ForeignToolchains

  • A service for building packages (such as Ubuntu PPAs) is conceivable as a way to simplify life for users/developers, but not a priority for now?

Testsuites

  • Can consider running build-time tests ("make check") but not currently done by default. Does not work with true cross-compiling.

Use cases:

  • rootfs for different architectures to do validation/testing/demoes/benchmarks
    • - armv5 - armv6 - armv7 neon - armv7 thumb2 neon - uclinux and eglibc versions for armv6 onwards
  • contains ~200 packages to provide a small minimum demo image
  • need to allow rebuild of the rootfs for different architecture opts
    • - 4 hours to rebuild ~200 packages in QEMU on a desktop PC
  • set of packages hosted in git repos:
    • - light: busybox for the small fs use case; our busybox would need a new flav

or based on uclinux

  • - medium: xserver/x11 test environment - full: allows running a browser, webkit or mozilla, gtk or qt; need to provi

de both of them

  • packages have patches which are being pushed upstream
  • rebuild with different compiler or compiler flags
  • in practice, it's hard to support uClinux without a different toolchain (though it's possible in principle); it might be possible for the prebuilt images, but needs to be investigated
  • Should be really easy and really solid as to allow newbies to do rebuilds
  • A key problem is in package dependencies with outside toolchains: when building with armcc, we want packages to pickup dependencies on the toolchain runtime libs
    • - We need to take the assumption that the armcc toolchain is packaged
  • ARM did a Debian rebuild using armcc; it would be highly interesting to know how they solved that; Will Deacon to check this out Smile :-)

  • We want to be able to test with new toolchains
    • - We need to take the assumption that the armcc toolchain is packaged
  • Problems:
    • packaging and updating to new major toolchain is hard to do
    • building with armcc might require packages - binaries only is OK -> not trying to solve the toolchain bootstrapping problem

Actions

  • Will Deacon to get details on the ARM internal Debian build using armcc
  • Ubuntu folks to try out ALIP! Smile :-) arm.com/linux


CategorySpec

Specs/M/ARMevaluationAELALIP (last edited 2011-01-21 16:09:41 by fw-tnat)