嵌入式Linux-IMX6ULL开发环境配置

前言

正点原子的驱动开发指南所使用的是纯净的Ubuntu16.04平台,用户可以按照驱动开发指南的学习路线,一步一步地亲手把Ubuntu平台搭建完成。

但是学习正点原子Linux开发板,个人还是强烈推荐大家安装正点原子提供的虚拟机平台!!!!

可以快速进行体验或者开发,避免学习周期过长,导致学习没有兴趣,无法建立正反馈

平台内容

Ubuntu 系统:Ubuntu16.04

GCC 版本:5.4

教程通用交叉编译器:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf

出厂系统专用交叉编译器:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neontoolchain-4.1.15-2.1

QT 环境:开源版本 QT5.12.9、开源版本 QT Creator4.12.2

编辑器软件:Visual Studio Code、vim、gedit

网络工具:TFTP、NFS、Samba

以上软件都是开源版本,仅提供给有需要的用户学习使用,如有需要请自行购买商业版本软件。

开发环境

​ 软件:VMware Workstation Pro15.5 版本

​ 主机操作系统:WIN10。

​ 虚拟机系统:Ubuntu16.04 版本

虚拟机安装

虚拟机下载

网盘地址链接提取码:atkq

​ 在网盘里有四个 alientek_Qt.iso.xzp文件,分别以001、002、003、004为后缀,这里要下载这四个文件。

​ 如果链接失效了,可以在正点原子下载中心下载

镜像解压

​ 因为打包出来的虚拟机太大,百度云限制单个文件最大为4G,因此这里拆成了四个文件上 传到百度云。下载完成后,确保这四个文件都在同一文件夹下,选中这四个文件解压就可以了。下载解压软件7-Zip来进行解压,软件下载地址。将四个压缩文件全部选中右键,使用7-Zip提取到当前位置。
在这里插入图片描述

​ 最终得到了一个alientek_Qt.iso镜像文件(大约13G),这个就是我们后面要导入到虚拟机的镜像文件。iso文件可以不用和安装的ubuntu在同一个硬盘分区,也不建议放在移动磁盘或者U盘。

安装alientek虚拟机

​ 这一步请大家参考正点原子提供的文档手册:I.MX6U虚拟机使用参考手册V1.3

编译开发板出厂镜像

​ 在alientek进行中包含alientek-alphaalientek-zzk分别是出厂镜像和教程镜像,需要说明的是,出厂镜像是驱动配置完善的,可以学习Qt和应用。教程镜像是还没怎么添加驱动的,可以用于学习驱动开发,这里以出厂镜像为例哈~

在这里插入图片描述

​ 进入到alientek-alpha文件中,请注意:虚拟机自带的Uboot和内核源码版本比较低,如果有需要,请大家更新到最新的版本,前往正点原子下载中心,下载这个->【正点原子】阿尔法Linux开发板(A盘)-基础资料\01、例程源码\03、正点原子Uboot和Linux出厂源码,下载完成以后直接将文件拖入虚拟机对应文件夹就完成了版本更新

在这里插入图片描述

​ 如果有朋友不知道自己是不是最新的版本,请打开正点原子提供的*【正点原子】阿尔法Linux开发板(A盘)-基础资料\10、用户手册\01【正点原子】I.MX6U用户快速体验V2.6.pdf*,第1.2章节有对uboot、内核的历史版本进行说明。

编译出厂uboot

​ 首先去到出厂 uboot 源码路径下,这里以虚拟机自带的为例子。

cd ~/alpha/alientek-alpha/uboot-alientek 

​ 使能出厂交叉编译工具,并查看版本号。

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi arm-poky-linux-gnueabi-gcc --version 

​ 如果出现下图的arm-poky-linux-gnueabi-gcc(GCC)5.3.0,即表示当前终端已经使能出厂交叉编译工具,可以进行编译操作(注意:如果打开了新终端进行编译,也需要先使能。即使能后只有此终端下才生效,新终端无效,需要重新使能)。

