当前位置: 技术问答>linux和unix
什么情况下自己编写的模块与内核中的相关功能不会冲突啊?
来源: 互联网 发布时间:2017-01-05
本文导语: 红帽2.8版本内核。 我自己设置的INET套接字,和传输层协议。套接字叫做SOCK_MYUDP,协议叫做MyUDP。 也就是,SOCK_MYUDP跟SOCK_STREAM同一级别,MyUDP跟TCP一个级别。 然后把MyUDP.c放在 linux-2.6.8.1/net/ipv4/目录下。 我的协议中...
红帽2.8版本内核。
我自己设置的INET套接字,和传输层协议。套接字叫做SOCK_MYUDP,协议叫做MyUDP。
也就是,SOCK_MYUDP跟SOCK_STREAM同一级别,MyUDP跟TCP一个级别。
然后把MyUDP.c放在 linux-2.6.8.1/net/ipv4/目录下。
我的协议中有的数据结构是共用原始套接字的,
如传输协议操作集:struct proto raw_prot
我修改了MyUDP.c所在目录的makefile跟kconfig
makefile中,如下:obj-$(CONFIG_IP_MYUDP) +=MyUDP.o
kconfig中,如下:config IP_MYUDP
tristate "MY SOCKET"
depends on INET
然后make menuconfig时把其配置成 “模块”。
然后make,make module_install,make install,reboot
这期间没有提示错误,不过感觉make module_install时间好像有点短。
从新内核启动时,出错。
这是不是跟内核冲突了啊?
如果我要把其作为模块加载的话,该怎样修改呢?是不是MyUDP.c中不能与TCP/IP协议共用相同的数据结构和函数?
然后,我重新make menuconfig配置内核时,把它选为: “y” ,就是直接编译进内核。
接下来所有一切很正常,新设置的套接字也能用。
但是我在根目录下:find -name MyUDP.o 时,就是找不到 MyUDP.o 。不晓得咋回事啊?
另外事实上,我只把MyUDP.c这个文件放在linux-2.6.8.1/net/ipv4/目录下,makefile,kconfig都不用修改。
然后直接编译,从新内核启动。然后调用新设置的套接字也能用。
当然,find -name MyUDP.o 时,也找不到 MyUDP.o
这个咋回事呢?是不是只要放在内核目录下,编译内核时,它就会自动被编译进去?
我自己设置的INET套接字,和传输层协议。套接字叫做SOCK_MYUDP,协议叫做MyUDP。
也就是,SOCK_MYUDP跟SOCK_STREAM同一级别,MyUDP跟TCP一个级别。
然后把MyUDP.c放在 linux-2.6.8.1/net/ipv4/目录下。
我的协议中有的数据结构是共用原始套接字的,
如传输协议操作集:struct proto raw_prot
我修改了MyUDP.c所在目录的makefile跟kconfig
makefile中,如下:obj-$(CONFIG_IP_MYUDP) +=MyUDP.o
kconfig中,如下:config IP_MYUDP
tristate "MY SOCKET"
depends on INET
然后make menuconfig时把其配置成 “模块”。
然后make,make module_install,make install,reboot
这期间没有提示错误,不过感觉make module_install时间好像有点短。
从新内核启动时,出错。
这是不是跟内核冲突了啊?
如果我要把其作为模块加载的话,该怎样修改呢?是不是MyUDP.c中不能与TCP/IP协议共用相同的数据结构和函数?
然后,我重新make menuconfig配置内核时,把它选为: “y” ,就是直接编译进内核。
接下来所有一切很正常,新设置的套接字也能用。
但是我在根目录下:find -name MyUDP.o 时,就是找不到 MyUDP.o 。不晓得咋回事啊?
另外事实上,我只把MyUDP.c这个文件放在linux-2.6.8.1/net/ipv4/目录下,makefile,kconfig都不用修改。
然后直接编译,从新内核启动。然后调用新设置的套接字也能用。
当然,find -name MyUDP.o 时,也找不到 MyUDP.o
这个咋回事呢?是不是只要放在内核目录下,编译内核时,它就会自动被编译进去?
|
这个报错是文件系统挂载的问题吧