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

鉴于Yocto的庞大,复杂 和 buildroot的相对那么不便捷,最近在考虑把Openwrt移植到i.mx6ul中,为后续开发带来更多的便捷性;

移植前的思考:

  1. 主要的稳定性来自于Kernel,因此Kernel需要使用NXP 官方的,最新的是4.1,Openwrt下载标准kernel然后打patch,不一定完全适用;
  2. Openwrt可以看成是制作文件系统的工具,帮助更方便的制作而已
  3. Openwrt支持OPKG包安装和卸载,方便调试和增量升级
  4. Uboot可以先不管,也没太大作用,仅仅引导系统和设定启动参数而已

使用LEDE的v17.01.2  release分支,其已支持imx6,因此我们在imx6基础上修改即可;主要是配置;

首先是cpu架构,原来的imx6是A9架构,i.mx6ul是A7架构,因此修改如下(git diff方式给出)

diff --git a/target/linux/imx6/Makefile b/target/linux/imx6/Makefile
index 5f7e17b..a7ac682 100644
--- a/target/linux/imx6/Makefile
+++ b/target/linux/imx6/Makefile
@@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mkARCH:=armBOARD:=imx6BOARDNAME:=Freescale i.MX 6
-FEATURES:=audio display fpu gpio pcie rtc usb usbgadget squashfs targz nand ubifs
-CPU_TYPE:=cortex-a9
-CPU_SUBTYPE:=neon
+FEATURES:=fpu gpio usb usbgadget targz nand ubifs
+CPU_TYPE:=cortex-a7
+CPU_SUBTYPE:=neon-vfpv4MAINTAINER:=Luka Perkov <luka@openwrt.org>
-
-KERNEL_PATCHVER:=4.4
+LINUX_VERSION:=4.1
+#KERNEL_PATCHVER:=4.4include $(INCLUDE_DIR)/target.mk

CPU_TYPE为A7,支持NEON指令集,裁剪部分不需要FEATURES,同时更改内核版本KERNEL_VERSION=4.1,因为使用的NXP官方的kernel,所以此处PATCH就不需要了

最基本参数的参数修改完毕后,因为使用4.1版本,因此还需.config文件,用来配置kernel编译选项。

Openwrt中的.config文件,是由两部分组成的,其一target/linux/generic/config-4.1,其二target/linux/imx6/config-4.1,编译过程中合二为一;此处我们为了方便,用target/linux/imx6/config-4.1 这一个文件即可; generic的4.1为空

target/linux/imx6/config-4.1 的内容填写NXP官方kernel中的arch/arm/configs/xxx_config即可,具体xxx对应你自己的板子;

Image编译配置:

因为我的板子是NAND Flash,使用UBIFS文件系统,Openwrt的Image编译位于target/linux/imx6/image/Makefile

在其中增加我们对应的板子配置即可;

 define Device/Default
-  PROFILES := Generic
-  FILESYSTEMS := squashfs ext4
+  PROFILES := imx6ull
+  FILESYSTEMS := ext4KERNEL_INSTALL := 1KERNEL_SUFFIX := -uImageKERNEL_NAME := zImage
@@ -69,56 +69,12 @@ define Device/DefaultIMAGES :=endef
+define Device/myr-imx6ull
+  DEVICE_TITLE := Myr myr-imx6ull
+  DEVICE_DTS := mys-imx6ull-14x14-evk-gpmi-weim
endef
TARGET_DEVICES += \
-       ventana ventana-large \
-       wandboard
+       myr-imx6ull
$(eval $(call BuildImage))

在此前,需要增加自己的板子配置,如我用的 target/linux/imx6/profiles/101-imx6ull.mk

#
# Copyright (C) 2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#define Profile/imx6ullPRIORITY:=1NAME:=imx6ull (default)
endefdefine Profile/imx6ull/DescriptionPackage set compatible with most Myr i.MX6ull  boards.
endef$(eval $(call Profile,imx6ull))

即menuconfig配置时,target会出现 imx6ull选项;

到此,针对Openwrt的改动基本可以说完毕了;后续就是改善NXP官方的Kernel配置,以适用Openwrt;

主要是开启modules动态加载;使用make kernel_menuconfig 配置即可;

因为是使用外置kernel,openwrt中的外部kernel tree配置如下:

 --- Advanced configuration options (for developers)                x x                   [ ]   Show broken platforms / packages               x x                   ()    Binary folder                   x x                   ()    Download folder                                          x x                   ()    Local mirror for source packages       x x                   [*]   Automatic rebuild of packages                                     x x                   ()    Build suffix to append to the target BUILD_DIR variable   x x                   ()    Override the default TARGET_ROOTFS_DIR variable        x x                   [ ]   Use ccache                                         x x                   (/home/wind/Openwrt_Proj/lede-for-imx6ul/myir-6ulx-kernel) Use external kernel tree  

