hisi3559平台PCIE转USB调试

第1章 PCIE驱动框架介绍

pci驱动分为总线驱动和设备驱动。总线驱动是linux内核完成,主要完成设备的枚举,常规64个字节配置空间的访问。设备驱动是针对PCI接口具体设备需要实现的功能

hisi3559的ARM平台的PCIE目前不支持热插拔。

第2章 PCIE驱动增加

配置内核PCIE总线的支持

在内核的目录下:
osdrv/opensource/linux/linux-3.18.y$
执行make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig
hisi3559平台PCIE转USB调试_第1张图片
点击Bus support 进去
hisi3559平台PCIE转USB调试_第2张图片
以上的选项也是顺序出现的,依次选中即可。
目前到这边,继续往下看。
另外还有一个
PCI host controller drivers —>
没有选择,目前我的PCIE的芯片是免驱的,驱动是写在一个EEPROM中,需要提前烧录好

Hisilicon PCI Express support (NEW) —>
进去之后还有一些参数的配置,
hisi3559平台PCIE转USB调试_第3张图片
海思的文档中没有介绍,说让看
标准协议《PCI Express Base Specification Revision 2.1 》中 7.5 章节
先按照默认的,不行再修改。目前我们使用的是1G的DDR内存,海思默认的也是1G的内存。
RC(PCI Express root complex) 在RC模式时,使用PCIE类型1配置头;
EP(endpoint device)工作方式,在EP模式时,使用PCIE类型0配置头。

编译系统中有hotplug的选项,x86的系统才会支持hotplug,hisi3559 是ARM平台的,默认就没这个选项。

代码路径在:

drivers/pci/
与hisi平台相关的代码为:
drivers/pci/hipcie

Hisi3559硬件复用

3559平台的USB3.0和PCIE是复用管脚的。
通过外部设置的电平状态去确定。
COMBO_PHY_MODE
COMBO_PHY_MODE_1,
需要设置为00
即VO_DATA7 VO_DATA9 需要接下拉电阻。

软件查看复用状态:
SYSSTAT寄存器查看状态:0x008c 基址是 0x1202_0000
读取出来的值是正确的,设置的为PCIE状态。

PCIe 参考时钟管脚被设置成输出模式,需要将芯片 VO_DATA5 下拉

PCIE 的PCIE_CLK_REQ_N 需要设置管脚复用
复用寄存器为:0x120400A8
在pcie_hi3559.c中加入了管脚复用的配置,无需增加代码

io 空间不够的问题

遇到问题一:
提示
request_pcie_res->197
request io resource failed,io->start=0x28400000,io->end=0x283fffff
看起来是io 空间不够导致的。
默认的BSP包中没有配置IO_SPACE_LIMIT
在以下文件增加:
osdrv/opensource/linux/linux-3.18.y/arch/arm/include/mach/hi3559_io.h

#ifdef CONFIG_PCI
#define IO_SPACE_LIMIT  0xffffffff
#define __io(a)         __typesafe_io(PCI_IO_VIRT_BASE + ((a) & IO_SPACE_LIMIT))
#endif

要包含hisi3559的io配置
还必须要修改以下一个地方:
osdrv/opensource/linux/linux-3.18.y/arch/arm/mach-hisi/Kconfig
增加:

select NEED_MACH_IO_H if PCI

这样PCIE的卡就可以识别到了,
在板子上通过命令查看:

# lspci 
00:00.0 Class 0604: 19e5:3519
01:00.0 Class 0c03: 9710:9990
01:00.1 Class 0c03: 9710:9990
01:00.2 Class 0c03: 9710:9990
01:00.3 Class 0c03: 9710:9990
01:00.4 Class 0c03: 9710:9990
01:00.5 Class 0c03: 9710:9990
01:00.6 Class 0c03: 9710:9990
01:00.7 Class 0c03: 9710:9990

可以看到class ID了,0C03的类型表示:USB (Universal Serial Bus)

第3章 USB控制器驱动支持

MCS9990 是一颗PCIE转USB2.0的芯片,被识别成功后,会被当做一个USB host controller
那么需要系统有usb host的驱动。
需要增加的驱动如下:
hisi3559平台PCIE转USB调试_第4张图片
从Device Driver 进入
hisi3559平台PCIE转USB调试_第5张图片
把USB support 选* 然后进入
hisi3559平台PCIE转USB调试_第6张图片
如上图所示,把标示红线的选中
EHCI 的选项是USB 2.0的host驱动支持。
EHCI: Enhanced Host Controller Interface (用于USB2.0高速设备的“增强主机控制接口”) 编译完成后,会有以下的驱动文件:

