在一个linux系统中,我写了一个字符设备,想通过这个字符设备内部实现更改本地网卡驱动,那么应该怎么做?
如果我自己写了一个驱动程序,怎么替换现有的驱动?按我的理解,现有的设备文件是系统自己创建的,针对网卡硬件的,而设备文件的主设备号对应驱动,那么怎么能让我的驱动去操作这个设备文件呢?刚开始学习linux驱动,都不懂,谢谢大家的指教
上面写错了一点,不是更改本地网卡驱动,而是更改本地网卡的ip等信息。
linux中如何从一个模块调用另一个模块的接口
答案:2 悬赏:10 手机版
解决时间 2021-04-01 18:26
- 提问者网友:沉默的哀伤
- 2021-04-01 10:16
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 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
就可以完成了
打开终端
最简单的方法是输入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两个内核模块
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