Problem
Install a Xenomai kernel on a Debian distribution for BeagleBone / BeagleBone Black.
The instructions I have tried to follow either broke during compilation or when creating a bootable SD card.
Solution
The solution is produced by merging these instructions:
http://brunosmartins.info/xenomai-on-the-beaglebone-black-in-14-easy-steps/
and
http://dev.ardupilot.com/wiki/building-the-code/building-for-beaglebone-black-on-linux/
1. Install necessary packages
sudo apt-get install build-essential libncurses5{,-dev} gcc-arm-linux-gnueabi git gparted
2. Prepare an SD card
Download the latest Debian image from http://beagleboard.org/latest-images
For example,
wget http://debian.beagleboard.org/images/bone-debian-7.5-2014-05-14-2gb.img.xz
Insert your SD card (at least 4GB) and note the name of the device (use dmesg | tail
if necessary). In my case it is mmcblk0
.
Write the image to the SD card (note that all content of the card will be erased!)
sudo -s xz -dkc ../bone-debian-7.5-2014-05-14-2gb.img.xz > /dev/mmcblck0 sync exit
Run gparted
to increase the size of the second partition to take all of the free space on the card:
sudo gparted
Be sure to choose your SD card from the top-right list!
3. Test the card
Remove the card and insert it into BeagleBone. Connect it via USB, wait until your system detects it, then ssh into it:
ssh root@192.168.7.2
You should see Debian greeting message.
Shutdown BeagleBone:
shutdown -h now
and wait until the lights go off. It they don’t, press and hold power button of beaglebone for about 10 sec until the lights go off. Unplug the USB cable from the computer.
4. Download Xenomai
wget http://download.gna.org/xenomai/stable/xenomai-2.6.3.tar.bz2 tar xvjf xenomai-2.6.3.tar.bz2
5. Download 3.8.13 kernel
git clone http://github.com/beagleboard/kernel.git cd kernel git checkout origin/3.8 -b 3.8 git reset --hard eae56c3 ./patch.sh
The last operation will take some time.
6. Get necessary (presumably) firmware:
wget "http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD" -O kernel/firmware/am335x-pm-firmware.bin
7. Set current config to beaglebone
cp configs/beaglebone kernel/.config
8. Apply beaglebone-related patches and prepare xenomai kernel:
cd kernel patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-pre.patch patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-3.patch patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-post.patch ../../xenomai-2.6.3/scripts/prepare-kernel.sh --arch=arm --linux=.
9. Optional: patch the kernel for PWM (see details here)
wget https://raw.githubusercontent.com/avterekhov/bb-pwm/master/ti_ehr_pwm.patch .. patch -p1 < ../ti_ehr_pwm.patch
10. Configure kernel
make ARCH=arm menuconfig
Go to “CPU Power Management CPU ---> Frequency scaling
” and disable “[ ] CPU Frequency scaling
”.
Go to “Real-time sub-system ---> Drivers ---> Testing drivers
” and enable everything there.
11. Compile Kernel and modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage dtbs -j4 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j4
12. Install new kernel to the SD card
Insert your SD card and mount its first partition:
sudo mkdir /media/sdcard sudo mount /dev/mmcblk0p1 /media/sdcard
make a backup of the original kernel and copy the new one
sudo mv /media/sdcard/zImage /media/sdcard/zImage.original sudo cp arch/arm/boot/zImage /media/sdcard/ sudo umount /media/sdcard
Now copy the firmware and modules
sudo mount /dev/mmcblk0p2 /media/sdcard sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/media/sdcard modules_install
13. Install Xenomai userspace
cd ../../xenomai-2.6.3/ ./configure --host=arm-linux-gnueabi make sudo make DESTDIR=/media/sdcard install sudo umount /media/sdcard
14. Done
Now you should have xenomai installed.
Put the SD card into BeagleBone and ssh into it:
ssh root@192.168.7.2
insert the test module
insmod /lib/modules/*/kernel/drivers/xenomai/testing/xeno_klat.ko
and run latency test
/usr/xenomai/bin/latency
You should see latency info in the screen.
Hi,
I was trying out your steps, to install the xenomai kernel, but, once I do make ARCH=arm menuconfig. I don’t see the Real-time sub-system —> Drivers —> Testing drivers options. Any idea why?
LikeLike
Indeed there was a command missing. Check updated step #8. If you have followed all the instruction, just execute the last command in the box of step 8 (../../xenomai-2.6.3/…) from the kernel tree path and then proceed as described.
LikeLike
Thanks for the quick reply and the correction. I now on the beaglebone, and I want to compile and run the examples which are given on the official xenomai website. When I try to run it, it gives me the follwoing output:
./trivial-periodic: error while loading shared libraries: libnative.so.3: cannot open shared object file: No such file or directory.
Any help on this would be appreciated.
LikeLike
Do you run your script as root?
LikeLike
Thanks for the tutorial! Everything went correctly for me up to the insmod command on the beaglebone. I’m getting an error that the xeno_klat.ko file is an “Invalid module format.” Do you know of any way to get around this? Thanks!
LikeLike
Maybe you have installed some other modules previously? Try “ls /lib/modules/*/kernel/drivers/xenomai/testing/xeno_klat.ko” to see if you have this module in more than one architecture.
LikeLike
It looks like I only have one version of the xeno_klat.ko module from your recommended command. I’ve read that this error can come from having conflicting versions of the kernel but I don’t think that’s what’s happening here since I’ve installed the same Debian image you have and followed the rest of the steps directly.
LikeLiked by 1 person
Could it be that you are not running Xenomai kernel then? What is the output of ‘uname -r’? Is it the same as the folder name in /lib/modules?
LikeLike
Ok so I figured what was wrong. On step 12 I accidentally mounted the wrong partition initially and I think that’s what caused my issue. I didn’t get the chance to run ‘uname -r’ but I’m pretty sure you were right that the xenomai kernel wasn’t actually running. I reinstalled xenomai to the SD card, correctly this time, and the ‘insmod’ command had no trouble at all and the latency test is working great! Thanks so much for the help! I really appreciate it!
LikeLike
Most welcome! Good to know that it worked.
LikeLike
Hi,
First i’m sorry for my poor english level !!!
Be careful when you compile Xenomai environment for BBB (lib, bin, etc…), you use ./configure –host=arm-linux-gnueabi but this version of Debian want HARD FLOAT !!!
If the libs are compile in soft-float, the linker doesn’t find the library and tou have the message “cannot open shared object file no such file or directory”.
What i do :
– STEP 13 :
sudo cp -r ../../xenomai-2.6.3 /media/sdcard
sudo umount /media/sdcard
– STEP 14 :
ssh root@192.168.7.2
date -s “dd mm yyyy hh:mm”
cd /xenomai-2.6.3
./configure
make
make DESTDIR=/ install
and i compile xenomai userspace dirctly on the BBB !!!!
Thanks a lot for this very good tuto.
LikeLike
Thanks for your remark! I must say I’ve never had this kind of problems, but I hope it will help those who do.
LikeLike
I had the same problem listed above. I had xenemai kernel installed ,and my Os tree is right… I saw you have a boot partition separated from the rootfs partition … in my BBB I have the boot in the same partition … and I have no zImage in my original BBB image… so how could I build a bootloader which is able to load the xenomai kernel ?
Nobody have found this problem ?
LikeLike
Matt, not sure I understand which exactly problem you refer to. As for the absence of zImage, are you sure you are using debian distribution? As far as I know the default debian distribution for BBB has two separate partitions.
LikeLike
Hi avterekhov.
The 2014 images have 2 partitions , the 2015 no. I tried this one for example :
bone-debian-7.8-2015-03-01-2gb.img.xz
And I have a single partition , rootfs with a boot folder. No zImage … SO how could I set this boot to start with xenomai kernel ?
LikeLike
Thanks. I did not check the 2015 image. I will update the instruction once I know how to deal with it.
LikeLike
I asked in the beaglebone mailing list … nobody answer hot to do this. they say to look for a pre-compiled image… but it’s better build the xenomai choosing the debian bone image you want š .
I will really appreciate if you find a way ^^
Thanks a lot
LikeLike
Hi I have created successfully the image with xenomai patch as described here. But that are all in my pc . So How do i write uimage and zimage to sd card. As While inserting the card I can only see sda1 as one partion no other partion.
LikeLike
hi, I have followed all the steps described here. and till last step it worked and I have prepared the sd card.
But when I inserted sd card in bbb It doesn’t bootup.
just on screen only ‘CCCCCCCCCCCCCC’ comes… I guess Its not able to find bootloader.
can you sugesst help for this.???
thanks in advance
LikeLike