【IMX6UL开发板试用体验】OpenWRT在iMX6UL上面的移植与编译

选择

OpenWRT在最近的时期分裂出了LEDE出来,因此这就涉及到了这两个的选择。

前段时间,编译过LEDE用于树莓派3,于是想着直接使用以前的LEDE,这样子省去了下载,毕竟在国内下载很多source code可能需要很长的时间,如果没有proxy的话。于是想着省些事情就用起来了以前的LEDE来编译,但是编译过程中出现了很多错误, 因此最终我决定切回到OpenWRT,并且使用master上面新的代码来移植编译。

代码仓库: https://github.com/tonyho/OpenWRT_iMX6UL

OpenWRT配置

本身LEDE与OpenWRT里面已经有一个imx6 Cortex-A9的arch支持,因此直接选择这个为base来做Porting与Compile较为合适。配置如下:

Compile Tuning

因为imx6ul是Cortex-A7,所以我们需要更改一下

选择好Target之后,我们需要做移植工作。

Target移植

内核移植

移植需要将内核更改一把,这个位于:

$ ls target/linux/imx6/
base-files  config-3.14  config-4.4  files-4.4  image  Makefile  patches-4.4  profiles

其中config-XX是内核的.config文件,注意不要有modules,全部用builtin,否则将会出错。

然后patches-XX是对应内核的patches,我们不需要这些东西,所以不需要。

内核位置的指定


然后直接编译make即可。

编译的错误

1. DEPEND的问题

如果使用Prebuilt的toolchain可能会出现下面这个问题:

Package libnl-tiny is missing dependencies for the following libraries:
libc.so.6

那么就需要将libc.so添加到DEPENDS变量中。

2. 内核编译错误

内核比较老,但是GCC版本较高,会出现下面这个错误:

要解决这个问题,需要在内核的CFLAG中添加-fgnu89-inline

这个问题可以参考:

  http://unix.stackexchange.com/questions/250804/error-while-building-linux-kernel-for-versatile-board

3.内核编译的错误2

出现问题是因为我们没有正确的配置kernel module对应的item,但是因为我们暂时不需要,所以直接将其干掉即可:


4. 并发编译出错

一般都是因为make的时候指定-jN的N过大导致。

5. 环境编译问题

编译的时候出现:

一般是因为安装了gcp导致的,所以remove掉gcp即可。

编译的结果产物

位于bin下面:

这里面我们使用generic的rootfs即可。

然后我们使用zImage而不是uImage,这个位于:

build_dir/target-arm_cortex-a9+neon_musl-1.1.16_eabi/linux-imx6/zImage

dtb位于:

build_dir/target-arm_cortex-a9+neon_musl-1.1.16_eabi/linux-imx6/linux-3.14/arch/arm/boot/dts/imx6ul-14×14-evk.dtb

启动

将zImage与dtb拷贝到tftp directory,然后将rootfs解压到SD卡,使用SD卡作为rootfs。然后就可以使用下面这些命令来启动了。

启动后发现buzzer不停的叫着,显然这个是因为内核dts配置有问题, 因此我们先使用默认的kernel + dtb先启动,以后再继续更改内核。启动参数为:

启动后的log如下,放在下面为以后可能有需要的做对比和参照

 

Leave a Reply

Your email address will not be published. Required fields are marked *