Linux 3.13 Kernel Fails to Compile - linux

After configuring various options inside .conf using
$make config
I try to compile the entire linux kernel using
$make
However it throws an error as below:
root#localbox:/LinuxKernel/linux-3.13# make
scripts/kconfig/conf --silentoldconfig Kconfig
***
*** Configuration file ".config" not found!
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
make[2]: *** [silentoldconfig] Error 1
make[1]: *** [silentoldconfig] Error 2
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `relocs'.
make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop.
root#localbox:/LinuxKernel/linux-3.13#
I tried to search for .conf by using:
$find -name ".conf"
However it turns up no results. But since make config worked I assume .config must exist somewhere.
Please advise me on how to overcome this annoying problem. I am doing this for the first time and I am not sure if there are any dependencies that have to be installed before trying to compile the kernel. Your feedbacks are highly appreciated.

There must have been some error with make config, e.g. disk full or you aborted it with Ctrl-C. The .config file (not .conf) is right in the main directory.
The error message says it already
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
There are several textbased (config, oldconfig, menuconfig) and graphical (xconfig, gconfig) configuration programs. You might want to pick a graphical one and run it, e.g.
make gconfig
These graphical configurators also help to avoid all the hundreds of irrelevant questions. When you're done selecting the needed options, don't forget to save the .config file and try again compiling the kernel and modules.

Related

Problems building driver on Linux kernel 5.8.x

I'm working with a Linux driver that is building on v5.7.x kernels but not on the latest v5.8.x releases.
To summarise, most of the driver is pre-built and the kernel interface is built on the target. This involves a make -f Kbuild command.
Having checked all of the relevant kernel interface files for any changes that would affect us, normally the driver would just build as usual on a new kernel. However, this time we get the following error:
make[2]: *** [scripts/Makefile.modpost:111: /path/to/source/Module.symvers] Error 1
make[1]: *** [Makefile:1669: modules] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.8.0-1.el8.elrepo.x86_64'
make: *** [Kbuild:26: default] Error 2
This is from CentOS 8.1, but the same error has been seen on Ubuntu 20.04.
I am no expert on this so interpreting these errors is a bit difficult. I have tried building with the KBUILD_VERBOSE flag and it doesn't really provide any useful information, other than the build succeeding until this point.
On previous kernels the Module.symvers file would be created but empty. On 5.8 this file is not created at all presumably due to this error. As a result, the .ko file is not created.
Finally, if we drop in the source files rather than the pre-built .o files the build does succeed. These .o files are built with a very old version of GCC (4.4.7) but we have also tried building with a much newer version (8.3.1), the same version as the target machine.
I would appreciate suggestions for things to check. Let me know if any other details would help.
Edit:
I ran make on Makefile.modpost manually and got the following output:
sudo make -f ./scripts/Makefile.modpost
WARNING: Symbol version dump "vmlinux.symvers" is missing.
Modules may not have dependencies or modversions.
make -f /scripts/Makefile.modfinal
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-050800-generic'
make[1]: /scripts/Makefile.modfinal: No such file or directory
make[1]: *** No rule to make target '/scripts/Makefile.modfinal'. Stop.
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-050800-generic'
make: *** [scripts/Makefile.modpost:117: __modpost] Error 2
I am answering my own question in case it helps anyone else with this problem. Although it has never been an issue in the past, we've always had a warning that the corresponding .o.cmd file was not present for our .o_shipped files. This appears to be important in kernel 5.8 onwards and my fix was to add a touch command to the Kbuild file (i.e. "touch .driver.o.cmd"). This does not remove the warning but it allows the driver to build as normal.

Compiling error - Kernel source for Raspberry Pi

I am trying to build a Linux kernel version rpi-4.14 for Raspberry Pi on Linux system.
The build is done with cross compiler arm-linux-gnueabihf with the configuration bcm2709_defconfig.
I'm running the command:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
But I get the following error:
arch/arm/boot/dts/overlays/midi-uart0-overlay.dts:4:39: fatal error: dt-bindings/clock/bcm2835.h: No such file or directory
compilation terminated.
scripts/Makefile.lib:328: recipe for target 'arch/arm/boot/dts/overlays/midi-uart0.dtbo' failed
make[2]: *** [arch/arm/boot/dts/overlays/midi-uart0.dtbo] Error 1
scripts/Makefile.build:587: recipe for target 'arch/arm/boot/dts/overlays' failed
make[1]: *** [arch/arm/boot/dts/overlays] Error 2
arch/arm/Makefile:350: recipe for target 'dtbs' failed
make: *** [dtbs] Error 2
The file dt-bindings/clock/bcm2835.h is in place, so I do not really know what the problem is.
The error is telling you that there is a file missing.
arch/arm/boot/dts/overlays/midi-uart0-overlay.dts:4:39: fatal error: dt-bindings/clock/bcm2835.h: No such file or directory
Check if the directory exists, look for the file you need and change the directory in the Makefile.
In my case it was an erroneous symbolic link under arch/arm/boot/dts/include. The kernel sources have been packed/unpacked by 7z, maybe that was an issue.
Solved it via
ln -s ~/kernel-building/linux-raspberrypi-kernel_1.20170703-2/include/dt-bindings arch/arm/boot/dts/include/dt-bindings
Trying to link in relative to the current directory did not work.

getting error "make: *** No rule to make target `all'. Stop." while running this command "make all" during installing nagios host

