How can I generate kernel headers for an "unknown" embedded ARM system?

cross-compiling, embedded-linux, linux-kernel

Solution

untar the kernel.

`make mrproper`

`make ARCH=${arch} headers_check`

e.g `make ARCH=arm headers_check`

`make ARCH=${CLFS_ARCH} INSTALL_HDR_PATH=dest headers_install`

This are the steps to get headers from kernel.

The purpose of kernel headers is -->C library and compiled programs needs to interact with the kernel i.e for Available system calls and their numbers, Constant definitions, Data structures, etc. Therefore, compiling the C library requires kernel headers, and many applications also require them.

`do I need the header files of the specific kernel?`

The `kernel-to-userspace ABI` is backward compatible

--> 1)Binaries generated with a toolchain using kernel `headers older than the running kernel will work without problem`, but `won't be able` to use the `new system calls, data structures,` etc.

-->2)Binaries generated with a toolchain using kernel headers `newer` than the running kernel might work on if they don't use the recent features, otherwise they `will break`.

--->3)Using the `latest` kernel headers is `not necessary`, unless access to the new kernel features is needed

So in your case kernel version is `"Linux version 2.6.20.7"`

You can use kernel headers of Linux kernel version `2.6.20` or `2.6.21` from kernel.org.

does not create any problem in this case.

Problem

I have an (old) embedded system for which I want to compile programs. I don't have the toolchain, so I want to create one. The embedded system has an "ARM926EJ-S rev 5 (v5l)" CPU and "cat /proc/version" says that it runs "Linux version 2.6.20.7" with GCC 4.0.2. I have heard that I have to include the kernel headers in the build process. I download the Linux kernel version 2.6.20 from kernel.org, extract all files and run "make headers_install ARCH=arm INSTALL_HDR_PATH=~/headers". Is this the correct way or do I need the header files of the specific kernel?

Original source