​ 此时执行build.sh脚本即可开始编译出厂uboot源码。

./build.sh

​ 最终编译完成
在这里插入图片描述

编译出厂内核源码以及设备树

​ 首先去到出厂内核源码路径下,这里以虚拟机自带的为例子。

cd ~/alpha/alientek-alpha/kernel-alientek

​ 使能出厂交叉编译工具,并查看版本号。

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi arm-poky-linux-gnueabi-gcc --version

​ 如果出现下图的 arm-poky-linux-gnueabi-gcc (GCC) 5.3.0,即表示当前终端已经使能出厂交叉编译工具,可以进行编译操作(注意:如果打开了新终端进行编译,也需要先使能。即使能后只有此终端下才生效,新终端无效,需要重新使能)。

此时执行 build.sh 脚本即可开始编译出厂内核源码。

./build.sh

​ 最终编译完成。
在这里插入图片描述

uboot烧写与启动

​ 将uboot烧写到SD卡中,然后通过SD卡来启动来运行uboot。使用imxdownload软件烧写,命令如下:

chmod 777 imxdownload 		//给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot-imx6ull-14x14-ddr512-emmc.bin /dev/sdb  //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!

在这里插入图片描述

​ 等待烧写完成,完成以后将SD卡插到I.MX6U-ALPHA开发板上,BOOT设置从SD卡启动,使用USB线将USB_TTL和电脑连接,也就是将开发板的串口1连接到电脑上。打开MobaXterm,设置好串口参数并打开,最后复位开发板。在 MobaXterm上出现“Hit any key to stop autoboot: ”倒计时的时候按下键盘上的回车键,默认是3秒倒计时,在3秒倒计时结束以后如果没有按下回车键的话uboot就会使用默认参数来启动Linux内核了。如果在3秒倒计时结束之前按下回车键,那么就会进入uboot的命令行模式
在这里插入图片描述

网络挂载出厂镜像

​ 在正点原子提供的alientek虚拟机中,TFTP和NFS是已经搭载好的!所以可以直接使用,我们要做的就是配置虚拟机和开发板的网络,以及将重新编译的uboot、内核和设备树、文件系统重新添加到对应路径下

虚拟机网络配置

1、如图所示,单击桌面右上角的网络设置图标(若没有该图标是因为上一步的配置还未生 效,重启一下 ubuntu 即可),然后选择“Edit Connections…”
在这里插入图片描述

2、在弹出的对话框中单击“Add”添加一个新的连接
在这里插入图片描述

3、这里使用默认的“Ethernet”,然后单击“Create…” 、
在这里插入图片描述

4、如图所示,在弹出的对话框中先为新建的连接填写名字(随意),然后单击“IPv4 settings” 设置 IP 信息,将“Method”栏选为“Manual”,然后单击“Add”填写 IP 信息 因为我们使用的是桥接模式,所以 IP 信息需要参考 windows 下的设置,当前窗口先不 要关闭,切换到 windows 下查看 IP 信息
在这里插入图片描述
5、在 windows 下打开一个命令行终端,然后输入“ipconfig”查看 windows 下使用的网络 及 IP 信息(根据个人电脑情况,找到 windows 正在使用的网络连接的信息)
在这里插入图片描述
6、回到ubuntu下,如下图所示,根据windows下的IP信息填写ubuntu的IP信息

Address 设置成与 windows 下的“IPV4 地址”在同一个网段下的不同地址

​ 比如 windows 下的 IP 为“192.168.1.102”

​ 则将 ubuntu 下的 IP 设为“192.168.1.100”

Netmask 设置成与 windows 下的“子网掩码”一致

Gateway 设置成与 windows 下的“默认网关”一致

DNS servers 设置成与 windows 下的“默认网关”

在这里插入图片描述
​ 设置完成后单击“Save”保存,关闭对话框即可

