A couple of things:
1) You're trying to use a symbol (net_lookup_impl) that is *not* part of
the public DDI. You probably shouldn't be doing this.
2) You need to add linker flags to bring in the symbol dependency. Use
ld -r -dy -N misc/neti to arrange for the dynamic dependency.
-- Garrett
stevens wrote:
> I have followed a driver tempate to rewrite code.
> $cat qotd_1.c
> /*
> * File: qotd_1.c
> * Author: stevens
> *
> * Created on 2008年7月28日, 下午2:15
> */
>
> #include <sys/modctl.h>
> #include <sys/conf.h>
> #include <sys/devops.h>
> #include <sys/cmn_err.h>
> #include <sys/ddi.h>
> #include <sys/sunddi.h>
> #include <sys/neti.h>
> #include <netinet/in.h>
> #include <sys/int_types.h>
> #include <sys/queue.h>
> #include <sys/hook_impl.h>
> #include <sys/netstack.h>
> #define QOTD_MAXLEN 128
> /*
> *
> */
> static const char qotd[QOTD_MAXLEN]
> ="Be careful about reading heath book.\
> You may die of a misprint.-Mark Twain \n";
> static struct dev_ops qotd_dev_ops={
> DEVO_REV,
> 0,
> ddi_no_info,
> nulldev,
> nulldev,
> nulldev,
> nulldev,
> nodev,
> (struct cb_ops*)NULL,
> (struct bus_ops*)NULL,
> nulldev
> };
> static struct modldrv modldrv={
> &mod_driverops,
> "Quote of the Day 1.0",
> &qotd_dev_ops
> };
> static struct modlinkage modlinkage={
> MODREV_1,
> (void*)&modldrv,
> NULL
> };
> int _init(void){
> cmn_err(CE_CONT,"QOTD:%s\n",qotd);
> net_data_t ipv4=net_lookup_impl(NHF_INET,NULL);
> return (mod_install(&modlinkage));
> }
> int _info(struct modinfo*modinfop){
> return (mod_info(&modlinkage,modinfop));
> }
> int _fini(void){
> return (mod_remove(&modlinkage));
> }
> $ cc -D_KERNEL -m64 -c qotd_1.c
> $ ld -r -o qotd_1 qotd_1.o
> #cp qotd_1 /tmp
> #ln -s /tmp/qotd_1 /usr/kernel/drv/amd64/qotd_1
> #cp qotd_1.conf /usr/kernel/drv/amd64/
> # add_drv qotd_1
> devfsadm: driver failed to attach: qotd_1
> Warning: Driver (qotd_1) successfully added to system but failed to attach
> #tail /var/adm/messages
> Jul 28 14:20:44 e1000 genunix: [ID 819705 kern.notice]
> /usr/kernel/drv/amd64/qotd_1: undefined symbol
> Jul 28 14:20:44 e1000 genunix: [ID 826211 kern.notice] 'net_lookup_impl'
> Jul 28 14:20:44 e1000 genunix: [ID 472681 kern.notice] WARNING: mod_load:
> cannot load module 'qotd_1'
>
>
> This message posted from opensolaris.org
> _______________________________________________
> networking-discuss mailing list
> [email protected]
_______________________________________________
networking-discuss mailing list
[email protected]