TX1 target kernel build

Where is the TX1 development to date in terms of the target being able to build a 64-bit OS and make kernel modifications without host cross-compilation?

Hello,
‘without host cross-compilation’, do you mean compile the kernel in device?
Please clarify your request.

br
Chenjian

Hi jachen,

Apologies, I didn’t realize that the question was confusing. Yes, I mean is TX1 kernel compilation, and u-boot modification performed on the TX1 with native tools on the near horizon, or even in the future?

I am finding host cross-compilation to be very difficult ( I’m really not an Ubuntu guy ) and even the Jetpack installer to be unreliable. Everything would be so much easier without a host and cross-compilation.

Hello, usr2222:
I still suggest you compiling the kernel/u-boot in host PC with correct cross-tool-chain. You can search the forum. Those toolchains can be downloaded from internet directly.
To compile 24.1 kernel in device, kernel need both 64bit and 32bit gcc. I have not tried that.

br
Chenjian

So is your answer yes, the 24.1 kernel/u-boot CAN, in theory be compiled on the TX1? Has anyone actually done this?

I would recommend you to cross compile, it should be faster:

https://developer.ridgerun.com/wiki/index.php?title=Compiling_Tegra_X1_source_code

One issue would be that you still need both 32-bit and 64-bit compilers even if those compilers run native on the JTX1. They wouldn’t be cross-compilers, but there would still be two compilers. You could possibly add the aarch32 to package manager “valid” architectures via armhf, and then download the 32-bit compiler to do everything natively (I have not tried).

It should also be possible to build a tool chain (either cross or native) which defaults to ARMv8-a (aarch64/arm64) output, but which is also able to provide ARMv8 output (the 32-bit mode of an ARMv8-a 64-bit CPU…note the lack of the “-a” suffix when referring to 32-bit) from the same compiler (or really, assembler). Follow this by updating the kernel source to use a different gcc option for this output mode instead of using a separate gcc compiler (you’d have something analogous to x86_64 desktops capable of producing i386/i486/i586/i686 compatibility from one compiler). I don’t know if any of the compilers out there are easily configured this way, but I don’t think the current default Ubuntu compiler on ARMv8-a is set up for this.

On the default compiler of L4T R24.1 64-bit you can specify “-march=armv8-a”, which should be exactly the same as default without the option. I’ve never found another “-march” for this (e.g., armv7, armv7-a, armhf, armv8, aarch32) within the default native compiler. A single compiler could be configured/built to also accept “-march=armv8” or “-march=armv7”, but unless the default Ubuntu compiler (for native compiles) does this it isn’t practical.