LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Slackware (http://www.linuxquestions.org/questions/slackware-14/)
-   -   Cross-compile a kernel for Slackware from Slackware64 multilib (http://www.linuxquestions.org/questions/slackware-14/cross-compile-a-kernel-for-slackware-from-slackware64-multilib-889601/)

piratesmack 07-02-2011 08:55 PM

Cross-compile a kernel for Slackware from Slackware64 multilib
 
I have a low power netbook running Slackware 13.37 and a much faster desktop running Slackware64 13.37.

The netbook takes about 30 minutes to build a minimal Linux kernel, while the desktop can build the same kernel in only a few minutes.
So I'd like to do my kernel builds on the faster desktop.

If I went multilib on the Slackware64 desktop, would I be able to build a kernel for Slackware32?
Or is a slack32 chroot/VM my only option?

Thanks

sairum 07-03-2011 05:05 AM

This is amazing, but I was looking precisely for the same answer! I've got a 901 EEE-PC (ATOM 32bit) and slack 13.37 64bit in all my computers but this one (which, of course, is now running slack 13.37 32bit). So, seeing this post I decided to go ahead and try cross-compilation. After a few tries, this is how I got my 901 running a trimmed and 'tailor-made' 2.6.37.6 kernel.

IMPORTANT NOTE: this worked in a multilib Slackware 64bit system. It may or may not work on pure Slackware 64 bit systems.

As root (obviously) do

#/etc/profile.d/32dev.sh

and then

#make menuconfig ARCH=i386

The ARCH=1386 is important . Make sure that in the kernel's configuration menu "Executable file formats / Emulations --->" there is no option "IA32 Emulation (NEW)". This means that everything is OK. You probably know this already, but just go to "General setup --->" and fill something like "eee-pc" in "Local version - append to kernel release". This way the modules tree will not be overwritten in the host machine.

Now do (the -j 8 is optional, just to take advantage of a 4 core CPU)

#make all ARCH=i386 -j 8

and

#make modules_install ARCH=i386

Then just copy the image (called bzImage) in /usr/src/linux-2.6.37.6/arch/x86/boot/ to somewhere safe (mine goes to the USB Pen directly).

cp /usr/src/linux-2.6.37.6/arch/x86/boot/bzImage /media/USB-DISK

To be sure that the image is a 32bit executable go to /usr/src/linux-2.6.37.6/arch/x86/boot/ and do

#file bzImage

The result should look like this (note the 'x86 boot executable')

bzImage: Linux kernel x86 boot executable bzImage, version 2.6.37.6-eeepc (root@calypso) #8 SMP PREEMPT Sun Jul 3 10:33:16, RO-rootFS, root_dev 0x801, swap_dev 0x1, Normal VGA

then

#tar zcf eee-pc.tgz /lib/modules/2.6.37.6-eeepc/

Copy that to the USB and proceed with the install. I suppose you know what to do on the Notebook!

Mine is now working flawlessly with a costumed 2.6.37.6 kernel cross-compiled ina 64bit machine

Antonio

piratesmack 07-03-2011 06:07 AM

Awesome! Thanks.

I'll install the multilib packages and give it a try now.

piratesmack 07-03-2011 07:18 AM

It works :)

I just did:
Code:

$ i386
$ uname -m # should output "i686" now
$ . /etc/profile.d/32dev.sh

And then built the kernel just like I normally would.


All times are GMT -5. The time now is 11:28 AM.