永发信息网

linux中如何从一个模块调用另一个模块的接口

答案:2  悬赏:10  手机版
解决时间 2021-04-01 18:26
  • 提问者网友:沉默的哀伤
  • 2021-04-01 10:16
在一个linux系统中,我写了一个字符设备,想通过这个字符设备内部实现更改本地网卡驱动,那么应该怎么做?
如果我自己写了一个驱动程序,怎么替换现有的驱动?按我的理解,现有的设备文件是系统自己创建的,针对网卡硬件的,而设备文件的主设备号对应驱动,那么怎么能让我的驱动去操作这个设备文件呢?刚开始学习linux驱动,都不懂,谢谢大家的指教

上面写错了一点,不是更改本地网卡驱动,而是更改本地网卡的ip等信息。
最佳答案
  • 五星知识达人网友:妄饮晩冬酒
  • 2021-03-15 06:44
我不太记得怎么改了,略懂而已,请参考
打开终端
最简单的方法是输入setup命令
还有一个比较麻烦的方法
ifconfig(这个单词的全称是interface config)打个比方,IP地址为192.168.1.1 掩码24位,那么命令如下
ifconfig 192.168.1.1 255.255.255.0(这条命令不用重启服务,但是再次开机上次修改的IP又还原了,简单来说就是临时修改IP地址。)
还有一个方法,是编辑文本
vi /etc/sysconfig/network-spicrt/ifcfg-eth0~3
↓ ↓
试试TAB键,单词不记得了,乱打的 这个是0~3号设备网卡,如果0不行就换1或2或3
这个命令进入后,你找到“dhcp”这一行,DHCP是自动获取IP的意思
把DHCP改为static,然后输入回车进入下一行,输入IPADDR=192.168.1.1(IP地址)
再按下回车,输入NETMASK=255.255.255.0(子网掩码)
再按下回车输入GETWAY=192.168.1.10(把网关改为192.168.1.1)
输入完了之后exit命令退出来
然后输入 service network restart
就可以完成了
全部回答
  • 1楼网友:时间的尘埃
  • 2020-10-20 09:46
在编写linux内核模块的时候,有时候我们需要调用一只内核模块里面的函数,然而如果是在不同目录下面编译生成的内核模块,此时a模块去调用b模块的函数时候会出现函数未定义,无法调用的情况。那么以前我是在同一个目录下面,先后写两个makefile,然后编译生成两个不同的内核模块,这种方式可以正常实现a模块调用b模块里面的函数,不过非常麻烦。本博文将会针对这种情况提出一种可以同时生成多个内核模块,不要再次编译的方面,下面贴出源码: 内核模块cal.ko: #include #include module_license("gpl"); int add(int a, int b) { return a+b; } int sub(int a, int b) { return a-b; } static int sym_init() { return 0; } static int sym_exit() { return 0; } module_init(sym_init); module_exit(sym_exit); export_symbol(add); export_symbol(sub); 内核模块hello.ko #include #include module_license("gpl"); module_author("david xie"); module_description("hello world module"); module_alias("a simplest module"); static int age = 10; module_param(age, int, s_irugo);//allow all user to use this param int add(int a, int b); int sub(int a, int b); static int hello_init(void) { printk("<0>"" hello world! age = %d\n", add(10, 20));//调用内核模块cal.ko里面的add函数 return 0; } static void hello_exit(void) { printk("<0>""hello exit %d\n", sub(30,10));//调用内核模块cal.ko里面的sub函数 } module_init(hello_init); module_exit(hello_exit); 可以生成多个内核模块的makefile ifneq ($(kernelrelease),) obj-m := cal.o hello.o cal-objs := operator.o hello-objs := main.o else kdir := /lib/modules/2.6.32-21-generic/build all: make -c $(kdir) m=$(pwd) modules clean: rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order endif 此时在当前目录执行make就会产生cal.ko和hello.ko两个内核模块
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