拿系统源码去编译驱动
发布时间: 2025-07-10 02:40:00
手动编译安装Linux网卡驱动(以D-Link 530网卡为例)的步骤如下:
1. 检查网卡芯片是否被支持
- 确认网卡芯片:D-Link 530网卡的芯片组为via-rhine(或viarhine)。
- 查看内核模块:使用uname -r查看内核版本,然后前往对应版本的模块路径(如/lib/moles/$(uname -r)/kernel/drivers/net或/lib/moles/$(uname -r)/net)查看是否存在via-rhine相关的模块。
- 使用dmesg检测:运行dmesg | grep eth查看系统日志,确认网卡是否被检测到。如果检测到,则无需编译模块,直接加载即可。
2. 准备编译环境
- 下载驱动程序:从官方或可靠来源下载网卡驱动程序源代码,如dlkfet-4.24.tar.gz。
- 安装必要软件包:确保系统中安装了kernel source、kernel header和gcc、make等编译工具。以Red Hat 9为例,需要安装kernel-source-2.4.20-18.9、kernel-2.4.20-18.9、gcc-3.2.2-5和make-3.79.1-17。
- 创建kernel source链接:如果kernel source位于非标准目录(如/usr/src/linux-2.4.20-18.9),则需要在/usr/src目录下创建指向该目录的链接,如ln -s linux-2.4.20-18.9 linux。
3. 编译网卡驱动模块
- 解压驱动程序源代码:将下载的驱动程序源代码解压到/tmp或其他临时目录。
- 编译模块:进入解压后的目录,运行make命令进行编译。编译成功后,会产生一个名为rhinefet.o的模块文件。
- 移动模块文件:将编译好的模块文件复制到内核模块目录,如/lib/moles/$(uname -r)/kernel/drivers/net。
- 更新模块依赖关系:运行depmod -a命令更新模块依赖关系。
4. 测试和加载网卡驱动模块
- 加载模块:使用modprobe rhinefet命令加载模块(注意,不需要写.o后缀)。
- 查看加载的模块:使用lsmod命令查看已加载的模块列表,确认rhinefet模块已加载。
- 设置开机加载模块:编辑/etc/moles.conf文件,在文件中添加一行alias eth0 rhinefet,以设置开机时自动加载该模块。
- 重启系统:运行sync; sync; reboot命令重启系统,确认模块在启动时能够正常加载。
5. 测试网卡是否正常工作
- 网络连接测试:重启后,使用网络工具(如ifconfig、ping等)测试网卡是否正常工作。
请注意,以上步骤可能因Linux发行版和内核版本的不同而有所差异。在实际操作中,请根据您使用的Linux发行版和内核版本进行相应的调整。
❷ Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器
在Ubuntu系统上从源码编译安装gcc7.3.0编译器的步骤如下:
下载源码包:
- 从指定的下载地址下载gcc7.3.0的源码包,通常为gcc7.3.0.tar.gz。
安装依赖库:
- 确保网络连接正常,并安装必要的依赖库,如libgmpdev、libmpfrdev和libmpcdev。
- 注意:不要卸载已有的gcc,否则可能会遇到问题。
解压源码包:
- 使用tar xzvf gcc7.3.0.tar.gz命令解压下载的源码包。
配置编译环境:
- 进入解压后的源码目录,执行./configure命令进行配置。
- 注意:在配置时,需要增加C和C++的配置,以避免编译结果只有g++而没有gcc。
编译源码:
- 执行make j4命令开始编译。
- 在编译过程中,可能会遇到一些错误,如缺少头文件或头文件路径错误。
- 如遇到”fatal error: asm/errno.h: No such file or directory”错误,需要修改头文件路径。
- 如遇到”sanitizer_syscall_generic.inc:15:24: error: ‘__NR_open’ was not declared in this scope”错误,需要修正头文件链接。
安装gcc7.3.0:
- 编译成功后,执行sudo make install命令进行安装。
- 安装完成后,可以通过gcc version命令确认安装的gcc版本是否为7.3.0。
注意事项:
- 在整个安装过程中,需要确保本地已经安装了g++,否则在编译gcc时会出错。如果未安装g++,可以先安装gcc。
- 安装完成后,如果只有g++而没有gcc,可能是由于在./configure阶段未正确配置C和C++的支持。此时需要重新配置并编译。
热点内容