参考博文:i.mx6ul开发板移植openwrt系统_imx6ul openwrt-CSDN博客
i.mx6ul 移植Openwrt_imx6ull openwrt-CSDN博客
【IMX6UL开发板试用体验】OpenWRT在iMX6UL上面的移植与编译_imx6ul openwrt-CSDN博客
记录i.mx6ull(正点原子 mini版本 V1.7)上移植openwrt_正点原子 openwrt-CSDN博客
本文纯属个人娱乐,所用开发板为正点原子imx6ull emmc版开发板,屏幕为4.3寸 800*480 在移植openwrt之前应先按照教程将uboot和内核移植好。
在ubuntu搭建openwrt的开发环境
下载openwrt需要的依赖库
sudo apt-get install subversion g++ zlib1g-dev build-essential git python python3 libncurses5-dev gawk gettext unzip file libssl-dev wget libelf-dev ecj fastjar java-propose-classpath asciidoc bzip2 libz-dev libtool
下载openwrt源码
19.07地址https://github.com/openwrt/openwrt/archive/v19.07.2.tar.gz,下载好之后解压,然后进入源码顶层目录,假设目录名为openwrt,即cd openwrt
然后执行
./scripts/feeds update -a ./scripts/feeds install -a make defconfig make menuconfig
进去第一个Target System ---> 选择 (Freescale i.MX 6)
选择[*] Advanced configuration options (for developers) --->,然后进去,Toolchain Options --->选项,进去后如下图,
进入后选择glibc,保存退出
进入源码目录下,target/linux/imx6/目录,修改该目录下的Makefile
第一个,源Freescale i.MX 6平台是cortex-a9架构,我们i.mx6ul是cortex-a7架构
第二个,源Freescale i.MX 6平台不支持浮点型,我们i.mx6ul要支持浮点
第三个,源Freescale i.MX 6平台的linux内核是4.14版本,我们i.mx6ul是4.1.15版本,这里改为4.1就好。有说改为4.1.15会报错,我这里没有验证。改为4.1亲侧可用。
我们的在我们的内核源码目录下的arch/arm/configs也就是我的/home/book/linux-imx/arch/arm/configs目录下,找到自己开发板对应的xxxxx_defconfig,然后把这个文件名称修改为config-4.1(这里的4.1数字是要根上面的Makefile里面内核源码版本一样),并且拷贝到target/linux/imx6/目录下,并把原来的config-4.14删除。然后再删除target/linux/generic/下面的config-4.14文件。
编译外部内核
在 OpenWrt 构建系统中选择使用外部内核源代码树时出现以下这种情况
make[5]: Entering directory '/home/book/Desktop/books/linux_kernel/linux-imx' HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --silentoldconfig Kconfig * * Restart config...
解决方法:编译openwrt之前 先编译外部内核源码 因此在编译openwrt之前需要把改好的内核按照正点原子教程先编译好
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xxx_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs
编译openwrt
make V=1 -j8
编译问题
缺少文件,找不到文件。我们进入到对应的文件夹,把类似的文件拷贝一份改为它找不到的文件名字,这样就可以找到了。因为这些找不到的文件对我编译的内容不影响。
openwrt启动问题
1、rootfs在openwrt源码下bin/targets/imx6/generic-glibc/目录下 文件名为openwrt-imx6-default-rootfs.tar.gz,我们生成的是这个文件,具体最后需要的格式如果跟这个不一样,则需要对他先解压,再压缩成需要的格式。压缩命令如下:
sudo tar -cjf rootfs.tar.bz2 ./*
2、zImage在openwrt源码下build_dir/target-arm_cortex-a7+vfpv3-d16_glibc_eabi/linux-imx6/目录下,有个zImage文件
3、dtb文件在build_dir/target-arm_cortex-a7+neon-vfpv4_glibc_eabi/linux-imx6/linux-4.1/arch/arm/boot/dts/目录下,该目录下有好多个文件,我需要的是imx6ul-alientek-emmc.dtb。
TFTP 加载内核和设备数,NFS 挂载文件系统的方法行不通(可能是我网线连接的ENET2(eth0 fec1) 而这个网口被openwrt用作wan ENET2 不能up),改为通过固化整个系统到sd卡中,再从SD卡启动整个系统
使用脚本固化系统到SD卡
拷贝开发板光盘 A-基础资料->5、开发工具->4、正点原子 MFG_TOOL 出厂固件烧录工具->mfgtool->Profiles->Linux->OS Firmware->files 整个文件夹到 Ubuntu 虚拟机
chmod +x imx6mksdboot.sh
1.如果需要替换boot目录下的文件,替换的文件必须与boot目录下的文件同名==》将openwrt编译出的zImage和dtbs替换zImage和imx6ull-14x14-emmc-4.3-800x480-c.dtb
2.如果需要替换filesystem下的文件,替换的文件必须与filesystem目录下的文件同名==》将openwrt编译出的文件系统替换rootfs.tar.bz2
3.如果需要替换modules下的文件,替换的文件必须与modules目录下的文件同名
4.脚本烧写方式,可以拷贝files文件夹执行脚本直接烧写
5.mfgtool(OTG方式)烧写,直接选择mfgtool目录下的*vbs进行烧写系统
进入 files 目录后
sudo ./imx6mksdboot.sh -device /dev/sdb -flash emmc -ddrsize 512
按连接 TF 卡到 Ubuntu 的方法,再点击断开即可退出 TF 卡。固化完成后,将拨码开关拨至 TF 启动方式 10000010,成功启动系统
从打印log可看出eth0没有up 只有eth1 将网线换到ENET1口 ifconfig 192.168.10.24 可以ping通虚拟机,但是没有网页管理页面
解决方法make menuconfig 进入Luci选项卡-->进入Collections子选项卡-->选择luci-->保存退出,重新编译,重新烧录
ifconfig eth1 192.168.10.24
在电脑侧输入192.168.10.24进入管理页面
用户名:root 密码:admin