Solved What does the kernel need to boot successfully?

pygr

New Member

Thanks: 1
Messages: 13

#1
I think I've got u-boot and ubldr squared away for my board (ClearFog base), but when the kernel is loaded and control passed to it, things just stop. No hints, no warnings, no errors, nothing.

So what does the kernel need (for an ARM board) after control is passed to it so it can continue to boot up? Does a static dtb need to be compiled into the kernel? Does the kernel require appropriate parameters when it is started? Anything else?

pygr
 
OP
OP
P

pygr

New Member

Thanks: 1
Messages: 13

#2
Well, I've been working on this problem in my spare time for the last 6 weeks and it looks like the main culprit is the dtb file. With the same u-boot bits, kernel and world, but changed dtb file, boot-up can get to a later stage before problems show up. Not showing anything on the console after control is passed to the kernel seems to be due to the dtb and the kernel being out of sync. The corresponding dts file that comes in the freebsd source has:

Code:
serial@12000 {
                compatible = "marvell,armada-38x-uart";
                reg = <0x00012000 0x00000100>;
                reg-shift = <0x00000002>;
                interrupts = <0x00000000 0x0000000c 0x00000004>;
                reg-io-width = <0x00000001>;
                clocks = <0x00000004 0x00000000>;
                status = "okay";
                pinctrl-0 = <0x00000007>;
                pinctrl-names = "default";
                linux,phandle = <0x0000002a>;
                phandle = <0x0000002a>;
            };
            serial@12100 {
                compatible = "marvell,armada-38x-uart";
                reg = <0x00012100 0x00000100>;
                reg-shift = <0x00000002>;
                interrupts = <0x00000000 0x0000000d 0x00000004>;
                reg-io-width = <0x00000001>;
                clocks = <0x00000004 0x00000000>;
                status = "okay";
                pinctrl-0 = <0x00000008>;
                pinctrl-names = "default";
                linux,phandle = <0x0000002b>;
                phandle = <0x0000002b>;
            };
The problem appears to be that there is not a uart driver in the freebsd source that responds to the keys "marvell,armada-38x-uart".
If the "compatible" property is changed to "snps,dw-apb-uart", then output on the console during boot up continues to show up after control is passed to the kernel.

BTW phishfry has made a comment that has proved to be useful. He referred to a post he made about mounting image files without having to flash on an external medium: https://forums.freebsd.org/threads/cross-compiling-beaglebone-on-amd64.64718/ That saves a lot of time when the kernel or world needs to be reinstalled.

pygr
 
Last edited:
Top