赞
踩
硬件平台:I.MX6ULL-ALPHA(Cortex-A7)
软件平台:Ubuntu 16.04
BootLoader版本:uboot 2016.03
Linux内核版本:4.1.15
根文件系统版本:busybox 1.29.0
下文所使用到的软件下载,提取码:rdw7
将电脑和开发板通过网线连接到交换机上,如下图所示:
注:如果使用的是正点原子的板子,需要连接到ENET2网口(上图板子的左侧网口),对应eth0。
VMWare选择桥接模式,方法如下:
在桥接模式中选择对应的有线网卡,如下图操作:
注【重要】:
1、非管理员身份打开,需要单击右下角的“更改设置”。
2、如果之前设置过“虚拟网络编辑器”,可以点击左下角的“还原默认设置”。
Windows的有线网卡IP、ubuntu的IP、开发板的IP,三个IP必须处于同一网段。
Windows的IP一般都是由路由器DHCP自动分配的,在cmd命令行执行:ipconfig
,查看它的IP。
注:为了防止IP频繁更改,可以将IP设置为固定IP,如下图所示:
Ubuntu的IP一般也是DHCP自动分配的,在命令行执行:ifconfig
,查看它的IP。
注:同windows一样,为了防止IP频繁更改,我们将IP设置为固定IP,如下图所示:
然后保存,关闭再打开网络连接即可。【需要提醒的一点,关闭再打开之后会看到子网掩码变成24,这是正常的】
注意:设置开发板的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
注:我的IP设置规律通常按照 PC/Ubuntu/板子 三者递增的方式,加入PC是 1,那么Ubuntu就是 2,板子就是 3。
为了不影响系统的正常运行,这里我们将windows和ubuntu防火墙全部关闭。
windows防火墙关闭方法如下:
依次打开:控制面板 -> 系统和安全 -> Windows Defender 防火墙
ubuntu防火墙关闭方法如下:
在终端输入:sudo ufw disable
即可关闭
在 uboot 中可以 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
在 uboot 中可以 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
在Ubuntu上安装SSH服务sudo apt-get install ssh
,通过FIleZilla工具,将网盘中的文件传输到Ubuntu中。
这里我在home目录下新建了一个linux
文件夹,把从网盘下载好的ATK_Test
文件夹传输到里面!
ATK_Test
一共有4个文件,如下图所示:
四个文件分别对应正点原子资料盘位置如下:
在 Ubuntu 中创建目录: /usr/local/arm
,命令如下:
sudo mkdir /usr/local/arm
创建完成以后将刚刚拷贝的交叉编译器复制到/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/
拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:
cd /usr/local/arm/
sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
修改环境变量,使用 vim 打开/etc/profile
文件,命令如下:
sudo vim /etc/profile
如果没有安装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
修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。
在使用交叉编译器之前还需要安装一下其它的库,命令如下:
sudo apt-get install lsb-core lib32stdc++6
首先查看一下交叉编译工具的版本号,输入如下命令
arm-linux-gnueabihf-gcc -v
如果交叉编译器安装正确的话就会显示版本号,如下图所示:
首先在 Ubuntu 中安装 ncurses 库, 否则编译会报错,安装命令如下:
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
将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/
接着执行./mx6ull_alientek_emmc.sh
脚本编译uboot源码,命令如下:
./mx6ull_alientek_emmc.sh
脚本内容如下:
#!/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
u-boot.bin 就是编译出来的 uboot 二进制文件,我们要将其烧写到SD卡中,操作方式和逻辑程序一样。
将SD卡通过读卡器插入到PC【注:SD卡一定要是FAT32格式】,并接入到Ubuntu下。
SD卡分区确定,只需在SD卡插入前后分别在Ubuntu终端输入ls /dev/sd*
,对比新出现的分区,即是SD卡对应的分区。
eg:我的SD卡插入Ubuntu后出现了/dev/sdb 和 /dev/sdb1,那么我的SD卡对应的烧写分区就是
/dev/sdb
./imxdownload u-boot.bin /dev/sdb
编译内核之前需要先在 ubuntu 上安装 lzop 库,否则内核编译会失败!命令如下:
sudo apt-get install lzop
将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
接着执行./mx6ull_alientek_emmc.sh
脚本编译uboot源码,命令如下:
./mx6ull_alientek_emmc.sh
出现图形界面配置,直接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
编译完成以后就会在目录 arch/arm/boot
下生成 zImage 镜像文件。在 arch/arm/boot/dts
目录下生成 imx6ull-alientek-emmc.dtb
文件。
tftp 命令是用于通过网络下载东西到 DRAM 中,使用的是 TFTP 协议。Ubuntu 主机作为 TFTP 服务器,因此需要在 Ubuntu 上搭建 TFTP 服务器。
首先需要安装 tftp-hpa
和 tftpd-hpa
,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
TFTP 需要一个文件夹来存放文件,在用户目录下新建一个目录并设置相应权限,命令如下:
mkdir /home/clay/linux/tftpboot
chmod 777 /home/clay/linux/tftpboot
最后配置 tftp,安装完成以后编辑文件/etc/xinetd.d/tftp
, 命令如下:
sudo vim /etc/xinetd.d/tftp
然后在里面输入如下内容:
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
}
完了以后启动 tftp 服务,命令如下:
sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa
文件,命令如下:
sudo vim /etc/default/tftpd-hpa
将其修改为如下所示内容:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/clay/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。
最后再输入如下命令, 重启 tftp 服务器:
sudo service tftpd-hpa restart
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/
接着在板子的uboot界面,依次输入如下命令:
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv
boot
正常启动界面如下图所示:
由于我们还未通过NFS挂载根文件系统,所以会出现Kernel Panic
的错误提示,如下图所示:
首先,执行以下命令安装 NFS 服务:
sudo apt-get install nfs-kernel-server rpcbind
TFTP 需要一个文件夹来存放文件,在用户目录下新建一个目录并设置相应权限,命令如下:
mkdir /home/clay/linux/nfs
chmod 777 /home/clay/linux/nfs
然后编辑/etc/exports
文件,添加 NFS 服务的工作目录:
sudo vim /etc/exports
添加 NFS 目录
/home/clay/linux/nfs *(rw,sync,no_root_squash)
最后,重启 NFS 服务:
sudo /etc/init.d/nfs-kernel-server restart
将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
接着在板子的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
bootargs内容格式参考如下:
setenv bootargs 'console=开发板串口,波特率 root=挂载方式 \
nfsroot=虚拟机 IP 地址:文件系统路径,proto=传输协议 读写权限 \
ip=开发板 IP 地址:虚拟机 IP 地址:网关地址:子网掩码::开发板网口:off'
如果是挂载 Ubuntu18 系统及更高版本的系统下的 nfs 共享目录, uboot 无法通过 nfs 启动 Ubuntu 系统内的共享目录。 需要在/etc/default/nfs-kernel-server
文件进行修改,改好了保存退出,然后重启一下 nfs 就可以了, 或者报错 Loading:*ww ERROR:File lookup fail
的也是按照下面的方法来解决
sudo vim /etc/default/nfs-kernel-server
按照上面截图改完后保存退出,再执行以下指令重启 nfs 服务。
sudo service nfs-kernel-server restart
如果当前在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
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。