OpenEmbedded for the Chumby

Resources for running OpenEmbedded on the Chumby Hacker Board

Building a Kernel: Ubuntu Is Not Your Friend

Before you try building a Chumby OpenEmbedded kernel using Ubuntu, I have one bit of advice: Don’t. Use Debian.

I’ve had email from a couple of people indicating they had problems building the Chumby OE kernel under Ubuntu, but until now I’ve not tried it myself. This came up again recently, and I thought I would check it out for myself. I haven’t used Ubuntu much; isn’t it just Debian in OSX clothing? No? Well the Ubuntu website says Debian is ‘the rock upon which Ubuntu is built’, so I assume they are married or something.

Anyway, I tested with Ubuntu 12.04.1 (Precise Pangolin). The first break happens building perl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| opmini.o: In function `Perl_load_module_nocontext':
| opmini.c:(.text+0xebac): undefined reference to `pthread_getspecific'
| collect2: ld returned 1 exit status
| make: *** [miniperl] Error 1
| + die 'oe_runmake failed'
| + oefatal 'oe_runmake failed'
| + echo FATAL: 'oe_runmake failed'
| FATAL: oe_runmake failed
| + exit 1
NOTE: package perl-native-5.10.1-r10: task do_compile: Failed
ERROR: Function 'do_compile' failed (see /home2/guy/chumby-oe/output-angstrom-.9/work/i686-linux/perl-native-5.10.1-r10/temp/log.do_compile.21907 for further information)
ERROR: Task 2619 (/home2/guy/chumby-oe/openembedded/recipes/perl/perl-native_5.10.1.bb, do_compile) failed with exit code '1'
Waiting for 2 active tasks to finish:
0: m4-native-1.4.14-r0.1 do_install (pid 27991)
1: linux-libc-headers-2.6.32-r5 do_unpack (pid 28489)
Waiting for 1 active tasks to finish:
0: m4-native-1.4.14-r0.1 do_install (pid 27991)
NOTE: package linux-libc-headers-2.6.32-r5: task do_unpack: Succeeded
NOTE: package m4-native-1.4.14-r0.1: task do_install: Succeeded
ERROR: '/home2/guy/chumby-oe/openembedded/recipes/perl/perl-native_5.10.1.bb' failed

I found a discussion of a similar problem on a Gumstix thread which offered the workaround of adding the following line to meta-chumby/conf/site.conf:

1
ASSUME_PROVIDED += "perl-native"

That worked and the build progressed to the next failure:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| make[2]: Entering directory `/home2/guy/chumby-oe/output-angstrom-.9/work/i686-linux/openssl-native-1.0.0d-r14.0/openssl-1.0.0d/apps'
| openssl.o: In function `main':
| openssl.c:(.text+0x199): undefined reference to `BIO_s_file'
| openssl.c:(.text+0x1a1): undefined reference to `BIO_new'
| openssl.c:(.text+0x1e1): undefined reference to `BIO_ctrl'
| openssl.c:(.text+0x231): undefined reference to `CRYPTO_dbg_get_options'
| openssl.c:(.text+0x23b): undefined reference to `CRYPTO_dbg_set_options'
| openssl.c:(.text+0x245): undefined reference to `CRYPTO_dbg_free'
| openssl.c:(.text+0x24f): undefined reference to `CRYPTO_dbg_realloc'
| openssl.c:(.text+0x259): undefined reference to `CRYPTO_dbg_malloc'
| openssl.c:(.text+0x261): undefined reference to `CRYPTO_set_mem_debug_functions'
| openssl.c:(.text+0x26d): undefined reference to `CRYPTO_set_mem_debug_options'
| openssl.c:(.text+0x29b): undefined reference to `CRYPTO_set_mem_debug_functions'
| openssl.c:(.text+0x2a7): undefined reference to `CRYPTO_mem_ctrl'
| openssl.c:(.text+0x2b5): undefined reference to `CRYPTO_set_locking_callback'
| openssl.c:(.text+0x2eb): undefined reference to `CRYPTO_set_mem_functions'
| openssl.c:(.text+0x2f0): undefined reference to `ERR_load_crypto_strings'
| openssl.c:(.text+0x2f5): undefined reference to `OPENSSL_add_all_algorithms_noconf'
| openssl.c:(.text+0x2fa): undefined reference to `ENGINE_load_builtin_engines'
| openssl.c:(.text+0x35a): undefined reference to `NCONF_new'

I applied a workaround in gmane.comp.handhelds.openembedded and moved on.

And so on… Initially I thought I would create a project fork to support Ubuntu 12, but after continuing like this with several more breaks I could see no end in sight so I abandoned that idea. Honestly if you are going to put a bunch of work into this project, it would be smarter to port it to the new oe-core framework.

Or just use Debian, okay?

Comments