NanoPi M1 移植 OpenWRT
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相关推荐
- NanoPi M1 Plus OpenWRT挂载NFS rootfs
学习了韦东山老师的视频才知道可以通过设置内核启动参数来从NFS 挂载rootfs ,于是我在NanoPi M1 Plus 开发板上实际试了下,过程中也终于到一些问题,这里整理一下: 1.服务端要安装 ...
- 1.NanoPi M1(全志H3)基于wiringPi的GPIO控制总结
开发环境:linux-3.4(开发板) 步骤: 1.安装WiringPi库: git clone https://github.com/friendlyarm/WiringNP cd WiringNP ...
- openwrt linux rootfs 分区表,arm盒子快速移植OpenWrt rootfs
为了让不在OpenWrt项目支持列表中的ARM机器快速使用OpenWrt,可以用替换rootfs的简易方法进行移植. 首先,确保你的ARM盒子有能正常使用的Linux系统,并且最好有良好的社区支持,可 ...
- 移植OpenWrt到RT5350
目录[-] 移植OpenWrt到CuHead Pro WiFi 安装编译OpenWrt系统所需要的软件包 下载OpenWrt 更新软件包 配置编译系统 原文见:http://my.oschina.ne ...
- i.mx6ul 移植Openwrt
一直在使用Openwrt很多年,从路由到IOT终端,网关等,相对于其他开发环境或者厂家SDK来说,openwrt确实很便捷,其内部的Lua,ubox,ubus,rpc等一些机制,能在开发中带来很大的便 ...
- imx6ull移植openwrt
目录 前言 硬件开发板 软件 编译构建 linux Module rootfs openwrt 制作烧录rootfs 烧录启动 前言 硬件开发板 韦东山imx6ull 软件 韦东山SDK Buildr ...
- i.mx6ul开发板移植openwrt系统
首先准备: 1.搭建环境 ubuntu 14.04(必须是这个版本,其他的很可能会有错误) 2.i.mx6ul的内核源码我是放在ubuntu下的./home/ll/MYiR-iMX-Linux 目录下 ...
- hame RT5350移植OpenWrt
参考: https://github.com/Squonk42/OpenWrt-RT5350?ref=commandbarr http://www.right.com.cn/forum/thread- ...
- openwrt RK3568_EVB移植
openwrt RK3568_EVB移植 openwrt SDK下载 openwrt 编译 编译 操作: 整体编译操作: RK3568_EVB1_DDR4_V10 板子移植 kernel 部分的修改: ...
最新文章
- 【青少年编程】【答疑】控制Scratch异步代码的执行顺序
- smarty安装与配置
- zTree菜单的排序
- SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版
- winserver的consul部署实践与.net core客户端使用(附demo源码)
- 【CF#706B】 Interesting drink (二分)
- 《集体智慧编程》笔记(1 / 12):集体智慧导言
- [HAOI2012]高速公路
- Spring Cloud 与微服务学习总结(16)—— 微服务架构统一安全认证设计与实践
- SAP License:物料编码原则<多码还是一码>之一
- swagger怎么看接口数量_vue编写的功能强大的swagger-ui
- Tensorflow 搭建自己的神经网络(四)
- 四款常见IT自动化运维工具简单介绍-行云管家
- 新路由3鸡血版固件_新路由3 V1.1版本 刷lean源码开源驱动2.4G无线测试(EEPROM重新调试了)...
- mac 微信不能设置代理服务器,mac微信能用但是浏览器上不了网
- nios程序烧写到epcs方法
- 纯干货,dp和px,那些不得不吐槽的故事—Android平台图片文字元素单位浅析
- SQL Server Management Studio(SSMS)对象资源管理器的使用以及查询分析器的使用
- 用户密钥管理方案 密钥托管 授权托管
- 程序员讨论《黑客帝国》(一)真实与虚拟
热门文章
- java解析蓝奏云直连(解析真正文件地址)
- Chrome 设置主页无效一直是2345
- chrome设置默认首页无效
- android关闭听筒模式,Android开发【06-29视频贴】切换听筒模式部分手机失效,怎么解决?...
- 程序员七夕特刊,绝无狗粮添加剂
- 安卓眼球追踪_iPhone 11 Pro 可配合 Eyeware Beam 眼球追踪玩 PC 大屏游戏
- “穿搭速递”首页制作
- tracepro应用实例详解_腾讯云服务器计费模式包年包月、按量计费和竞价实例选择建议...
- windows远程桌面占用CPU的处理办法
- [答疑]举报卖家、举报买家还是举报