请忽略我的排版,抱歉。
项目上需要实现网络功能,就在现有的基础上添加一个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