当前位置:   article > 正文

【正点原子I.MX6ULL】一、Linux驱动开发环境搭建,初次体验开发全流程(必看)_i.mx6ull编译环境是什么

i.mx6ull编译环境是什么


硬件平台:I.MX6ULL-ALPHA(Cortex-A7)
软件平台:Ubuntu 16.04
BootLoader版本:uboot 2016.03
Linux内核版本:4.1.15
根文件系统版本:busybox 1.29.0

下文所使用到的软件下载,提取码:rdw7

一、Windows、Ubuntu和开发板的网络设置(桥接方式)

将电脑和开发板通过网线连接到交换机上,如下图所示:

在这里插入图片描述

:如果使用的是正点原子的板子,需要连接到ENET2网口(上图板子的左侧网口),对应eth0。

1.1、VMWare设置 - 有线网卡

VMWare选择桥接模式,方法如下:

在这里插入图片描述

在桥接模式中选择对应的有线网卡,如下图操作:

在这里插入图片描述

在这里插入图片描述

注【重要】
1、非管理员身份打开,需要单击右下角的“更改设置”。
2、如果之前设置过“虚拟网络编辑器”,可以点击左下角的“还原默认设置”。

1.2、三者IP设置

Windows的有线网卡IP、ubuntu的IP、开发板的IP,三个IP必须处于同一网段。

  • 设置Windows IP【192.168.2.104】

Windows的IP一般都是由路由器DHCP自动分配的,在cmd命令行执行:ipconfig,查看它的IP。

在这里插入图片描述

注:为了防止IP频繁更改,可以将IP设置为固定IP,如下图所示:
在这里插入图片描述

  • 设置Ubuntu IP 【192.168.2.105】

Ubuntu的IP一般也是DHCP自动分配的,在命令行执行:ifconfig,查看它的IP。

在这里插入图片描述

注:同windows一样,为了防止IP频繁更改,我们将IP设置为固定IP,如下图所示:
在这里插入图片描述

然后保存,关闭再打开网络连接即可。【需要提醒的一点,关闭再打开之后会看到子网掩码变成24,这是正常的】

  • 设置开发板IP(进入u-boot) 【192.168.2.106】

注意:设置开发板的IP之前,需要下载好U-boot并进入到开发板。【下载uboot过程见本文 第四部分 】

setenv ipaddr 192.168.2.106
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.2.1
setenv netmask 255.255.255.0
setenv serverip 192.168.2.105
saveenv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注:我的IP设置规律通常按照 PC/Ubuntu/板子 三者递增的方式,加入PC是 1,那么Ubuntu就是 2,板子就是 3。

1.3、ping测试

1.3.1、关闭windows和ubuntu防火墙

为了不影响系统的正常运行,这里我们将windows和ubuntu防火墙全部关闭。

windows防火墙关闭方法如下:

依次打开:控制面板 -> 系统和安全 -> Windows Defender 防火墙

在这里插入图片描述

在这里插入图片描述

ubuntu防火墙关闭方法如下:

在终端输入:sudo ufw disable 即可关闭

在这里插入图片描述

1.3.2、三者互ping

  • Windows ping Ubuntu

在这里插入图片描述

  • Windows ping uboot

在 uboot 中可以 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!

  • Ubuntu ping Windows

在这里插入图片描述

  • Ubuntu ping uboot

在 uboot 中可以 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!

  • uboot ping Windows

在这里插入图片描述

  • uboot ping Ubuntu

在这里插入图片描述

二、传输网盘文件到Ubuntu中

在Ubuntu上安装SSH服务sudo apt-get install ssh,通过FIleZilla工具,将网盘中的文件传输到Ubuntu中。

这里我在home目录下新建了一个linux文件夹,把从网盘下载好的ATK_Test文件夹传输到里面!

在这里插入图片描述

ATK_Test一共有4个文件,如下图所示:

在这里插入图片描述
四个文件分别对应正点原子资料盘位置如下:

  • gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
    • 5、开发工具\1、交叉编译器.zip
  • linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2
  • uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2
    • 1、例程源码\10、开发板教程对应的uboot和linux源码
  • rootfs.tar.bz2
    • 8、系统镜像\2、教程系统镜像\3、文件系统\1、busybox-1.29.0根文件系统

三、安装并配置交叉编译工具链

3.1、交叉编译器安装

在 Ubuntu 中创建目录: /usr/local/arm,命令如下:

sudo mkdir /usr/local/arm
  • 1

创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,命令如下:

