CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/10/31/Exynos4412——网卡移植和NFS启动/#more
为Exynos 4412移植好网卡驱动,并采用NFS挂载根文件系统启动。
玩Exynos4412的第一个目标是想弄下LCD驱动。
在开始流畅的写驱动前,前期的准备工作又多又繁琐。
上次移植好了内核,内核和根文件系统都是在RAM进行进行加载的,后面写驱动的时候,肯定不方便。
就以往的经验来看,uboot、kernel都应该在SD卡或者eMMC上,这样断电才不会丢失。根文件系统在调试驱动的时候应该是nfs挂载,调试完成了再烧写到SD卡或者eMMC上。
因此,写驱动前至少还要移植好SD卡驱动、网卡驱动。eMMC可暂时不管。
本次就先移植好网卡驱动,并尝试NFS挂载根文件系统。
1.硬件结构
JZ2440中的网卡芯片是DM9000,采用的是内存接口。
Tiny4412的网卡芯片是DM9621,采用的是USB接口。
而且该芯片并没有直接接在SOC的USB上,而是接在USB4604这个HUB芯片上。
USB4604通过HSIC接口(XuhostSTROBE1和XuhostDATA1)接在SOC上。
框架如下:
因此,需要重点关注USB4604和DM9621。查看这两块的原理图:
USB4604:
DM9621:
发现USB4604的一些功能并没有使用,如外接SPI/I2C设备等。除了数据端口,还能控制的就是复位引脚。
DM9621的驱动在本内核的drivers/net/usb/dm9601.c已经实现,但为了支持识别bootargs中的mac地址的功能,需要稍微修改dm9601.c,添加解析mac地址的功能,并且还需要将解析到的有效的mac地址设置到dm9621中,否则网络不能用。
USB4604的驱动在本内核的drivers/usb/misc/usb4604.c已经实现,但由于没有外接SPI/I2C,需要删除一些,可以参考drivers/usb/misc/usb3503.c或者博客里的代码。我直接用的博客里面的代码。
此外,还需在设备树使能将要用到的外设:hsi、ehci、otg等。
2.移植网卡驱动
目前需要修改的文件有:
(1)设备树文件:arch/arm/boot/dts/exynos4412-tiny4412.dts;
(2)DM9621驱动:drivers/net/usb/dm9601.c;
(3)USB4604驱动:drivers/usb/misc/usb4604.c;
(4)USB4604驱动头文件:include/linux/platform_data/usb4604.h(新建);
(5)设备树头文件:include/dt-bindings/usb4640/usb4604.h(新建);
(6)DM9621驱动加入内核;
(7)USB4604驱动加入内核;
2.1 修改设备树文件
主要添加了usb-hub的复位引脚信息和使能了一些外设。
{% codeblock lang:c%}
— /work/tools/linux-4.13.9/arch/arm/boot/dts/exynos4412-tiny4412.dts 2017-10-21 08:55:07.000000000 -0700
+++ /work/linux-4.13.9/arch/arm/boot/dts/exynos4412-tiny4412.dts 2017-10-30 02:34:10.363297869 -0700
@@ -14,6 +14,7 @@
/dts-v1/;
#include “exynos4412.dtsi”
#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/usb4604/usb4604.h>
/ {
model = “FriendlyARM TINY4412 board based on Exynos4412”;
@@ -21,6 +22,7 @@
chosen {
stdout-path = &serial_0;