概要
Passthrough是Android侧直接访问硬件,i2c、spi都可进行passthrough。本文以i2c和spi分别举例,介绍配置passthrough过程。
I2C passthrough
- qnx_ap/target/hypervisor/host/build_files/system.build.tmpl
Pass–passthrough
Loc–location
Mem:内存起始位,映射内存大小,起始读写位
第一行:对应设备树中QUP core(se2)
第二行:对应设备树中QUP number(se18)
Intr–中断 gic–中断号
注:上述信息需参考设备树文件。 - android/vendor/qcom/proprietary/devicetree/qcom/sa8155-vm-la.dtsi
将对应节点使能:
- pin_config.c
查找对应的GPIO号,看是否已经被使用,如果已经使用就在文件中注释掉。
参考设备树,将对应passthrough设备添加设备树中,并使能。
SPI passthrough
- qnx_ap/target/hypervisor/host/build_files/system.build.tmpl
与i2c中类似,参考设备树。 - android/vendor/qcom/proprietary/devicetree/qcom/sa8155-vm-la.dtsi
其中:
Compatibl=“qcom, spidev”自定义,与3中数组里的相对应。
Reg为地址
Spi-max…为最大频率
Spi-cpha为spi模式
Spidev_name 自定义名字
Spi区别于i2c,需要创建一个子节点。 - /kernel/msm-5.4/drivers/spi
.compatible与设备树中创建的节点对应上。 - Pin_config.c
查找对应的GPIO号,看是否已经被使用,如果已经使用就在文件中注释掉。
参考流程
- 找到system.build.tmpl文件
Path:/qnx_ap/target/hypervisor/host/build_files/system.build.tmpl - 查找其中配置pathrough的i2c SPI UART ,与端子定义书中的配置作对比,添加需要的信息,删除不要的信息。
其中Android端的设备需要配置passthrough,Qnx端不需要配置。 - 到 pin_config.c查找对应的GPIO号,看是否已经被使用,如果已经使用就在文件中注释掉。