Date: Wed, 17 Apr 2019 21:44:51 -0600 From: Warner Losh <imp@bsdimp.com> To: Ian Lepore <ian@freebsd.org> Cc: Lee D <embaudarm@gmail.com>, FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: What code loads kernel modules at boot? Message-ID: <CANCZdfpAp_WbM6xQ8PftuE=W8zXWxVDC4h2O-EmKFoj2Nzso6Q@mail.gmail.com> In-Reply-To: <173b3741db8be891cff8b7005b2058a416d43115.camel@freebsd.org> References: <CANC_bnNog192=sAgw6uu7J_oJMPLGyMa57y-eXNxHv_g-KMvOw@mail.gmail.com> <173b3741db8be891cff8b7005b2058a416d43115.camel@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Apr 17, 2019 at 9:07 PM Ian Lepore <ian@freebsd.org> wrote: > On Wed, 2019-04-17 at 20:52 -0400, Lee D wrote: > > A couple of years ago I wrote a FreeBSD bootloader for Zynq (Arm32). > > It's been working well, but now I need to add the ability to load > > kernel modules at boot. This is for 11.0.1 (updating to 12 soon, > > hopefully). > > > > Can anyone point me to the code that actually loads a kernel module > > for arm? I got lost reading the source in /src/sys/boot/common, and > > can't quite figure out what routine is actually called. > > > > I assume I need to parse the sections out of the .ko file and place > > them carefully in memory, like I do with the kernel image. > > > > Also, if you're feeling loquacious, where do I put the darn thing and > > how do I tell the kernel how to find it (part of the MODINFO stuff I > > assume)? > > > > This is all in the context of loading custom real time clock and I2C > > drivers so they are available at boot time. > > > > Thanks, > > > > > > The bulk of the module-loading code (the arch-independent part of it) > is in src/stand/common/module.c. There is also archsw.arch_loadaddr, > which figures out where to put the modules (handling arch-specific > things like alignment requirements). > That code gets called from the command line commands, as well as indirectly in the .conf file parsing each of the interpretive languages have. > For some reason, I thought Zynq used u-boot. That would allow using > either ubldr or the arm uefi loader (depending on how old the u-boot > is); those are just flavors of loader(8) that would get you module > handling and all the other loader goodness. > Yea, if the loader that he's written loads /boot/loader, he doesn't need to do anything. if it loads the kernel and modules, he'll need to do what the code in src/stand/common/module does in terms of laying out memory and passing the proper meta-data to the kernel. Warner
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfpAp_WbM6xQ8PftuE=W8zXWxVDC4h2O-EmKFoj2Nzso6Q>