usbcore.ko
ehci-hcd.ko
ehci-pci.ko
ehci-platform.ko
安装顺序如下:

insmod  usbcore.ko
insmod  ehci-hcd.ko
insmod  ehci-pci.ko
insmod  ehci-platform.ko

通过以下命令可以查看当前的usb设备

#lsusb 
Bus 003 Device 002: ID 0b95:772b
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0002
Bus 003 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0002
Bus 005 Device 001: ID 1d6b:0002

第4章 USB网卡的支持

Usb网卡AX88772的支持

hisi3559平台PCIE转USB调试_第7张图片
如上图所示
选择device driver 进入
hisi3559平台PCIE转USB调试_第8张图片

选中Network device support 为*
进入
hisi3559平台PCIE转USB调试_第9张图片
选中 USB Network Adapters 为M
进入

hisi3559平台PCIE转USB调试_第10张图片

选中划红线的3项,
海思平台的代码中默认支持ASIX AX88XXX系统的USB网卡
编译后会生成以下的几个驱动文件:
mii.ko
usbnet.ko
asix.ko
ax88179_178a.ko
执行 安装程序:

insmod mii.ko
insmod usbnet.ko
insmod asix.ko  
insmod ax88179_178a.ko

这个时候用ifconfig命令应该可以看到网卡了
剩下就是通过ifconfig来配置网络了。

配置网络

手动配置网络

配置ip地址和子网掩码

ifconfig eth0 192.168.1.101 netmask 255.255.255.0 up

设置缺省网关

route add default gw 192.168.1.1

网络自动启动设置

1.在usr/share/udhcpc/下增加一个default.script
这个文件在
osdrv/opensource/busybox/busybox-1.20.2/examples/udhcp/simple.script
重命名放入到usr/share/udhcpc/下即可
2.在bootapp自动启动时,增加以下命令:
ifconfig eth0 up
udhcpc
开机启动之后会自动获取IP和更新DNS。

在执行自动挂载USB网卡的时候:
出现了以下错误:
/usr/share/udhcpc/default.script: line 32: syntax error: you disabled math support for $((arith)) syntax
解决办法:
osdrv/opensource/busybox/minibusybox-1.20.2/config_v600_softfp_neon 增加以下两项支持即可:

CONFIG_SH_MATH_SUPPORT=y
CONFIG_SH_MATH_SUPPORT_64=y

关于热插拔的问题:

hisi3559的ARM平台的PCIE目前不支持热插拔。
USB网卡热插拔之后,能够识别到网卡,但是需要重新配网。
需要重新执行:

ifconfig  eth0 up
 udhcpc

第5章 USB U盘的支持:

依次进入
Device Drivers —>
USB support —>
hisi3559平台PCIE转USB调试_第11张图片
选中上图的 Mass Storage Support,
编译之后会生成:
usb-storage.ko

在前面已经安装了usb host驱动的前提下,
只要insmod usb-storage.ko
然后插入U盘就可以识别到了
查看 #ls /dev
有 sda
Sda1
两个文件,
通过mount挂载起来就可以看到U盘的内容了。

第6章 USB 鼠标,键盘的支持:

由于USB 鼠标,键盘是低速设备,因此需要添加
OHCI: Open Host Controller Interface (开放主机控制接口,USB1.0/1.1)的支持。
依次进入
Device Drivers —>
USB support —>
hisi3559平台PCIE转USB调试_第12张图片
选择上图中的两项,
编译后会生成
ohci-hcd.ko
ohci-pci.ko

首先 需要确保HID input layer支持和input core 支持
Hisi3559默认都是y,不需要用模块的方式来加载了。

增加usb hid鼠标键盘的支持:
依次进入
Device Drivers —>
HID support —>
USB HID support —>
hisi3559平台PCIE转USB调试_第13张图片
如上图所示,
选中3项,
进入到USB HID Boot Protocol drivers —>
选择:
hisi3559平台PCIE转USB调试_第14张图片
所有的两项。

加载驱动:

insmod  usbcore.ko
insmod  ohci-hcd.ko
insmod  ohci-pci.ko
insmod  usbhid.ko
insmod  usbkbd.ko
insmod  usbmouse.ko
cat /dev/input/event0 | hexdump

移动鼠标,然后终端就打印出你的鼠标坐标了。

你可能感兴趣的:(海思平台(hisi))