使用正点原子的uboot进行编译、烧录和启动
一、准备
编译uboot需要使用ncurses库,所以需要在Ubuntu下安装,否则编译会报错
sudo apt-get install libncurses5-dev
安装好后如下所示
二、获取uboot源码,进行编译
在Ubuntu 中创建~/imx6u_alpha/u-boot/atk_uboot
目录存放uboot源码,将正点原子资料包里【阿尔法Linux开发板光盘资料(A盘)–> 1、例程源码 --> 3、正点原子修改后的Uboot和Linux】目录下提供的uboot源码uboot-imx-2016.03-2.1.0-g9bd38ef-v1.0.tar.bz2
拷贝到此目录中,然后解压:
tar -vxjf uboot-imx-2016.03-2.1.0-g9bd38ef-v1.0.tar.bz2
解压后得到
编写一个脚本,对uboot进行编译,touch imx6ull_atk_uboot_emmc.sh
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2
然后修改其可执行权限,使其可执行
使用该脚本进行编译./imx6ull_atk_uboot_emmc.sh
编译完成后可以看到有u-boot.bin文件了
三、uboot 的烧写
uboot编译好了后就可以烧写到SD卡了,将正点原子提供的imxdownload
文件复制到工程目录下,使用imxdownlord软件烧写:
./imxdownload u-boot.bin /dev/sdb
烧写完成后将SD卡插到I.MX6U-ALPHA开发板后,设置从SD卡启动。
四、uboot 启动
在MobaXterm下新建串口会话,波特率设为115200,无硬件流控
然后可以看到uboot启动信息如下
对其输出信息进行分析
U-Boot 2016.03 (Feb 07 2020 - 11:37:25 +0800)
这是 uboot版本号和编译时间,可以看出当前的 uboot版本号是 2016.03,编译时间是 2020年1月7日11点37分CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 22C
这是 CPU 的信息,可以看出当前使用的CPU 是飞思卡尔的 I.MX6ULL,如果使用 528MHz 的 I.MX6ULL,此处会显示主频为528MHz。但是如果使用 800MHz 的I.MX6ULL 的话此处会显示69MHz,这个是uboot内部主频读取错误,但是不影响运行,可以不用管。不管是528MHz还是800MHz 的I.MX6ULL,此时都运行在396MHz。这颗芯片是工业级的,可以工作在-40°C~105°C。Reset cause: POR
复位原因的信息,当前的复位原因是 POR。I.MX6ULL 芯片上有个 POR_B 引脚,将这个引脚拉低即可复位 I.MX6ULL。Board: MX6ULL 14x14 EVK
板子名字,当前的板子名字为“MX6ULL 14x14 EVK”。I2C: ready
提示I2C 准备就绪。DRAM: 512 MiB
提示当前板子的DRAM(内存)为512MB。MMC: FSL_SDHC: 0, FSL_SDHC: 1
提示当前有两个 MMC/SD 卡控制器:FSL_SDHC(0)和 FSL_SDHC(1)。I.MX6ULL支持两个MMC/SD,正点原子的I.MX6ULL EMMC核心板上FSL_SDHC(0)接的 EMMC,FSL_SDHC(1)接的 SD(TF)卡。Display: ATK-LCD-7-1024x600 (1024x600)
显示 LCD 型号,当前的 LCD 型号是ATK-LCD-7-1024x600 (1024x600);
Video: 1024x600x24
分辨率为1024x600,格式为RGB888(24 位)。In: serial
Out: serial
Err: serial
标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。switch to partitions #0, OK
mmc0 is current device
切换到emmc的第0个分区上,因为当前的uboot是emmc版本的,也就是从emmc启动的。我们只是为了方便将其烧写到SD卡上,但是它的“内心”还EMMC的。所以uboot启动以后会将emmc作为默认存储器,当然了也可以将SD卡作为uboot的存储器。Net: FEC1
网口信息,提示我们当前使用的FEC1这个网口,I.MX6ULL支持两个网口。Normal Boot
提示正常启动,也就是说uboot要从emmc里面读取环境变量和参数信息启动Linux内核了
我们可以输入version
目录查看uboot版本相关信息
五、设置环境变量,连接到网络
和网络相关的几个环境变量
使用如下命令进行设置
setenv ipaddr 192.168.0.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.106
saveenv
dhcp命令
dhcp用于从路由器获取IP地址,前提得开发连接到路由器上的如果板是和电脑直连的,那么dhcp命令就会失效。直接输入dhcp命令即可通过路由器获IP地址。
可以看出,开发板通过dhcp获取到的IP地址为 192.168.1.100,和我们手动设置的不一样,这很正常。同时可能看到 “warning:no boot file name;”、“TFTP from server 192.168.1.102”这样的字样。是因为DHCP不单是获取IP地址,其还会通过TFTP来启动 linux内核,输入“ ? dhcp”即可查看dhcp命令详细的信息;
接下来我们测试使用ping
命令连接到Ubuntu,可以看到,ping通过了
这里要注意,如是ping命令连接Windows系统的话,大概率会失败。