Compiling a Linux kernel using Cygwin

Claudio Scordino cloud.of.andor@gmail.com
Tue Jul 31 07:28:00 GMT 2007


Samuel Robb wrote:
> On Fri, 2007-07-27 at 16:43 +0200, Claudio Scordino wrote:
>> Hi all,
>>
>>    I have to compile a Linux kernel using Cygwin on Windows XP (I know, it's a 
>> very silly thing, but it does not depend on me, unfortunately...).
>>
>> I already have a gcc cross-compile toolchain for my target (arm) installed on 
>> Windows.
> 
> I'm going to assume that this is a Cygwin based toolchain.  If this is
> not the case, then you want to be talking about your build environment
> with whoever built your toolchain, not the Cygwin mailing lists.

The toolchain is located in Programs/yagarto/bin/arm-elf-gcc, so I assume that 
is not a cygwin toolchain but a Yagarto's one. I'm going to write an email to 
Yagarto developers.

Anyway, most of the errors I receive seem not related to the toolchain itself 
but to my mistakes using cygwin :(

> 
>> I already installed gcc-core, gcc-g++, binutils, cpio, make, patch, tar, vim, 
>> gettext, libintl and libncurses on cygwin (do I need something else?).
> 
> Did you install these using the Cygwin setup.exe, or did you get them
> from some other source?  If you try to mix and match, say, mingw or
> Microsoft Services For Unix utilities with Cygwin, you're going to run
> into problems.
> 

No, I don't want to mix stuff on the PC, otherwise it would be a mess.
I already had "Microsoft Services for Unix" on the PC, but I installed all those 
packages using the setup.exe of cygwin.
If necessary, I can remove Microsoft Services for Unix completely...

>> Since I assume that I need symbolic links, I use an ext2 filesystem on a USB 
>> PenDrive, using the ext2fsd driver for Windows.
> 
> You shouldn't need to do this - Cygwin supports symbolic links just
> fine.

Oh, very good!  What happens if I create a jffs2 filesystem containing sybolic 
links made using Cygwin ? Will they be symbolic links also on the Linux target ? 
Or cygwin uses an internal represention which differs from the Unix one ?

> 
>> However, I'm receiving a lot of errors, everywhere.
>>
>> Some of them:
>>
>> 1) Sometimes when compiling, I receive the error "cannot mv file A to B: invalid 
>> request code".
>>
>> However, the system allows me to manually copy file A on B and then remove file 
>> A (which is almost the same thing, so I wonder why the mv command does not work).
> 
> I suspect this is a symptom of using the ext2fsd and the PenDrive.  As I
> mentioned, you shouldn't need to do this - Cygwin will handle symbolic
> links perfectly well.

Yes, using a managed mount point these errors disappeared :)

> 
> For cross-compiling a kernel, though, you may want to use a managed
> mount; this will help you avoid some file name case-sensitivity issues
> that crop up in the kernel source code (ex, the netfiler code uses file
> names that differ only in case).  Read up on managed mounts in the the
> Cygwin FAQ:
> 
>   http://cygwin.com/faq/faq.using.html
> 
> Short instructions for using a managed mount
> 
>   1. Create a new, empty directory:
>      $ mkdir -p /usr/src/kernel
> 
>   2. Mount it as a managed directory:
>      $ mount -o managed c:/cygwin/usr/src/kernel /usr/src/kernel
> 
>   3. Change into the managed mount directory:
>      $ cd /usr/src/kernel
> 
>   4. Extract the kernel source in the managed mount directory:
>      $ tar -xzf <path-to-kernel-src-archive>

Thank you for the instructions. It's what I'm doing now :)

> 
>> 2) I'm not able of doing a "make menuconfig" even using the host gcc.
>>
>> The system does not find ncurses libraries. But I've installed them!
> 
> IIRC, you'll need to patch menuconfig to build properly under Cygwin...
> though the problems that I can remember dealt with libintl, not with
> ncurses.
> 
> What errors do you see when you do "make menuconfig"?

$ make ARCH=arm CROSS_COMPILE=arm-elf- HOST_LOADLIBES="-lintl" menuconfig
   HOSTCC  scripts/basic/fixdep
   HOSTCC  scripts/basic/docproc
   HOSTCC  scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:32:20: curses.h: No such file or directory
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:97: error: parse error before "chtype"

I receive errors even if I add -lncurses or -lcurses. Moreover, I couldn't 
locate the ncurses libraries on the /lib and /usr/lib directories even if cygwin 
says that they are installed...

>> More general question: did anybody build succesfully a Linux kernel under cygwin?
> 
> I used to work for a company (http://www.timesys.com) that did (and
> still does) support cross-compiling Linux under Cygwin.  So yes, it is
> indeed possible - and, frankly, not all that difficult, either.

Ok, if someone made it, then it is possible, somehow.

Another error: if I put a .config file in the Linux directory and I try to make 
the kernel (without 'menuconfig') I receive the following error:

In file included from include/linux/sched.h:4,^M
                  from arch/arm/kernel/asm-offsets.c:13:^M
include/linux/auxvec.h:4:24: error: asm/auxvec.h: No such file or directory^M

The file exists. It seems a problem related to symbolic links...

Many thanks for your precious help,

             Claudio


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list