NanoPi M4 Linux开启SPI
我使用的是NanoPi M4V2版本的硬件,从硬件和内核配置上看,对NanoPi M4同样适用。
NanoPi M4/M4V2硬件上支持SPI接口,其通过40PIN GPIO接口引出的是SPI1接口,从PIN脚定义上看,SPI1和UART4复用了收发PIN,而官方提供的Linux系统设备树使能的是UART4(对应设备/dev/ttyS4)而不是SPI1,要使用SPI接口,需要修改设备树配置,禁用UART4,启用SPI1。
搭建编译环境
参考官方文档:http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4V2/zh#.E6.90.AD.E5.BB.BA.E7.BC.96.E8.AF.91.E7.8E.AF.E5.A2.83
获取内核代码
参考官方文档:http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4V2/zh#.E7.BC.96.E8.AF.91_FriendlyCore.2FFriendlyDesktop.2FLubuntu.2FEFlasher.E7.9A.84.E5.86.85.E6.A0.B8.E6.BA.90.E4.BB.A3.E7.A0.81
修改内核配置
我的系统环境:
- 硬件:NanoPi M4V2,32G SD
- 系统:rk3399-sd-friendlydesktop-bionic-4.4-arm64-20211029.img
- 内核:分支:4.4.y(实际版本:4.4.179),commit:595acbae9d1e03e39d0ebbb22226b061f5682be7
UART4和SPI1的使能配置都在内核代码的arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi文件中,修改两处:
$ git diff
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi
index 72cf2d15..234058cd 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi
@@ -485,7 +485,7 @@};&spi1 {
- status = "disabled";
&#43; status &#61; "okay";pinctrl-names &#61; "default", "sleep";pinctrl-1 &#61; <&spi1_gpio>;&#64;&#64; -508,7 &#43;508,7 &#64;&#64;};&uart4 {
- status &#61; "okay";
&#43; status &#61; "disabled";};&vopb {
编译内核
参考官方文档&#xff1a;http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4V2/zh#.E7.BC.96.E8.AF.91_FriendlyCore.2FFriendlyDesktop.2FLubuntu.2FEFlasher.E7.9A.84.E5.86.85.E6.A0.B8.E6.BA.90.E4.BB.A3.E7.A0.81
更新SD卡
参考官方文档&#xff1a;https://github.com/friendlyarm/sd-fuse_rk3399
下载cd sd-fuse_rk3399&#xff0c;使用master分支&#xff0c;commit&#xff1a;3005b25b030b6c1ecd766183732f3874295bc2d9
从网盘下载制作SD卡镜像的各分区镜像文件friendlydesktop-arm64-images.tgz&#xff0c;
解压到sd-fuse_rk3399目录下&#xff1b;
将新编译的内核镜像&#xff08;kernel.img和resource.img&#xff09;复制到friendlydesktop-arm64目录下覆盖原文件&#xff1b;
执行命令制作sd卡镜像
sudo ./mk-sd-image.sh friendlydesktop-arm64
生成的镜像文件在out目录下&#xff0c;文件名rk3399-sd-friendlydesktop-bionic-4.4-arm64-yyyymmdd.img
如果想临时更新一下之前烧写过的SD卡进行测试而不重新烧写整个SD卡&#xff0c;可以删除friendlydesktop-arm64目录下除了编译kernel生成的两个镜像&#xff08;kernel.img和resource.img&#xff09;外的其他镜像文件&#xff0c;然后执行以下命令&#xff1a;
sudo ./fusing.sh /dev/sdX friendlydesktop-arm64
脚本运行时会跳过缺失的镜像文件&#xff0c;仅更新friendlydesktop-arm64目录下存在镜像的分区到SD卡&#xff0c;这样可以保留SD卡文件系统里的内容。
sd-fuse_rk3399里提供了一些脚本&#xff0c;用来编译各个分区的镜像&#xff0c;里面也包含了编译内核的脚本&#xff0c;如果除了需要更新内核镜像文件&#xff0c;还需要更新内核模块到文件系统或者更新内核相关的头文件&#xff0c;用这个脚本会更方便。
参考
- https://blog.csdn.net/u014096133/article/details/88642669
- http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4V2/zh
- https://github.com/friendlyarm/sd-fuse_rk3399