NanoPi M1 是全志(Allwinner)H3的开发板。
但官方文档只有ubantu等系统的移植方法,而当前(2019年1月9日)最新OpenWRT里是不支持这个NanoPi M1的,仅仅支持NanoPi NEO ,NanoPi M1 Plus。而 NanoPi M1 Plus 的 img是不适配 NanoPi M1板子的,烧录进去后会有如下报错(网口不通):

[   11.711019] NOHZ: local_softirq_pending 80
[   11.713159] dwmac-sun8i 1c30000.ethernet eth0: Could not attach to PHY
[   11.713169] dwmac-sun8i 1c30000.ethernet eth0: stmmac_open: Cannot attach to PHY (error: -19)
[   11.713775] stmmac_ethtool_get_link_ksettings: eth0: PHY is not registered
[   11.713790] br-lan: port 1(eth0) entered blocking state
[   11.713802] br-lan: port 1(eth0) entered disabled state
[   11.714135] device eth0 entered promiscuous mode
[   11.715509] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready

通过对比官方sdk,最终发现问题在于dts文件需要修改,修改之后网口正常工作。这里我从头到尾整理一下NanoPi M1 移植OenWRT的过程:

1.下载OpenWRT

 git clone https://github.com/openwrt/openwrt.git

2.添加target NanoPi M1

需要修改两个部分:u-boot 相关 , kernel 相关

2.1 u-boot 相关

OpenWrt Makefile 修改
1.package/boot/uboot-sunxi/Makefile

--- a/package/boot/uboot-sunxi/Makefile
+++ b/package/boot/uboot-sunxi/Makefile
@@ -138,6 +138,12 @@ define U-Boot/nanopi_m1_plusBUILD_DEVICES:=sun8i-h3-nanopi-m1-plus
endef+define U-Boot/nanopi_m1
+  BUILD_SUBTARGET:=cortexa7
+  NAME:=NanoPi M1 (H3)
+  BUILD_DEVICES:=sun8i-h3-nanopi-m1
+endef
+
define U-Boot/nanopi_neoBUILD_SUBTARGET:=cortexa7NAME:=U-Boot for NanoPi NEO (H3)
@@ -249,6 +255,7 @@ UBOOT_TARGETS := \Linksprite_pcDuino3 \Lamobo_R1 \nanopi_m1_plus \
+       nanopi_m1 \nanopi_neo \nanopi_neo_plus2 \nanopi_neo2 \

u-boot 源码修改

1.uboot-x/arch/arm/dts/Makefile 中添加

dtb-$(CONFIG_MACH_SUN8I_H3) += \sun8i-h2-plus-orangepi-r1.dtb \sun8i-h2-plus-orangepi-zero.dtb \sun8i-h3-bananapi-m2-plus.dtb \sun8i-h3-orangepi-2.dtb \sun8i-h3-orangepi-lite.dtb \sun8i-h3-orangepi-one.dtb \sun8i-h3-orangepi-pc.dtb \sun8i-h3-orangepi-pc-plus.dtb \sun8i-h3-orangepi-plus.dtb \sun8i-h3-orangepi-plus2e.dtb \
+       sun8i-h3-nanopi-m1.dtb \

2.添加 dts
+ arch/arm/dts/sun8i-h3-nanopi-m1.dts
3.添加 defconfig
+ configs/nanopi_m1_defconfig

2.2 内核相关:

1.OpenWrt Make file 修改

target/linux/sunxi/image/cortex-a7.mk

diff --git a/target/linux/sunxi/image/cortex-a7.mk b/target/linux/sunxi/image/cortex-a7.mk
old mode 100644
new mode 100755
index 969864b..92d2ef7
--- a/target/linux/sunxi/image/cortex-a7.mk
+++ b/target/linux/sunxi/image/cortex-a7.mk
@@ -139,6 +139,16 @@ endefTARGET_DEVICES += sun8i-h3-nanopi-m1-plus+define Device/sun8i-h3-nanopi-m1
+  DEVICE_TITLE:=FriendlyArm NanoPi M1
+  DEVICE_PACKAGES:=kmod-rtc-sunxi \
+       kmod-leds-gpio kmod-ledtrig-heartbeat \
+       kmod-brcmfmac brcmfmac-firmware-43430-sdio wpad-basic
+  SUPPORTED_DEVICES:=friendlyarm,nanopi-m1
+  SUNXI_DTS:=sun8i-h3-nanopi-m1
+endef
+
+TARGET_DEVICES += sun8i-h3-nanopi-m1define Device/sun8i-h3-nanopi-neoDEVICE_TITLE:=FriendlyARM NanoPi NEO

