Date: Wed, 17 Apr 2019 21:03:59 -0600 From: Ian Lepore <ian@freebsd.org> To: Lee D <embaudarm@gmail.com>, FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: What code loads kernel modules at boot? Message-ID: <173b3741db8be891cff8b7005b2058a416d43115.camel@freebsd.org> In-Reply-To: <CANC_bnNog192=sAgw6uu7J_oJMPLGyMa57y-eXNxHv_g-KMvOw@mail.gmail.com> References: <CANC_bnNog192=sAgw6uu7J_oJMPLGyMa57y-eXNxHv_g-KMvOw@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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). 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. -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?173b3741db8be891cff8b7005b2058a416d43115.camel>