I was hoping someone might know some information regarding booting the intel stratix 10 devkit. The version I have is the H-Tile board 1SX280HU2F50E1VGAS.
Using the boot procedure from rocket boards page "Building the Bootloader" for the Stratix 10 board. "Stratix 10 SoC - Boot from SD Card" section. https://rocketboards.org/foswiki/Documentation/BuildingBootloader
I am able to get the device to boot when using the linux kernel built from source, following build instructions form the appendix "Building Linux Binaries - Building Linux Kernel". Specifically I was able to follow the build procedure for the "socfpga-5.10.100-lts" branch of the git repo: https://github.com/altera-opensource/linux-socfpga
I used the built "Image" file and socfpga_stratix10_socdk.dtb from this build and used it in the process for building u-boot to generate a kernel.itb file and and format files for the SD Card correctly. Once booting, it goes to a linux shell no issues.
However, I would like to not build the Linux kernel from source and instead use a precompiled one from Redhat's repositories. I used the Kernel located at /images/pxeboot/vmlinuz of a redhat install iso and extracted the uncompressed image using 7zip, and followed the exact same boot procedure as above. However, replacing the Image with this new kernel image as well as the device tree for the 4.18 kernel. (Built by building the kernel version 4.18 from the github repo https://github.com/altera-opensource/linux-socfpga using the socfpga_stratix10_socdk.dtb file from the folder "arch/arm64/dts/altera" directory.)
Does not boot. The serial output from the board is attached, it bootloops at the line "[ 0.016626] printk: bootconsole [uart0] disabled".
It loads the kernel and device tree okay. The only aparrant error in the boot logs between any prebuilt kernel and the ones built from source is
"[ 0.000000] ACPI: Early table checksum verification disabled
[ 0.000000] ACPI: Failed to init ACPI tables"
I have also tested this using the 4.18 kernel from a VM running redhat and extracted the vmlinuz from the /boot folder. Exact same problem. Also tested Almalinux 8.5 iso and used that kernel, same issue. Also tested with Centos8 image and also got the same issue.
I wanted to make sure it wasn't a versioning issue so I tested a prebuilt 5.14 kernel from a Centos 9 stream kernel build and that image did not work too.
For the sake of clarity, I wanted to make sure that a 4x kernel does at least boot into the shell. So I built the kernel from the v4.18 kernel tag from the altera-opensource linux-socfpga repository. Which is an exact fork of the real linux repository. Once built using the same build procedure for 5.10, copying Image and socfpga_stratix10_socdk.dtb to the u-boot directory for building. It boots to the shell exactly like the 5.10 kernel.
This is what im so confused by and stuck on why a "built from source" kernel of the same version works, but not a prebuilt kernel image of the same version? Is it the way im extracting the kernel from the built sources? Has anyone had any success booting a stratix 10 device using prebuilt kernel? Is it the device tree file im using?
I don't know how to proceed from here. It must be possible for a prebuilt kernel image to work as the stock 4.18 kernel built from source with no alterations boots just fine.
Any advice on where to go would be immensely appreciated.
We don’t fully understand your question.
Do you want to boot Linux using prebuilt kernel from Redhat?
If so, why do you need the prebuilt kernel instead of built kernel from source?
The company that I work for asks to use a stock configuration of Linux so it's commercially supported so we can sell to our clients. If any security patches and vulnerabilities are found in the kernel and it needs patching, we do not want this to be our responsibility to rebuild the kernel every time. And therefore, would like to run stock RHEL.
In regards to the original post, I made a lot of progress determining what the root problem was. The main issue being the prebuilt kernel has mmc as a kernel module marked as "M" not baked into the kernel with "Y". This means that unless the rootfs is loaded, it wont ever find the mmc module on the SD card and therefore wont boot. Classic catch 22 problem.
I partially solved this using an initramfs with the kernel, device tree and rootfs baked into a singular .itb blob. Now the device loads the kernel properly, finds the initramfs and starts loading system modules like systemd. However, there is an issue im currently resolving regarding building a working initramfs image using dracut.
I'll update this thread if I finally get it to boot into a shell, still learning a lot about generating cpio initramfs images. If anyone knows a method to properly generate it from a rootfs.tar.gz archive or working RHEL VM please let me know. There might be a missing parameter call to dracut.