2.内核源码修改
+ dts
+ dts Makefile

修改完后,就可以在make menuconfig 中看到 NanoPi M1:如图:

3.内核添加dts补丁

内核的已有补丁是放在 target/linux/sunxi/patches-4.14/里的,make 的时候会自动安装里面所有的补丁,按照文件名开头数字从小到大顺序安装。
我这里是使用quilt 进行打补丁,quilt 使用方法可参考其他文章

3.0 安装并配置 quilt

apt-get install quilt
vi ~/.quiltrc

QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab --color=auto"
QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="vi"

3.1 准备内核源码

make target/linux/{clean,prepare} V=s QUILT=1

3.2 进入内核解压目录 & 安装已有补丁(patch)
openwrt 的所有要编译的包都解压在build_dir/target-xxx/目录下

cd build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-sunxi_cortexa7/linux-4.14.90/
quilt push -a

3.3 创建新patch

quilt new platform/999-nanopi-m1-emac.pacth

这里文件名数字999,也可以是其它,只要比已有补丁数字大就行,使用命令quilt series查看已有patch的列表。

3.4 修改 arch/arm/boot/dts/sun8i-h3-nanopi-m1.dts

quilt edit arch/arm/boot/dts/sun8i-h3-nanopi-m1.dts

在文件末尾添加这几行:

&emac {phy-handle = <&int_mii_phy>;phy-mode = "mii";allwinner,leds-active-low;status = "okay";
};

保存退出,可用 quilt diff 查看修改内容。

3.5 更新修改到patch文件

quilt refresh

此命令会将补丁保存到 patches/platform/999-nanopi-m1-emac.pacth

3.6 返回openwrt 目录 并保存patch文件到 target/linux/sunxi/patches-4.14/

cd ../../../../
make target/linux/update V=s

此命令会保存patch文件到 target/linux/sunxi/patches-4.14/

4.编译生成img.gz

make menuconfig

选好相关target,如下图:

make V=s -j9

编译成功后在 cd bin/targets/sunxi/cortexa7/ 目录下可以看见
openwrt-sunxi-cortexa7-sun8i-h3-nanopi-m1-ext4-sdcard.img.gz 文件
将这个文件解压得到
openwrt-sunxi-cortexa7-sun8i-h3-nanopi-m1-ext4-sdcard.img

5.将img 写入TF卡

TF接读卡器插入电脑:

dd if=openwrt-sunxi-cortexa7-sun8i-h3-nanopi-m1-ext4-sdcard.img of=/dev/sdx

/dev/sdx 根据实际情况来定,可通过命令dmesg | tail 查看,如看到 sdb: sdb1 sdb2,则是/dev/sdb
此命令有点耗时,请耐心等待命令完成

6.将TF卡插入NanoPi M1开发板

上电测试系统运行情况,网口识别正常。至此,移植成功!

root@OpenWrt:/# ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: seq=0 ttl=64 time=8.011 ms
64 bytes from 172.16.0.1: seq=1 ttl=64 time=7.594 ms
64 bytes from 172.16.0.1: seq=2 ttl=64 time=3.426 ms
64 bytes from 172.16.0.1: seq=3 ttl=64 time=3.228 ms
64 bytes from 172.16.0.1: seq=4 ttl=64 time=3.027 ms
64 bytes from 172.16.0.1: seq=5 ttl=64 time=2.879 ms
64 bytes from 172.16.0.1: seq=6 ttl=64 time=2.823 ms
64 bytes from 172.16.0.1: seq=7 ttl=64 time=6.544 ms
^C
--- 172.16.0.1 ping statistics ---
8 packets transmitted, 8 packets received, 0% packet loss
round-trip min/avg/max = 2.823/4.691/8.011 ms

总结:

NanoPi M1 移植 OpenWRT其实步骤很简单,首先是要添加tartget,只需要修改两个文件
1.package/boot/uboot-sunxi/Makefile
2.target/linux/sunxi/image/cortex-a7.mk b/target/linux/sunxi/image/cortex-a7.mk
添加对 NanoPi M1 的支持,这里其实完全按照NanoPi M1 Plus
然后是添加修改dts 文件,添加PHY的配置,这里需要打补丁。

