Date: Thu, 24 Dec 2015 16:40:13 +0100 From: Sylvain Garrigues <sylgar@gmail.com> To: Ian Lepore <ian@freebsd.org> Cc: Tim Kientzle <tim@kientzle.com>, freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: Booting the ELF kernel without ubldr on Raspberry Pi Message-ID: <BD124AF0-68E2-457A-9B63-6BE312F218E5@gmail.com> In-Reply-To: <1450970414.25138.238.camel@freebsd.org> References: <C6819C94-DF61-447F-AC61-FD3E061A6F76@gmail.com> <32849B9F-C7B8-4A86-B8F1-043F62D2E64C@kientzle.com> <8F62699C-126D-492D-8B7E-8C250ED5BC07@gmail.com> <1450970414.25138.238.camel@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello Ian, I=E2=80=99m using u-boot from the ports (sysutils/u-boot-rpi2). It = doesn=E2=80=99t display anything about cache being enabled. I was just comparing the time it takes to have the Linux kernel prints = its first lines, and the time it takes for the FreeBSD kernel to print = its own (the =C2=AB Copyright =C2=BB line) when used with u-boot+loader. For the former, it=E2=80=99s under a second, for the latter it=E2=80=99s = about 3-4 seconds (mainly spent when the loader loads the elf kernel). So I was wondered how they made it and was led to believe the Linux = kernel is compressed (and self-extracting), leading to less loading time = from the SD card which apparently is the bottleneck. So since the FreeBSD kernel has no =C2=AB self-extracting =C2=BB = feature, and since ubldr doesn=E2=80=99t seem to support the extracting = of a gzip kernel (well it seems to work with LOADER_GZIP_SUPPORT but I = see no gain), I was trying to use the compression and extraction feature = of u-boot with the use of recent mkimage with support for lzma = compression. I thought I could boot directly a LZMA compressed = kernel.bin with mkimage, without ubldr. But I forgot about the kernel = expecting a variable with the DTB address, which is set up by ubldr, so = I give up and will wait to see if someone is interested in implementing = a self-extracting kernel in the future. Best, Sylvain =20 > Le 24 d=C3=A9c. 2015 =C3=A0 16:20, Ian Lepore <ian@freebsd.org> a = =C3=A9crit : >=20 > On Thu, 2015-12-24 at 11:51 +0100, Sylvain Garrigues wrote: >> If I look at what gonzo did for VERSATILEPB, I think it can be done >> easily by writing a tiny assembly code that does something like what >> he did: >>=20 >> # set r0..r3 to zero >> /usr/bin/printf "\0\0\240\343" > ${WORKDIR}/first_commands >> /usr/bin/printf "\0\020\240\343" >> ${WORKDIR}/first_commands >> /usr/bin/printf "\0\040\240\343" >> ${WORKDIR}/first_commands >> /usr/bin/printf "\0\060\240\343" >> ${WORKDIR}/first_commands >>=20 >> # jump to kernel entry point >> /usr/bin/printf "\001\366\240\343" >> ${WORKDIR}/first_commands >>=20 >> # install kernel >> [ ! -d ${WORKDIR}/_.kernel.bin ] && mkdir ${WORKDIR}/_.kernel.bin >> board_default_installkernel ${WORKDIR}/_.kernel.bin >>=20 >> dd of=3D$VERSATILEPB_FLASH bs=3D1M count=3D4 if=3D/dev/zero >> dd of=3D$VERSATILEPB_FLASH bs=3D1 conv=3Dnotrunc >> if=3D${WORKDIR}/first_commands >> dd of=3D$VERSATILEPB_FLASH bs=3D64k oseek=3D15 conv=3Dnotrunc >> if=3D${WORKDIR}/_.kernel.bin/boot/kernel/kernel.bin >>=20 >> The only problem for the Raspberry pi is that, if I am correct, the >> DTB is modified by the firmware (bootcode.bin) so I can=C2=B4t = statically >> compile the DTB in the kernel like for VERSATILEPB :( I would need to >> mimic what loader does and create a kernel environment variable which >> contains the address to the DTB. >>=20 >> This is a good exercice, but it doesn=C2=B4t solve my project which = is to: >>=20 >> 1/ have a self-extracting kernel or have a loader which uncompress >> the kernel, so that it takes much less time to start (my benchmark is >> raspbian or openelec).=20 >> =3D=3D> I compiled ubldr with LOADER_GZIP_SUPPORT and compressed = kernel >> to kernel.gz, reducing the size by 2. The loader does manage to load, >> uncompress and boot the kernel.gz, but the loading time is worse than >> when uncompressed, so I=C2=B4m stuck I don=C2=B4t know what=C2=B4s = wrong? >>=20 >> 2/ have the bootloader / kernel display a nice splash screen while >> the kernel boots >> =3D=3D> for that I looked at u-boot splash screen but the quality of = the >> rendering is too poor (8-bit bitmap). I looked at the VT frame buffer >> but the slash screen feature is also limited. So I might now look >> into the misc/raspberrypi-userland port and understand how the >> hello_jpeg sample code does that with the GPU, then I plan to port it >> in the kernel initialization code, not sure it=C2=B4s going to work)=20= >=20 > What version of u-boot are you using for this? I don't understand the > obsession with the time it takes to load the kernel unless something > unusual is happening. On my systems the time it takes to load a > kernel, whether it's u-boot or ubldr doing the work, is pretty much > exactly the time it takes to read the media the kernel is on. On an > sdcard that's usually a few seconds, on gigabit ethernet it tends to = be > far less than one second. But all of that assumes that caching is > enabled in u-boot, and it wasn't in some of the older ports. >=20 > When u-boot starts does it say anything about the caches being enabled > or disabled? Is the dcache command available? If not, it's probably > not enabled, and a newer u-boot may fix the problem. I hope to be > updating all our u-boot ports over the next month or so. >=20 > -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BD124AF0-68E2-457A-9B63-6BE312F218E5>