Getting error:
make: *** No rule to make target all. Stop."
while running this command make all during installing nagios host
Possible common mistakes:
Be sure to name the file makefile and run the command in same directory.
Make sure that there is a target named all in the file with proper indentation. You can open with vim to see if there is an indentation issue.
An example makefile with target all could be like this:
all: a.c
gcc a.c
If you have trouble figuring out the issue, append your makefile along with the question to help others resolve it.

How do I find the actual GCC error in compiler output?

I'm trying to compile some old software from source on debian-based linux.
The build failed:
make[2]: Leaving directory '/home/owner/kallistios/utils/dc-chain/build-gcc-sh-elf-4.7.3'
Makefile:871: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/home/owner/kallistios/utils/dc-chain/build-gcc-sh-elf-4.7.3'
Makefile:201: recipe for target 'build-sh4-gcc-pass2' failed
make: *** [build-sh4-gcc-pass2] Error 1
owner#ubuntu:~/kallistios/utils/dc-chain$
But it doesn't say what the actual error is or how I can find it in the output.
If I don't know what the problem is obviously I can't fix it.
This is the full output:
http://pasted.co/cff68fa2
The first thing to do if you're having problems deciphering error output is to NOT run the build in parallel (don't use the -j flag). Also you should NOT use the keep-going (-k) flag. If you don't use -j or -k then make will run one recipe at a time and fail as soon as a recipe fails. So, whenever you get an error the last command that was printed is the one that failed.
Also if you want to use -j and you're using a new-enough version of GNU make (4.0 or above) you can add the -Otarget option which will collect all the output from a given target and print it atomically at the end of the recipe, rather than interweaving output from different recipes together.
In your situation it appears as though one of the configure operations failed. It's not easy to tell exactly why because of the parallel build output. This may or may not be related:
kos is an unknown thread package
...
Makefile:3810: recipe for target 'configure-gcc' failed
make[2]: *** [configure-gcc] Error 1
You are trying to compile the Sega Dreamcast toolchain which I know very well, using the dc-chain utility inside KallistiOS (often shortened to KOS).
The key error message here is kos is an unknown thread package. It means that you don't have applied the KOS patches before compiling your sh-elf cross-compiler.
To solve this issue, you just have to enter the make patch command before running everything else. Please note, if you just enter the make command, it will already apply the patches.
To finish this answer, you may check the KallistiOS Nitro repository, as this repo is handling the official KOS plus a lot of community patches, including some very interesting things about the dc-chain utility, like complete documentation.

Error when using Mingw on Windows

I am completely new to this. I have a C program which compiles fine and runs fine on linux. I want to run the same code on a Windows machine so I am using the cross compiler Mingw. However every time i try and build the project i get this error:
14:51:21 **** Incremental Build of configuration Default for project zbar-0.10 ****
make all
make all-am
make[1]: Entering directory `D:/zbar-0.10'
! was unexpected at this time.
make[1]: *** [include/config.h] Error 255
make[1]: Leaving directory `D:/zbar-0.10'
make: *** [all] Error 2
14:51:26 Build Finished (took 4s.493ms)
I have googled around and still do not understand why i am getting it. Any advice?
Build with exact versions of tools as specified in: http://sourceforge.net/apps/mediawiki/zbar/index.php?title=HOWTO:_Compile_with_MinGW_in_Windows
The code is old and the make will break with newer versions.

Resources