Thanks, your answer is very helpful :)
I want to rewrite a existing Ethernet driver (such as Realtek 8169
driver) or write a new Ethernet driver as a independent kernel module,
and load it normally at runtime.
The example driver is Linux r8169 driver. It can be built, loaded,
unloaded in the form of a kernel module.
In fact, I am a novice of developing NetBSD drivers, and I am learning now.
Do you think my plan is feasible? Or could you give me some advice?
Thanks in advance,
Jia-Ju Bai
On 2017/2/10 23:19, Taylor R Campbell wrote:
Date: Fri, 10 Feb 2017 18:39:23 +0800 (CST)
From: "Jia-Ju Bai" <[email protected]>
I find the Realtek 8169 driver is built in the kernel, but how to
built it as a kernel module and load it at runtime?
I assume you mean re(4). Nobody has written the code to make that
driver modular. re(4) has multiple bus interfaces, PCI and Cardbus,
so it needs at least two modules:
1. a module called re for the common bus-independent code;
2. a module called if_re_pci for the PCI attachment;
and, if you care about Cardbus,
3. a module called if_re_cardbus for the Cardbus attachment.
Each module needs (a) a directory in sys/modules/ with a Makefile, and
(b) a MODULE declaration and <modulename>_modcmd function in one of
its associated .c files. The bus attachment module also needs an
ioconf file mimicking the kernel config.
There's an example of this for ath(4): sys/modules/ath,
sys/modules/if_ath_pci. For re, you need `.PATH: ${S}/dev/ic' and
`SRCS=rtl8169.c', if I have guessed right from sys/conf/files; for
if_re_pci, you need `.PATH: ${S}/dev/pci' and `SRCS=if_re_pci.c'. The
ioconf for if_re_pci should be just like the ioconf for if_ath_pci,
but with `re' substituted for `ath'. The MODULE declarations and
<modulename>_modcmd functions should look similar to what you find in
dev/ic/ath_netbsd.c and dev/pci/if_ath_pci.c.