cd /home/clay/linux/ATK_Test
sudo cp -rf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/
  • 1
  • 2

拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:

cd /usr/local/arm/
sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
  • 1
  • 2

等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

修改环境变量,使用 vim 打开/etc/profile 文件,命令如下:

sudo vim /etc/profile
  • 1

如果没有安装vim,可以使用如下命令安装:sudo apt-get install vim-gtk

打开/etc/profile 以后,按下G跳转到文件最后一行,加入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
  • 1

在这里插入图片描述

修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。

3.2、安装必要的库

在使用交叉编译器之前还需要安装一下其它的库,命令如下:

sudo apt-get install lsb-core lib32stdc++6
  • 1

3.3、交叉编译器验证

首先查看一下交叉编译工具的版本号,输入如下命令

arm-linux-gnueabihf-gcc -v
  • 1

如果交叉编译器安装正确的话就会显示版本号,如下图所示:

在这里插入图片描述

四、编译移植好的uboot,并烧写到开发板上

4.1、安装必要的库

首先在 Ubuntu 中安装 ncurses 库, 否则编译会报错,安装命令如下:

sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
  • 1
  • 2

4.2、编译uboot

ATK_Test文件夹下的uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2,拷贝到/home/clay/linux/uboot目录中并解压,命令如下:

cd /home/clay/linux/ATK_Test
mkdir /home/clay/linux/uboot
sudo cp uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2 /home/clay/linux/uboot
cd /home/clay/linux/uboot
tar -jxvf uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2
cd uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接着执行./mx6ull_alientek_emmc.sh脚本编译uboot源码,命令如下:

./mx6ull_alientek_emmc.sh
  • 1

脚本内容如下:

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make V=0  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
  • 1
  • 2
  • 3
  • 4

4.3、烧写uboot.bin

u-boot.bin 就是编译出来的 uboot 二进制文件,我们要将其烧写到SD卡中,操作方式和逻辑程序一样。

4.3.1、确定SD卡分区

将SD卡通过读卡器插入到PC【注:SD卡一定要是FAT32格式】,并接入到Ubuntu下。

SD卡分区确定,只需在SD卡插入前后分别在Ubuntu终端输入ls /dev/sd*,对比新出现的分区,即是SD卡对应的分区。

eg:我的SD卡插入Ubuntu后出现了/dev/sdb 和 /dev/sdb1,那么我的SD卡对应的烧写分区就是 /dev/sdb
在这里插入图片描述

4.3.2、烧写u-boot.bin到SD卡

./imxdownload u-boot.bin /dev/sdb
  • 1

在这里插入图片描述

五、编译Linux内核,设置u-boot环境变量,通过 tftp下载zImage和设备树文件

5.1、安装必要的库

编译内核之前需要先在 ubuntu 上安装 lzop 库,否则内核编译会失败!命令如下:

sudo apt-get install lzop
  • 1

5.2、编译 Linux 内核

ATK_Test文件夹下的linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2,拷贝到/home/clay/linux/linux目录中并解压,命令如下:

cd /home/clay/linux/ATK_Test
mkdir /home/clay/linux/linux
sudo cp linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2 /home/clay/linux/linux
cd /home/clay/linux/linux
tar -jxvf linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek.tar.bz2
cd linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接着执行./mx6ull_alientek_emmc.sh脚本编译uboot源码,命令如下:

./mx6ull_alientek_emmc.sh
  • 1

出现图形界面配置,直接Exit即可!(操作方式:方向键+回车)

脚本内容如下:

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
  • 1
  • 2
  • 3
  • 4
  • 5

编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-alientek-emmc.dtb 文件。

5.3、Ubuntu搭建TFTP服务器

tftp 命令是用于通过网络下载东西到 DRAM 中,使用的是 TFTP 协议。Ubuntu 主机作为 TFTP 服务器,因此需要在 Ubuntu 上搭建 TFTP 服务器。

首先需要安装 tftp-hpatftpd-hpa,命令如下:

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
  • 1
  • 2

TFTP 需要一个文件夹来存放文件,在用户目录下新建一个目录并设置相应权限,命令如下:

mkdir /home/clay/linux/tftpboot
chmod 777 /home/clay/linux/tftpboot
  • 1
  • 2

最后配置 tftp,安装完成以后编辑文件/etc/xinetd.d/tftp, 命令如下:

sudo vim /etc/xinetd.d/tftp
  • 1

然后在里面输入如下内容:

