一直在使用Openwrt很多年,从路由到IOT终端,网关等,相对于其他开发环境或者厂家SDK来说,openwrt确实很便捷,其内部的Lua,ubox,ubus,rpc等一些机制,能在开发中带来很大的便捷,而且功能也非常稳定;
鉴于Yocto的庞大,复杂 和 buildroot的相对那么不便捷,最近在考虑把Openwrt移植到i.mx6ul中,为后续开发带来更多的便捷性;
使用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.mk
ARCH:=arm
BOARD:=imx6
BOARDNAME:=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-vfpv4
MAINTAINER:=Luka Perkov
-
-KERNEL_PATCHVER:=4.4
+LINUX_VERSION:=4.1
+#KERNEL_PATCHVER:=4.4
include $(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对应你自己的板子;
因为我的板子是NAND Flash,使用UBIFS文件系统,Openwrt的Image编译位于target/linux/imx6/image/Makefile
在其中增加我们对应的板子配置即可;
define Device/Default
- PROFILES := Generic
- FILESYSTEMS := squashfs ext4
+ PROFILES := imx6ull
+ FILESYSTEMS := ext4
KERNEL_INSTALL := 1
KERNEL_SUFFIX := -uImage
KERNEL_NAME := zImage
@@ -69,56 +69,12 @@ define Device/Default
IMAGES :=
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/imx6ull
PRIORITY:=1
NAME:=imx6ull (default)
endef
define Profile/imx6ull/Description
Package 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 开始编译了;
[*] 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用不到;