请忽略我的排版,抱歉。

项目上需要实现网络功能,就在现有的基础上添加一个RTL8152芯片,实现USB转网口。

据说Linux上有现成的8152驱动,以为一切会很顺利,没想到等板子焊好之后懵逼了,不能用,这个为啥呢?回顾一下原始的过程。

现在内核中添加8152的驱动模块。

卧槽懵逼了,出来这么多去哪找有没有8152驱动啊?

先搜索一下。

看来就可以按照这个顺序去找,我这个是我已经配置好了之后去截图的,按道理应该默认是没有的。

确保这个打上了*。

 如果之前主板上USB是可以用的话,这样的配置就已经完成了。要是USB配置还没有配置好,拿还要配置USB的驱动。

 

 有些可能还要改dts,因为我这次修改的前提是主板上的USB是能用的,所以就用不到修改DTS文件。

改DTS可以参考一下这个大神的修改:

​​​​​​linux系统 RTL8152B网卡驱动移植-USB转网卡_u013921164的博客-CSDN博客

 配置好了之后,编译内核,然后烧写kernel实验。

在r8152.c程序中添加自己的打印信息,分析代码有没有启动。

 内核启动的时候有打印,真没驱动执行了。

但是主板就是没有网卡信息,仔细看打印的日志。

设备是挂载了,为什么不行呢?

 而且也是能够获取到网卡的?起了怪了,就只能靠猜测了,是不是没有MAC地址啊?

网上找找资料,有个大神也这么干。

在r8152.c文件中添加如下这段,设置一个随机MAC地址。

static int rtl8152_set_mac_address(struct net_device *netdev, void *p);//wanxu为了能够下面的函数调用,做声明
static inline void set_ethernet_addr(struct r8152 *tp)
{
#if 0//最原始的代码
	struct net_device *dev = tp->netdev;
	u8 *node_id;

	node_id = kmalloc(sizeof(u8) * 8, GFP_KERNEL);
	if (!node_id) {
		netif_err(tp, probe, dev, "out of memory");
		return;
	}

	if (pla_ocp_read(tp, PLA_IDR, sizeof(u8) * 8, node_id) < 0)
		netif_notice(tp, probe, dev, "inet addr fail\n");
	else {
		memcpy(dev->dev_addr, node_id, dev->addr_len);
		memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
	}
	kfree(node_id);
#endif

#if 1//wanxu 添加自动获取mac地址
	printk(KERN_INFO "%s\n", "wanxu add rtl8152_set_mac_address");
	struct net_device *dev = tp->netdev;
	struct sockaddr sa;
	int ret;
	ret = pla_ocp_read(tp, PLA_IDR, 8, sa.sa_data);
	if (ret < 0) {
		netif_err(tp, probe, dev, "ether addr fail\n");
	} else if (!is_valid_ether_addr(sa.sa_data)) {
		netif_warn(tp, probe, dev, "Invalid ether addr\n");
		eth_hw_addr_random(dev);
		memcpy(sa.sa_data, dev->dev_addr, ETH_ALEN);//unsigned char dev_addr[MAX_ADDR_LEN] ETH_ALEN = 6
		rtl8152_set_mac_address(dev, &sa);
	} else {
	if (tp->version == RTL_VER_01)
		memcpy(dev->dev_addr, sa.sa_data, ETH_ALEN);
	else
		ret = rtl8152_set_mac_address(dev, &sa);
	#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
	#endif
	}
#endif
}

然后,奇迹就产生了,能用了,哈哈。感谢大神的文章。

https://blog.csdn.net/ruslan1/article/details/110499280?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