server tftp
{
	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/clay/linux/tftpboot/
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

完了以后启动 tftp 服务,命令如下:

sudo service tftpd-hpa start
  • 1

打开/etc/default/tftpd-hpa 文件,命令如下:

sudo vim /etc/default/tftpd-hpa
  • 1

将其修改为如下所示内容:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/clay/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。

最后再输入如下命令, 重启 tftp 服务器:

sudo service tftpd-hpa restart
  • 1

5.4、通过TFTP在线加载zImage和设备树文件

tftp 服务器已经搭建好了,接下来就是使用了。将 zImage 镜像文件和设备树文件拷贝到 tftpboot 文件夹中待在线加载使用,命令如下:

cd /home/clay/linux/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/arch/arm/boot
cp zImage /home/clay/linux/tftpboot/
cd /home/clay/linux/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/arch/arm/boot/dts
cp imx6ull-alientek-emmc.dtb /home/clay/linux/tftpboot/
  • 1
  • 2
  • 3
  • 4

接着在板子的uboot界面,依次输入如下命令:

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot
  • 1
  • 2
  • 3

正常启动界面如下图所示:

在这里插入图片描述

由于我们还未通过NFS挂载根文件系统,所以会出现Kernel Panic的错误提示,如下图所示:

在这里插入图片描述

六、设置u-boot环境变量

6.1、ubuntu安装配置 nfs

首先,执行以下命令安装 NFS 服务:

sudo apt-get install nfs-kernel-server rpcbind
  • 1

TFTP 需要一个文件夹来存放文件,在用户目录下新建一个目录并设置相应权限,命令如下:

mkdir /home/clay/linux/nfs
chmod 777 /home/clay/linux/nfs
  • 1
  • 2

然后编辑/etc/exports 文件,添加 NFS 服务的工作目录:

sudo vim /etc/exports
  • 1

添加 NFS 目录

/home/clay/linux/nfs *(rw,sync,no_root_squash)
  • 1

最后,重启 NFS 服务:

sudo /etc/init.d/nfs-kernel-server restart
  • 1

6.2、通过NFS在线挂载根文件系统

ATK_Test文件夹下的rootfs.tar.bz2,拷贝到/home/clay/linux/rootfs目录中并解压,命令如下:

cd /home/clay/linux/ATK_Test
mkdir /home/clay/linux/nfs/rootfs
sudo cp rootfs.tar.bz2 /home/clay/linux/nfs/rootfs
cd /home/clay/linux/nfs/rootfs
tar -jxvf rootfs.tar.bz2
  • 1
  • 2
  • 3
  • 4
  • 5

接着在板子的uboot界面,依次输入如下命令:

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.2.105:/home/clay/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.106:192.168.2.105:192.168.2.1:255.255.255.0::eth0:off'
saveenv
  • 1
  • 2

bootargs内容格式参考如下:

setenv bootargs 'console=开发板串口,波特率 root=挂载方式 \
nfsroot=虚拟机 IP 地址:文件系统路径,proto=传输协议 读写权限 \
ip=开发板 IP 地址:虚拟机 IP 地址:网关地址:子网掩码::开发板网口:off'
  • 1
  • 2
  • 3

附:高版本ubuntu安装配置NFS问题

如果是挂载 Ubuntu18 系统及更高版本的系统下的 nfs 共享目录, uboot 无法通过 nfs 启动 Ubuntu 系统内的共享目录。 需要在/etc/default/nfs-kernel-server 文件进行修改,改好了保存退出,然后重启一下 nfs 就可以了, 或者报错 Loading:*ww ERROR:File lookup fail 的也是按照下面的方法来解决

sudo vim /etc/default/nfs-kernel-server
  • 1

在这里插入图片描述

按照上面截图改完后保存退出,再执行以下指令重启 nfs 服务。

sudo service nfs-kernel-server restart
  • 1

七、启动开发板

如果当前在u-boot中,直接输入boot即可启动Linux系统,否则按下开发板的复位键即可。

开发板启动后如下图所示:

在这里插入图片描述

附录

setenv ipaddr 192.168.1.6
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.5

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.5:/home/clay/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.6:192.168.1.5:192.168.1.1:255.255.255.0::eth0:off'

saveenv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

公司

setenv ipaddr 192.168.2.161
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.2.1
setenv netmask 255.255.255.0
setenv serverip 192.168.2.160

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.2.160:/home/clay/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.161:192.168.2.160:192.168.2.1:255.255.255.0::eth0:off'

saveenv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号