x86_64_defconfig and i386_defconfig: What is the difference?
Hi, Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine? Thanks, Rajat
On Tue, 09 Sep 2014 07:58:49 -0000, Rajat Jain said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
I wouldn't run either one on an actual machine. Defconfigs are *example* configs, only useful as a template for customizing for actual hardware.
On Tue, 2014-09-09 at 09:21 -0400, Valdis.Kletnieks@vt.edu wrote:
On Tue, 09 Sep 2014 07:58:49 -0000, Rajat Jain said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
I wouldn't run either one on an actual machine. Defconfigs are *example* configs, only useful as a template for customizing for actual hardware.
It is probably easiest to take the .config file of the latest kernel of the distribution you are using as a starting point. In that case you know that this starting point at least works on your machine. (I remember seeing tutorials that show you how to generate a .config from scratch. I wonder whether anyone actually does that. It should be quite a bit of work for an uncertain outcome. Ie, you might end up trying quite a few configurations before hitting one that works reasonably for your machine.) Hope this helps, Paul Bolle
On Tue, 09 Sep 2014 16:19:54 +0200, Paul Bolle said:
(I remember seeing tutorials that show you how to generate a .config from scratch. I wonder whether anyone actually does that.
Distros did that originally. Now they just keep delta'ing their known-working config. The pain involved was part of why localmodconfig and friends were created....
On 09/09/14 09:58, Rajat Jain wrote:
Hi,
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
You can build the kernel with any architecture for any architecture. This is called cross-compiling. The homepage [0] should explain you how to do that. Cheers, Matthias [0] http://kernelnewbies.org/FAQ/KernelCrossCompilation
Thanks,
Rajat
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Tue, 09 Sep 2014 16:06:07 +0200, Matthias Brugger said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
You can build the kernel with any architecture for any architecture. This is called cross-compiling. The homepage [0] should explain you how to do that.
Right, but you still need to use a .config appropriate for the target machine, which is what I think Rajat was asking about. A defconfig is usually only known verified to boot on a few (possibly one) examples of that architecture hardware. For embedded ARM, it may be one specific development board or hardware device. For x86, I think they try to keep it "will probably kind of sort of boot on generic PC hardware with a common distro, but anything fancylike a webcam or better graphics than "vga tty emulation" may not work". A defconfig is pretty much just a proof of concept starting point for an actual working config for a given hardware system.
To add to this, if you're trying to compile a kernel to work for a specific platform or board and it's not working, 'make menuconfig' is your friend for taking a bare bones kernel .config and making it your own. -----Original Message----- From: linux-newbie-owner@vger.kernel.org [mailto:linux-newbie-owner@vger.kernel.org] On Behalf Of Valdis.Kletnieks@vt.edu Sent: Tuesday, September 09, 2014 10:28 AM To: Matthias Brugger Cc: Rajat Jain; linux-newbie@vger.kernel.org; kernelnewbies Subject: Re: x86_64_defconfig and i386_defconfig: What is the difference? On Tue, 09 Sep 2014 16:06:07 +0200, Matthias Brugger said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
You can build the kernel with any architecture for any architecture. This is called cross-compiling. The homepage [0] should explain you how to do that.
Right, but you still need to use a .config appropriate for the target machine, which is what I think Rajat was asking about. A defconfig is usually only known verified to boot on a few (possibly one) examples of that architecture hardware. For embedded ARM, it may be one specific development board or hardware device. For x86, I think they try to keep it "will probably kind of sort of boot on generic PC hardware with a common distro, but anything fancylike a webcam or better graphics than "vga tty emulation" may not work". A defconfig is pretty much just a proof of concept starting point for an actual working config for a given hardware system.
Hi, Thank you all for your responses. I got the answer I was looking for:
Hello Rajat,
Indeed, the i386 is for 32bits kernels, and x86_64 for 64 bits ones. If you generate the configurations using "make ARCH=x86 defconfig" and "make ARCH=i386 defconfig", you can easily compare the resulting configurations :
.config from i386_defconfig : # # Automatically generated file; DO NOT EDIT. # Linux/i386 3.17.0-rc1 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" ...
.config from x86_64_defconfig : # # Automatically generated file; DO NOT EDIT. # Linux/x86 3.17.0-rc1 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf64-x86-64" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" ...
As you can see, i386 is the 32 bits variant of the x86 architecture. There are of course many more differences between these two configurations.
Regards,
Hubert
Thanks all again, Rajat
-----Original Message----- From: Valdis.Kletnieks@vt.edu [mailto:Valdis.Kletnieks@vt.edu] Sent: Tuesday, September 09, 2014 7:28 AM To: Matthias Brugger Cc: Rajat Jain; linux-newbie@vger.kernel.org; kernelnewbies Subject: Re: x86_64_defconfig and i386_defconfig: What is the difference?
On Tue, 09 Sep 2014 16:06:07 +0200, Matthias Brugger said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
You can build the kernel with any architecture for any architecture. This is called cross-compiling. The homepage [0] should explain you how to do that.
Right, but you still need to use a .config appropriate for the target machine, which is what I think Rajat was asking about.
A defconfig is usually only known verified to boot on a few (possibly one) examples of that architecture hardware. For embedded ARM, it may be one specific development board or hardware device. For x86, I think they try to keep it "will probably kind of sort of boot on generic PC hardware with a common distro, but anything fancylike a webcam or better graphics than "vga tty emulation" may not work".
A defconfig is pretty much just a proof of concept starting point for an actual working config for a given hardware system.
Hi,
-----Original Message----- From: Valdis.Kletnieks@vt.edu [mailto:Valdis.Kletnieks@vt.edu] Sent: Tuesday, September 09, 2014 7:28 AM To: Matthias Brugger Cc: Rajat Jain; linux-newbie@vger.kernel.org; kernelnewbies Subject: Re: x86_64_defconfig and i386_defconfig: What is the difference?
On Tue, 09 Sep 2014 16:06:07 +0200, Matthias Brugger said:
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
You can build the kernel with any architecture for any architecture. This is called cross-compiling. The homepage [0] should explain you how to do that.
Right, but you still need to use a .config appropriate for the target machine, which is what I think Rajat was asking about.
Right. I'm trying to generate x86 images for someone else to test, who's going to test it on a standard / generic x86 machine: https://lkml.org/lkml/2014/9/9/35 What I was not sure is that which config should I use to generate an image for a "standard x86 machine". Now I do understand (I provided him 2 images - 1 for the 32 bit (using i386_defconfig) and another for 64 bit (using x86_64_defconfig). Thanks, Rajat
A defconfig is usually only known verified to boot on a few (possibly one) examples of that architecture hardware. For embedded ARM, it may be one specific development board or hardware device. For x86, I think they try to keep it "will probably kind of sort of boot on generic PC hardware with a common distro, but anything fancylike a webcam or better graphics than "vga tty emulation" may not work".
A defconfig is pretty much just a proof of concept starting point for an actual working config for a given hardware system.
On Tue, Sep 9, 2014 at 3:58 PM, Rajat Jain <rajatjain@juniper.net> wrote:
Hi,
Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine?
i386 or 32-bit machines? i think it don't exists anymore, but what likely is correct: i386-compatible machine. The i386 config is for 32-bit OS, ie, the entire binaries must be build for 32-bit architecture. So choose the correct config provided u have the correct userspace files/libraries to support it.
Thanks,
Rajat
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Regards, Peter Teoh
Thanks, One more question. Can I continue to use my same 64bit compiler when compiling images for both? In the other words, Are both of these ok? Make CROSS_COMPILE=my-compiler-path- i386_defconfig Make CROSS_COMPILE=my-compiler-path- all Make CROSS_COMPILE=my-compiler-path- x86_64_defconfig Make CROSS_COMPILE=my-compiler-path- all Where my-compiler-path is the gcc compiler that I use to generate 64 bit code. Thanks, Rajat From: Peter Teoh [mailto:htmldeveloper@gmail.com] Sent: Friday, September 12, 2014 6:10 PM To: Rajat Jain Cc: linux-newbie@vger.kernel.org; kernelnewbies Subject: Re: x86_64_defconfig and i386_defconfig: What is the difference? On Tue, Sep 9, 2014 at 3:58 PM, Rajat Jain <rajatjain@juniper.net<mailto:rajatjain@juniper.net>> wrote: Hi, Can someone tell me if the i386 one is to be used when we want to build for a 32bit machine and the x86_64 is to be used for 64 bit machine? i386 or 32-bit machines? i think it don't exists anymore, but what likely is correct: i386-compatible machine. The i386 config is for 32-bit OS, ie, the entire binaries must be build for 32-bit architecture. So choose the correct config provided u have the correct userspace files/libraries to support it. Thanks, Rajat _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org<mailto:Kernelnewbies@kernelnewbies.org> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies -- Regards, Peter Teoh
participants (6)
-
Abreu, Ian -
Matthias Brugger -
Paul Bolle -
Peter Teoh -
Rajat Jain -
Valdis.Kletnieks@vt.edu