基于RK3288安卓Android5.1平台移植RTL8152驱动
请忽略我的排版,抱歉。
项目上需要实现网络功能,就在现有的基础上添加一个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 = 6rtl8152_set_mac_address(dev, &sa);} else {if (tp->version == RTL_VER_01)memcpy(dev->dev_addr, sa.sa_data, ETH_ALEN);elseret = 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
基于RK3288安卓Android5.1平台移植RTL8152驱动相关推荐
- 基于S3C2440的linux-3.6.6移植——LED驱动
目前的linux版本的许多驱动都是基于设备模型,LED也不例外. 简单地说,设备模型就是系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动.设备模型会产生一个虚拟的文件系统--sy ...
- ART-PI平台移植Touchgfx 驱动gt9147 触摸屏幕点亮LED
本篇文章用来介绍一下怎么使用RTThread Studio 在ART-PI平台上面移植TouchGFX,并做一个简单的触摸按键让LED灯闪烁试验. 我使用的液晶屏幕是正点原子的4.3寸RGBLCD,触 ...
- 基于S3C2440的Linux-3.6.6移植——声卡驱动
Linux的ALSA声卡驱动较为复杂,它需要注册多个平台设备.在mach-zhaocj2440.c文件中的平台设备数组内一共有四个与ALSA相关的平台设备: &s3c_device_iis, ...
- 基于rk3288平台的gt9xx 触摸驱动移植
基于rk3288平台的gt9xx 触摸驱动移植 一.硬件介绍: 1 core-rk3288j 核心板 ...
- 基于原生开发的全新中文安卓应用开发平台
VcnStudio基于原生开发的全新中文安卓应用开发平台 简介 新版特征 界面预览 后记 简介 VcnStudio 全称为Visual Chinese Studio:是一款依照现有的开发语言进行扩展使 ...
- 基于Anycloud平台移植Zbar
基于Anycloud平台移植Zbar 0. 环境准备 zbar 下载 官网ZBar bar code reader (sourceforge.net)下载代码zbar-0.10.tar.bz2 下载i ...
- 基于RK3288 平台 Simple card声卡添加及调试
基于RK3288 平台 Simple card声卡添加及调试 Simple card即简单通用的machine driver, 如果simple-card框架足够满足需求,建议优先使用simp ...
- 基于MSM平台的振动器驱动移植
前言: 振动器是Android智能手机操作系统中比较常见的功能之一,在实际应用中可以将来电显示设置为振动模式作为提醒.在Android系统中,通过振动系统米快可以实现俩点铃声和来电的振动功能..本篇b ...
- 安卓底层linux开发教程,Android手机平台移植与底层开发 PDF
支持Android的热门ARM硬件平台简介 ARMv7架构SOC l TI OMAP系列,2009年OMAP3和OMAP4关注度较高 l Freescale i.MX51系列 l Qualcomm 8 ...
最新文章
- Codeforces 300E(数学)
- 电击、警棍、爆头,被骗去柬埔寨的程序员有多惨?
- 6月8号=》105页-110页
- POJ1195Mobile phones
- kafka可视化客户端工具(Kafka Tool)的基本使用
- 课程分类管理-添加课程分类
- 谈谈JAVA中的安全发布
- 平均年薪60.8万!拿下这个证书,算法岗直接起飞!
- jetty源码阅读总结1
- 免费下载天地图全国基础地理信息矢量数据的一种方法
- AdBlock Plus 大幅飙升 Firefox 内存开销
- 一招教你表格里面给方框内打勾
- 基于wifi的物联网技术,主要有哪些优势?
- js中获取月份date.getMonth()获取的是0-11
- Matlab中如何定义和使用colormap?|colormap的使用
- 解决gitee/github上传图片数量受限
- python提取图片中的文字
- Android Studio ---------------- 软件使用小细节(更新中。。。。。。)
- Mybatis的_parameter使用
- ROS path问题解决方案