7、刚刚添加的网络连接可能还没有生效,这里先断开原有连接,然后再选择刚刚建立的新的连接即可
在这里插入图片描述

开发板网络配置

​ 前提:开发板ENET2网线直连电脑。开机进入uboot命令行,设置开发板的网络信息,设置信息如下,用户请根据自己实际情况来设置:

setenv ipaddr 192.168.1.120 

setenv ethaddr 00:04:9f:04:d2:35 

setenv gatewayip 192.168.1.1 

setenv netmask 255.255.255.0 

setenv serverip 192.168.1.29 

saveenv ipaddr:

​ 开发板IP地址,根据实际情况填写,要和虚拟机在同一网段,且不发生 IP 冲突。

​ ethaddr:开发板网络设备地址,填写 00:04:9f:04:d2:35 即可。

​ gatewayip:开发板和 Ubuntu 局域网的网关,根据实际情况填写。

​ netmask:子网掩码。一般为 255.255.255.0。

​ serverip:虚拟机 IP 地址,根据实际情况填写。

​ 最后开发板能 ping 通虚拟机 IP 地址即可。

ping 192.168.1.29

在这里插入图片描述

总结一下就是:

电脑IP查看为:192.168.1.50

则虚拟机IP设置为:192.168.1.100

则开发板IP设置为:192.168.1.200

必须确保他们在同一个网段

TFTP 加载zImage和设备树

​ 正点原子虚拟机镜像中已经搭建好TFTP环境,TFTP 工作目录为~/linux/tftp/。如果想加载自己的镜像文件,只要将镜像文件和设备树拷贝到此目录下,赋予文件可执行权限即可,bootcmd 中设置对应的文件名。

​ 示例:在开发板 uboot 命令行中,设置 bootcmd 信息,用于引导网络挂载虚拟机里的文件。

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000' 
saveenv
如果要加载自己的镜像文件和设备树

​ 拷贝出厂内核到TFTP目录。

 cd ~/alpha/alientek-alpha/kernel-alientek/arch/arm/boot/  
 cp zImage ~/linux/tftp/

​ 根据自己开发板和屏幕的型号,拷贝对应出厂设备树到 TFTP 目录,这里本人使用的开发板为emmc版本,屏幕为7寸 1024x600分辨率的屏幕。如果没有屏幕,也选择这个设备树来启动。

cp dts/imx6ull-14x14-emmc-7-1024x600-c.dtb ~/linux/tftp

在这里插入图片描述

​ 启动开发板,在uboot界面设置bootcmd来引导启动挂载的出厂系统镜像。注意bootz中的-符号是英文的,两边各有一个空格。

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000'
saveenv

NFS 挂载出厂文件系统

​ 正点原子虚拟机镜像中已经搭建好NFS环境,NFS共享目录为~/linux/nfs/。如果想挂载自己的文件系统,只要将文件系统拷贝到此目录下,bootargs中设置对应的路径和文件名。

​ 示例:在开发板uboot命令行中设置bootargs信息,用于引导网络挂载虚拟机的文件系统。

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs \
 nfsroot=192.168.1.29:/home/alientek/linux/nfs/rootfs,proto=tcp rw \
 ip=192.168.1.120:192.168.1.29:192.168.1.1:255.255.255.0::eth0:off'
saveenv

设置完成后,执行boot指令可以启动挂载。

boot
如果要加载自己的出厂文件系统

拷贝出厂文件系统到NFS目录。

cd ~/alpha/alientek-alpha/ 

cp rootfs-alientek/ ~/linux/nfs/ -vr

拷贝完在NFS共享目录下有这个文件系统。
在这里插入图片描述
在uboot界面设置bootargs来引导启动挂载的出厂系统。

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs \ nfsroot=192.168.1.29:/home/alientek/linux/nfs/rootfs-alientek,proto=tcp rw \ ip=192.168.1.120:192.168.1.29:192.168.1.1:255.255.255.0::eth0:off' 
saveenv 
boot