hisi3559平台PCIE转USB调试(转)

hisi3559平台PCIE转USB调试(转

 版权声明:转载请注明出处。 https://blog.csdn.net/zhenglie110/article/details/80564906

第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 

 
点击Bus support 进去 
 

以上的选项也是顺序出现的,依次选中即可。 
目前到这边,继续往下看。 
另外还有一个 
PCI host controller drivers —> 
没有选择,目前我的PCIE的芯片是免驱的,驱动是写在一个EEPROM中,需要提前烧录好

Hisilicon PCI Express support (NEW) —> 
进去之后还有一些参数的配置, 

 
海思的文档中没有介绍,说让看 
标准协议《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

  • 1

这样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的驱动。 
需要增加的驱动如下: 

è¿éåå¾çæè¿° 
从Device Driver 进入 
 
è¿éåå¾çæè¿°
把USB support 选* 然后进入 

è¿éåå¾çæè¿°
 
如上图所示,把标示红线的选中 
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的支持

è¿éåå¾çæè¿° 
如上图所示 
选择device driver 进入 

è¿éåå¾çæè¿°

选中Network device support 为* 
进入 

è¿éåå¾çæè¿° 
选中 USB Network Adapters 为M 
进入

è¿éåå¾çæè¿°

 

选中划红线的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 —> 

è¿éåå¾çæè¿° 
选中上图的 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 —> 

è¿éåå¾çæè¿° 
选择上图中的两项, 
编译后会生成 
ohci-hcd.ko 
ohci-pci.ko

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

增加usb hid鼠标键盘的支持: 
依次进入 
Device Drivers —> 
HID support —> 
USB HID support —> 

è¿éåå¾çæè¿° 
如上图所示, 
选中3项, 
进入到USB HID Boot Protocol drivers —> 
选择: 

è¿éåå¾çæè¿° 
所有的两项。

加载驱动:

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值