NanoPi M1 移植 OpenWRT相关推荐

  1. NanoPi M1 Plus OpenWRT挂载NFS rootfs

    学习了韦东山老师的视频才知道可以通过设置内核启动参数来从NFS 挂载rootfs ,于是我在NanoPi M1 Plus 开发板上实际试了下,过程中也终于到一些问题,这里整理一下: 1.服务端要安装 ...

  2. 1.NanoPi M1(全志H3)基于wiringPi的GPIO控制总结

    开发环境:linux-3.4(开发板) 步骤: 1.安装WiringPi库: git clone https://github.com/friendlyarm/WiringNP cd WiringNP ...

  3. openwrt linux rootfs 分区表,arm盒子快速移植OpenWrt rootfs

    为了让不在OpenWrt项目支持列表中的ARM机器快速使用OpenWrt,可以用替换rootfs的简易方法进行移植. 首先,确保你的ARM盒子有能正常使用的Linux系统,并且最好有良好的社区支持,可 ...

  4. 移植OpenWrt到RT5350

    目录[-] 移植OpenWrt到CuHead Pro WiFi 安装编译OpenWrt系统所需要的软件包 下载OpenWrt 更新软件包 配置编译系统 原文见:http://my.oschina.ne ...

  5. i.mx6ul 移植Openwrt

    一直在使用Openwrt很多年,从路由到IOT终端,网关等,相对于其他开发环境或者厂家SDK来说,openwrt确实很便捷,其内部的Lua,ubox,ubus,rpc等一些机制,能在开发中带来很大的便 ...

  6. imx6ull移植openwrt

    目录 前言 硬件开发板 软件 编译构建 linux Module rootfs openwrt 制作烧录rootfs 烧录启动 前言 硬件开发板 韦东山imx6ull 软件 韦东山SDK Buildr ...

  7. i.mx6ul开发板移植openwrt系统

    首先准备: 1.搭建环境 ubuntu 14.04(必须是这个版本,其他的很可能会有错误) 2.i.mx6ul的内核源码我是放在ubuntu下的./home/ll/MYiR-iMX-Linux 目录下 ...

  8. hame RT5350移植OpenWrt

    参考: https://github.com/Squonk42/OpenWrt-RT5350?ref=commandbarr http://www.right.com.cn/forum/thread- ...

  9. openwrt RK3568_EVB移植

    openwrt RK3568_EVB移植 openwrt SDK下载 openwrt 编译 编译 操作: 整体编译操作: RK3568_EVB1_DDR4_V10 板子移植 kernel 部分的修改: ...

最新文章

  1. 【青少年编程】【答疑】控制Scratch异步代码的执行顺序
  2. smarty安装与配置
  3. zTree菜单的排序
  4. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版
  5. winserver的consul部署实践与.net core客户端使用(附demo源码)
  6. 【CF#706B】 Interesting drink (二分)
  7. 《集体智慧编程》笔记(1 / 12):集体智慧导言
  8. [HAOI2012]高速公路
  9. Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践
  10. SAP License:物料编码原则<多码还是一码>之一
  11. swagger怎么看接口数量_vue编写的功能强大的swagger-ui
  12. Tensorflow 搭建自己的神经网络(四)
  13. 四款常见IT自动化运维工具简单介绍-行云管家
  14. 新路由3鸡血版固件_新路由3 V1.1版本 刷lean源码开源驱动2.4G无线测试(EEPROM重新调试了)...
  15. mac 微信不能设置代理服务器,mac微信能用但是浏览器上不了网
  16. nios程序烧写到epcs方法
  17. 纯干货,dp和px,那些不得不吐槽的故事—Android平台图片文字元素单位浅析
  18. SQL Server Management Studio(SSMS)对象资源管理器的使用以及查询分析器的使用
  19. 用户密钥管理方案 密钥托管 授权托管
  20. 程序员讨论《黑客帝国》(一)真实与虚拟

热门文章

  1. java解析蓝奏云直连(解析真正文件地址)
  2. Chrome 设置主页无效一直是2345
  3. chrome设置默认首页无效
  4. android关闭听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
  5. 程序员七夕特刊,绝无狗粮添加剂
  6. 安卓眼球追踪_iPhone 11 Pro 可配合 Eyeware Beam 眼球追踪玩 PC 大屏游戏
  7. “穿搭速递”首页制作
  8. tracepro应用实例详解_腾讯云服务器计费模式包年包月、按量计费和竞价实例选择建议...
  9. windows远程桌面占用CPU的处理办法
  10. [答疑]举报卖家、举报买家还是举报