A investigative hack that makes (for example) head -r356529 boot and operate normally an RPi4B (finally!): protect all armstub8-gic.bin's loaded content from replacement by the kernel

Ralf Wenk iz-rpi03 at hs-karlsruhe.de
Thu Feb 13 14:26:17 UTC 2020


On 2020-02-13 at 7:49 -0600 Kyle Evans wrote:
> On Thu, Feb 13, 2020 at 7:43 AM Ralf Wenk <iz-rpi03 at hs-karlsruhe.de> wrote:
> >
> > On 2020-02-12 at 18:00 -0800 Mark Millard wrote via freebsd-arm:
> > > [...]
> > >
> > > # svnlite diff /usr/src/sys/dev/fdt/fdt_common.c
> > > Index: /usr/src/sys/dev/fdt/fdt_common.c
> > > ===================================================================
> > > --- /usr/src/sys/dev/fdt/fdt_common.c (revision 357529)
> > > +++ /usr/src/sys/dev/fdt/fdt_common.c (working copy)
> > > @@ -485,7 +485,18 @@
> > >
> > >       tuples = res_len / tuple_size;
> > >       reservep = (pcell_t *)&reserve;
> > > +#ifdef __aarch64__
> > > +     //HACK!!!
> > > +     // Reserve the first few pages, for example to
> > > +     // preserve armstub8-gic.bin or armstub.bin
> > > +     // content.
> > > +     mr[0].mr_start= 0;
> > > +     mr[0].mr_size= 2*4096;
> > > +     tuples++;
> > > +     for (i = 1; i < tuples; i++) {
> > > +#else
> > >       for (i = 0; i < tuples; i++) {
> > > +#endif
> > >
> > >               rv = fdt_data_to_res(reservep, addr_cells, size_cells,
> > >                       (u_long *)&mr[i].mr_start, (u_long *)&mr[i].mr_size);
> > > @@ -512,6 +523,11 @@
> > >
> > >       root = OF_finddevice("/reserved-memory");
> > >       if (root == -1) {
> > > +             // Fail over to checking for and handling memreserve,
> > > +             // such as for a RPi4B.
> > > +             if (0 == fdt_get_reserved_regions(reserved,mreserved))
> > > +                     return (0);
> > > +
> > >               return (ENXIO);
> > >       }
> > >
> >
> > I can confirm that with your patch(es) my RPi3 does not freeze any more
> > when loading mac_ntpd.ko. The patches are applied against r357853M.
> >
> 
> Have you tested the RPi3 with just this second hunk of patch to
> fallover to memreserve, or is the first hunk definitely required as
> well?

Good question. I tested both hunks together.
Will try what happens when just applying the second and report back.

It is possible that those changes are not enough to get a stable working
system. Because while doing make installworld with r357853 and both hunks
applied the following just happens:

install -N /usr/src/etc  -o root -g wheel -m 444 ng_async.4.gz  
//usr/share/man/man4/
*** Signal 11

Ralf



More information about the freebsd-arm mailing list