Use external kernel tree,设定为你自己的路径即可;编译工具链就是用openwrt自编译生成的;

接着可以进行make V=s 开始编译了;

以下是编译过程中可能遇到的问题:

1. 编译netifd时遇到的 冲定义问题:redefinition of 'struct in6_addr'
解决办法:修改openwrt编译工具链,staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi/include/linux/if_bridge.h,替换#include <linux/in6.h>
                      为#include <netinet/in.h> 即可;
2. 无法生成文件系统:
注意openwrt板子配置,如上述的 target/linux/imx6/profiles/101-imx6ull.mk,与其配套的还有base-files/etc/board.d/02_network,base-files/lib/imx6.sh等板子led,eth配置相关,主要的还是image配置
3. Target Images配置;
 [*] ramdisk  --->                                                         x x                       *** Root filesystem archives ***     x x                   [ ] cpio.gz                                x x                   [*] tar.gz                              x x                       *** Root filesystem images *** x x                   [ ] ext4  ----                            x x                   [*] squashfs  --->                x x                   [*] ubifs  --->                  x x                       *** Image Options *** 

tar,ubifs,必须选上,因为要用,squashfs可不选,nand用不到;

4. 编译完后,bin下找不到升级文件
针对A7架构,openwrt编译完后,分为3个文件,其一zImage,其二dtb文件,其三文件系统
zImage位于外部内核路径的arch/arm/boot中,dtb文件即target/linux/imx6/image/Makefile中配置的DEVICE_DTS;
文件系统为lede-imx6-imx6ull-rootfs.tar.gz,如果格式不满足要求,可以解压后,再次压缩成想要的格式,针对ubifs升级,可以直接解压到nand中即可;
具体可以参考我另一篇博文

i.mx6ul 移植Openwrt相关推荐

  1. NanoPi M1 移植 OpenWRT

    NanoPi M1 是全志(Allwinner)H3的开发板. 但官方文档只有ubantu等系统的移植方法,而当前(2019年1月9日)最新OpenWRT里是不支持这个NanoPi M1的,仅仅支持N ...

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

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

  3. 移植OpenWrt到RT5350

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

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

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

  5. imx6ull移植openwrt

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

  6. hame RT5350移植OpenWrt

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

  7. openwrt RK3568_EVB移植

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

  8. openwrt移植到pb44---第一章(使用chaos_calmer)

    很久以前就打算移植openwrt到pb44上,现在手上有pb44的板子而且有空,所以果断开始移植.首先下载代码,make menuconfig选择pb44,编译下载. 下载命令这里记录下 load - ...

  9. 佐美人--arm32/64/openwrt文件系统移植

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

最新文章

  1. ASP.NET页面之间传值的方式之QueryString(个人整理)
  2. [转]#pragma once和#pragma comment
  3. mybatis的学习笔记01
  4. Flask的Debug功能非常酷
  5. Nginx使用brotli代替gzip
  6. idea启动日志在哪里_牛逼了!用 IDEA 扒出了开源组件导致FGC的原因
  7. 为什么学习前端的人越来越多?
  8. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解
  9. java制作qq自动回复,qq自动回复机器人-qq自动回复机器人 v1.6 电脑版
  10. 计算机共享文件夹拒绝访问权限,设置共享文件夹访问权限 拒绝访问的方法
  11. python输入个人所得税计算_Python实现的个人所得税计算器示例
  12. python3 subprocess.Popen监控控制台输出
  13. 苏州大学计算机科学与技术研究生院,苏州大学计算机科学与技术学院第十四届研究生代表大会...
  14. MySQL重做日志文件放在磁盘_重做日志文件
  15. 英语语法(1)——简单句
  16. Dynamics 365 New Feature之Rich Text Editor Control
  17. 利用Matlab进行灰色预测,利用matlab进行灰色预测.pdf
  18. 华为手机计算机删了怎么办,如何从华为手机恢复丢失或删除的文件
  19. 《龙武》9.15正式上线链游玩家平台 | 再续仙侠、血雨江湖
  20. 如何自学Python,需要多久?【建议收藏】

热门文章

  1. MapReduce流程(WordCount案例实现)
  2. JVM调优:运行参数,内存模型,mat、jps、jstat、jmap、jstack、jvisualvm工具的使用
  3. zk的数据目录:`version-2`
  4. CDH HUE集成yarn
  5. k8s查看节点CPU消耗情况
  6. golang跳转控制语句:goto语句示例
  7. Scala模式匹配:对象匹配
  8. python3数据类型:String字符串
  9. spring boot使用yaml替代properties
  10. Sublime Text shift+ctrl妙用、Sublime Text快捷组合键大全