Overo stability problem/Overo hwpack support
Ash Charles
ash at gumstix.com
Tue Jul 3 04:26:32 UTC 2012
Hi,
We're working on a better supported Linux kernel for Overo at the
moment. Recently, some changes were made to u-boot for Overo which
fix some of the power-off and watchdog issues. The kernel is a little
harder to keep pace with...
Unfortunately, ad-hoc mode for wireless is not supported by the
open-source libertas drivers and requires direct support from wi2wi.
In case it is useful, I've attached my steps/notes about how to make a
custom hardware pack right from linux and u-boot source as well as a
custom live-build (thanks to Tom Gall's help) rootfs. These were made
as my own notes so in some places I've been rather brief and in other
places, a little verbose (debian packaging confuses me some days).
Idefinitely welcome comment/questions/suggestions though.
-Ash
On Mon, Jul 2, 2012 at 8:56 PM, Sudhangathan B S <sudhangathan at gmail.com> wrote:
> To argue, I'm with Steffen Hemer,
>
> I'm working for a practical project, I'm trying to include MADC module and
> trying to compile a kernel for lot while now, without success, to be more
> serious, my boss is counting on me.
> Is it worthwhile trying this at all...?
>
> Every time i follow instructions at
> https://wiki.linaro.org/Resources/HowTo/KernelDeploy , I end up with a
> non-working image, or kernel that panics, doesn't boot finally. I have all
> the problems that Stefen Hemer says, though haven't tried 12.06. I have only
> tried upto 12.03 since 11.07 and also an old and stable 11.05 Ubuntu
> Desktop, which I downloaded long back. 11.05 is an image that i'm using
> since long for all activities now. I was pretty impressed with it, inspite
> of it being a little slow.
>
> Please advice which version should I use with LinaroMediaCreate and which
> version of kernel should I compile.
> I need these features: Stable Bluetooth, Wi-Fi with fully working Ad-Hoc
> mode, MADC, GPIO controls (which I never had problems),
> And also later dreaming to include advanced power management features and
> XIP kernel.
> I can share more detailed info if anybody out there says it's solvable..
>
> Counting....
> ---------------------------------
> Sudhangathan BS
> Ph:(+91) 9731-905-205
> ---------------------------------
>
>
>
> _______________________________________________
> linaro-dev mailing list
> linaro-dev at lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-dev
>
-------------- next part --------------
== Custom Gumstix Image ==
We can make a custom linaro-based image by creating either or both a
1. Hardware pack
2. Root file system
The hardware pack is a tar.gz file containing bootloaders, a kernel, and as well as a few hardware specific packages.
A root file system is, well, a Debian, plain ol' rootfs.
Combining these two ingredients makes a bootable microSD card:
$ linaro-media-create --rootfs ext3 --mmc /dev/mmcblk0 --dev overo --hwpack <hwpack.tar.gz> --binary <rootfs.tar.gz>
-- or a qemu image --
$ linaro-media-create --hwpack-force-yes --image_file overo.img --dev overo --image_size 3G --swap_file 500 --hwpack <hwpack.tar.gz> --binary <rootfs.tar.gz>
=== HWPACK ===
At the top level, hardware packs (see https://wiki.linaro.org/HardwarePacks) are generated by the linaro-hwpack-create utility distributed as part of linaro-image-tools (sudo apt-get install linaro-image-tools).
$ linaro-hwpack-create <config-file> 0
The <config-file> used to make Overo hwpacks is maintained in a Bazaar repository.
$ bzr branch lp:~linaro-maintainers/linaro-images/hwpack.precise.linaro-overo
Likely you're making a hardware pack because you want a custom u-boot or kernel. To include a custom debian in a hardware pack, use the '--local-deb' switch (unless you happen to have a debian repository or PPA in which to dump packages in which case add the source to the <config-file>).
$ linaro-hwpack-create --local-deb <my-super-uboot.deb> --local-deb <snazzy-kernel.deb> linaro-overo 0
=== Making a U-Boot Debian ===
To create a Debian package, both the (upstream) source code and a suitable packaging files (the 'debian' directory) are needed.
https://wiki.linaro.org/Boards/ST-Ericsson/Snowball/building_uboot offers a
detailed summary. In short, you need both a u-boot git repo and a Bazaar
packaging repository.
==== U-boot Git Repository ====
Linaro maintains two u-boot repositories but any u-boot git will work:
* git://git.linaro.org/boot/u-boot-linaro-stable.git
* git://git.linaro.org/boot/u-boot-linaro-next.git
Build u-boot.
$ make CROSS_COMPILE=arm-linux-gnueabi- omap3_overo
The packaging scripts need a tarball of the u-boot sources to package. You can directly export a tarball directly from the git repository.
$ git archive HEAD --prefix='u-boot/' | gzip > u-boot-linaro_2012.02.3.orig.tar.gz
The file name 'u-boot-linaro_2012.02.3.orig.tar.gz' depends on the packaging scripts.
Note: Equally, you can instead hack the packaging rules file to suck code directly from your git repository.
==== U-Boot Packaging Repository ====
First, grab the pre-existing packaging repository.
$ bzr branch lp:u-boot-linaro
Next, add a changelog entry. This adds your name to the debian/changlog file so the generated packages are signed with your GPG key.
$ dch -i (increment...new section)
$ dch -a (append...add to existing change)
$ dch -r (change to released)
The release version number in the changlog should match the version number found in the name of the source tarball.
Now, from within the u-boot-linaro packaging repository, build the source package.
$ bzr builddeb -S
This generates sources packages in the parent directory. Make a new directory
and build the binary packages
$ cd ..
$ dpkg-source -x *.dsc
$ cd <newly created directory>
$ debuild -eCROSS_COMPILE=arm-linux-gnueabi- -b -aarmel -k$GPGKEY
== Kernel ==
The kernel is regrettably tricky as it requires two debian packages:
A) a package containing the kernel. Simple enough right?
B) a meta-package that depends on the the kernel package. This way, the kernel package can't be apt-get autoremoved.
== Kernel Package ==
Note, if you just want to test a kernel image on hardware, stop here and look at this page instead: https://wiki.linaro.org/Resources/HowTo/KernelDeploy
To build a kernel debian:
$ dch --changelog debian.linaro/changelog --package linux-omap3 -v 2.6.38-1002.4
$ fdr clean
$ fdr updateconfigs
$ debuild -eCROSS_COMPILE=arm-linux-gnueabi- -k$GPGKEY -b -aarmel
On the target,
# dpkg -i <my-kernel.deb>
To build a kernel normally (https://wiki.linaro.org/Resources/HowTo/KernelDeploy):
1. Get a config from an existing build e.g.:
$ scp root at overo.local:/media/rootfs/boot/config-2.6.38-1002-linaro-omap .config
-- OR --
$ cat debian.linaro/config/config.common.ubuntu debian.linaro/config/armel/config.common.armel debian.linaro/config/armel/config.linaro-omap > .config
2. Build
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage modules -j8
3. Install
$ cp arch/arm/boot/uImage /media/boot/
$ make ARCH=arm INSTALL_MOD_PATH=/media/rootfs/ modules_install
$ make ARCH=arm INSTALL_FW_PATH=/media/rootfs/ firmware_install
4. Run (at the u-boot prompt)
# setenv loadbootscript ''
# setenv console 'ttyO2,115200n8'
# saveenv
# run bootcmd
5. Generate an initramfs (from running target)
# update-initramfs -c -k `uname -r`
# mount /dev/mmcblk0p1 /mnt
# mkimage -A arm -T ramdisk -C none -n "MY RAMDISK" -d /boot/initrd.img-`uname -r` /mnt/uInitrd
(see https://wiki.linaro.org/Resources/HowTo/KernelDeviceTree for dtb)
Like u-boot, you need the kernel source and some debian packaging. Fortunately, Linaro regularly packages these together:
$ git clone git://git.linaro.org/ubuntu/linux-linaro-precise.git
The debian.linaro directory contains all the debian magic that specifies the modules, abi, and the configuration file snippets that are concatenated to make the kernel configuration. Read this page twice: https://wiki.edubuntu.org/KernelTeam/KernelMaintenance
The official procedure is https://wiki.linaro.org/Resources/HowTo/PackageYourOwnKernel but much of the work has been done already. Just setup with
$ fdr clean
$ fdr updateconfigs
And then build:
$ debuild -eCROSS_COMPILE=arm-linux-gnueabi- -b -aarmel -k$GPGKEY
== Meta Kernel Package ==
This one is a little easier than the kernel. Simply clone and build...
$ git clone git://git.linaro.org/people/jcrigby/ubuntu/linux-meta-linaro-natty.git
$ make binary
As you need to change the ABI etc., you'll want to modify the changelog.
To build a meta-package, use
$ dch --changelog meta-source/debian/changelog --package linux-meta-linaro -v 2.6.38.1002.4
$ make binary
At this point, you have a custom u-boot, kernel and kernel meta package which can be specified as local-debs for linaro-hwpack-create.
== RootFS ==
Traditionally, Debian root file systems have been built natively. The Live-Build tool can be used to create a custom root file system in a cross-build environment such as multistrap. The instructions here https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/LiveBuild summarize the process well.
Package seeds are here: https://code.launchpad.net/linaro
To customize the branding, modify these packages:
* linaro-plymouth-theme-logo
* linaro-overlay (firefox default page etc.)
https://wiki.linaro.org/TomGall/HowToBrand
== Entertaining Extras ==
To get the toolchain,
$ sudo apt-get install gcc-arm-linux-gnueabi
To build QEMU (http://wiki.gumstix.org/index.php?title=Overo_emulation_in_qemu):
$ ./configure --target-list=arm-softmmu
$ make -j8
Tell bzr who you are
$ bzr whoami "Ash Charles <ash at gumstix.com>"
Add some handy stuff to .bash_aliases:
alias fdr='fakeroot ./debian/rules'
export DEBEMAIL="ashcharles at gmail.com"
export DEBFULLNAME="Ash Charles"
export GPGKEY="869D18EC"
=== Useful Links ===
* https://wiki.linaro.org/CategoryHowTo
* https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/LiveBuild
* https://wiki.linaro.org/Boards/ST-Ericsson/Snowball/building_uboot
* http://wiki.gumstix.org/index.php?title=Overo_emulation_in_qemu
More information about the linaro-dev
mailing list