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

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

hisi3559平台PCIE转USB调试(转)相关推荐

  1. hisi3559平台PCIE转USB调试

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

  2. Nvidia Xavier Nx平台PCIE速率调整调试记录

    1. 前言 如何增加最大速度的pcie上的jetson xavier? 因为被限制在2.5 GT/s Xavier似乎可以增加到8 GT/s. 使用Jetpack 4.5 0004:00:00.0 P ...

  3. Linux驱动PCIE转USB 3.0调试经验

    PCIE转USB 3.0芯片 μPD720202K8-701-BAA-A芯片,一个PCIE口转2个USB 3.0,主要用于USB口的扩展: 硬件电路 电路图 电路设计注意事项 RXD需要改为0欧电阻, ...

  4. PCIe实践之路:PCIe转USB Host驱动

    PCIe实践之路:PCIe转USB Host驱动 本次调试PCIe RC驱动,通过PCIe转USB芯片扩展出的USB口接入U盘.RC平台为ARM-A7,运行裸机环境,EP为一款PCIe转USB3.0芯 ...

  5. 飞腾S2500平台PCIe SWITCH下热插拔验证

    飞腾S2500平台PCIe SWITCH下热插拔验证 插拔前主板PCIe设备情况 对PCIe外设进行热插拔 对PCIe外设进行重新枚举,并分配资源 对新的PCIe外设进行功能测试 插拔前主板PCIe设 ...

  6. usb计算机连接无法连接电脑,如何用数据线连接计算机总是提示无法建立连接,并且USB调试已打开. -...

    您好,建议您更换数据线并再次进行测试. 感谢您的支持,祝您生活愉快! 尊敬的三星用户,您好!建议您按照以下步骤操作: 1. 在待机状态下,单击[取消]-[应用程序]-[开发]-[USB调试],单击复选 ...

  7. 华为C8650如何实现USB调试

    话说折腾这个USB调试有段时间了.怎么整都不行.这里是指Mac OS平台.windows平台可以略过不看. 那么这个Mac OS平台为什么不行呢?主要是因为华为的USB模式搞了个光盘加USB双模式,也 ...

  8. 华为C8650如何实现USB调试 另:网络调试

    [原帖:http://blog.fm618.net/2011/12/05/%E5%8D%8E%E4%B8%BAc8650%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0usb% ...

  9. 默认开启USB调试模式,不提示确认框

    device\sprd\sharkle\common\DeviceCommon.mk persist.sys.usb.config=adb//默认打开usb调试 SystemUI\src\com\an ...

最新文章

  1. linux把目录下的文件设置属性为rx,LINUX的文件属性与目录配置
  2. 特征选择--文本分类: 信息增益
  3. JS高效关键字搜索---转
  4. 年轻——塞缪尔.厄尔曼
  5. java listview控件_ListView普通列表控件的使用
  6. Filter的基本配置
  7. Hadoop Trash回收站使用指南
  8. EF学习笔记-2 EF之支持复杂类型的实现
  9. 英寸和厘米的交互python_Python新手尝试编写厘米到英寸的代码,反之亦然
  10. Java | Java模拟实现扑克牌洗牌、发牌过程
  11. windows 7 数据执行保护 开启关闭方法
  12. 【苹果家庭群发推】Metal performance shader软件安装框架
  13. 通过云打码实现验证码识别
  14. 蓝桥ROS机器人之现代C++学习笔记7.4 条件变量
  15. 数据库课程设计------书店管理系统
  16. 微信小程序之网易云音乐(五)- 排行详情页、歌单详情页、播放器组件开发
  17. 炉石传说酒馆战棋一键拔线(windows)
  18. RabbitMQ之交换机
  19. 让 图片 摇摆起来
  20. PHP API接口鉴权

热门文章

  1. Angular12报错:Cannot read property _rawValidators of null
  2. 2ubuntu系统通过有线网络共享无线网络
  3. 独立网站和互联网服务
  4. 计算机辅助建筑设计英文全称是,计算机辅助建筑消防安全设计,computer-aided building fire safety design,音标,读音,翻译,英文例句,英语词典...
  5. 大一上学期第十六周学习生活总结
  6. 计算机软件著作权取得方式,著作权取得主要有两种方式是什么
  7. 托大的鬼雄——项羽不肯过江东还是根本没机会过江东?(转)
  8. OpenStack Summit Vancouver 会议纪要
  9. 社交类APP原型模板分享——QQ
  10. 7月19日第壹简报,星期二,农历六月廿一