Vrams Rock960c rk3399开发板,编译5.8.y内核后,nvme m.2接口不能用,这里有一个坑
我使用主线linux内核,dts源码地址:
https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3399-rock960.dts
这个文件就是设备树的源文件,它会被编译成linux kernel启动所需要的dtb,这个文件中有这样一句。
&pcie0 {
ep-gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_HIGH>;
};
这个是定义nvme即m.2接口的PCIE_PERST_L信号的。
源码定义了使用gpio2的pa2来控制这个信号
我对比了网上下载的rock960c的原理图,这个代码是正确的,是根据电路图的接线设计的。
然而,源码编译出来的dtb,m.2接口无法使用,识别不到任何设备,不能用。
所以我把vrams官方提供的ubuntu 16.04系统的dtb文件反编译成dts进行比对
发现了官方系统采用gpio4 pd3这个引脚来控制PCIE_PERST_L信号的
同时在vrams官方提供的ubuntu 16.04系统中,m.2接口功能是正常的。
所以,修改rk3399-rock960.dts为:
ep-gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>;
重新编译dtb
复制到开发板上
插电
开机
m.2接口功能可用了
用16gb英特尔洋垃圾傲腾测试
写入204MB/s
读取1.8GB/s
性能还不错呢!