目录
概述
1 编译u-boot
1.1 解压文件
1.2 编译u-boot
2 配置环境
2.1 在Ubunt 搭建TFTP
2.2 建立下载目录
3 烧写bootloader到SD
4 使用NFS模式启动板卡
5 从EMMC 启动 Linux 系统
5.1 通过配置参数方式
5.2 使用命令直接启动内核
文中使用的代码下载地址:
【免费】atk-dl6y3c-build-uboot相关资料资源-CSDN文库
【免费】Ubuntu下裸机烧写软件-ATK-DL6Y2C资源-CSDN文库
概述
本文主要介绍使用编译ATK-DL6Y2C板卡配套的u-boot源码包( uboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2 ),交叉编译器版本为:gcc-linaro-4.9.4-arm-linux-gnueabihf。编译该代码包,并生成.bin文件,使用其提供的imxdownload功能将其下载到SD中,测试u-boot的命令,使用该u-boot通过NFS和EMMC启动Linux kernel。还简要介绍了NFS的搭建方法。
1 编译u-boot
1.1 解压文件
ATK-DL6Y2C使用的板卡标配u-boot代码包为:
tar -vxjf uboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2 -C atk_u_boot
解压之后,列出文件信息:
进入atk_u_boot目录中修改build.sh的执行权限,使用命令:
chmod 777 build.sh
1.2 编译u-boot
在编译u-boot之前,确保ubuntu中已经安装编译环境,安装编译环境的执行命令如下:
chmod u+x fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
安装完成编译环境后,进入atk_u_boot目录中,执行./build.sh 编译u-boot,执行命令之后:
编译完成后,在atk_u_boot/tmp目录下生成.bin文件
2 配置环境
2.1 在Ubunt 搭建TFTP
step-1: 安装xinetd,使用命令
sudo apt-get install xinetd
step-2: 执行以下程序安装 tftp-hpa 和 tftpd-hpa 服务程序 ,使用命令:
sudo apt-get install tftp-hpa tftpd-hpa
step-3: 执行以下指令打开 tftpd-hpa 配置文件,修改 tftp 目录为 TFTP 服务器工作目录。使用命令:
sudo vi /etc/default/tftpd-hpa
NFS的下目录为:/home/mftang/tftp
step-4: 执行以下指令创建/etc/xinetd.d/tftp 配置文件 ,使用命令:
sudo vi /etc/xinetd.d/tftp
添加如下代码:
server tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /home/mftang/tftp -c
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}
step-5: 修改/添加 tftp 文件后, 执行以下指令重启 tftpd-hpa。
sudo service tftpd-hpa restart
step-6: 重启 xinetd 服务。
sudo service xinetd restart
2.2 建立下载目录
使用如下命令创建目录,并修改目录的权限。
mkdir /home/mftang/tftp
chmod 777 /home/mftang/tftp
将编译生成的内核zImage和设备树文件.dtb文件,放到如下目录中。所需的文件如下:
3 烧写bootloader到SD
进入到bootloader的编译目录,使用如下命令烧写.bin文件:
./imxdownload u-boot-imx6ull-14x14-ddr512-emmc.bin /dev/sdb
如果没有任何提示错误,说明下载数据完成。
在板卡上将启动方式调至:SD启动模式
重新上电启动系统,u-boot已经工作了
4 使用NFS模式启动板卡
step 1:设置板卡ip
setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.11
saveenv
step-2: nfs 启动板卡:
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb; bootz 80800000 - 83000000'
运行结果:
执行上述命令后,板卡会从tftp下载内核zImage和设备树文件到内存,出现如下log:说明内核启动成功了
5 从EMMC 启动 Linux kernel
5.1 通过配置参数方式
配置参数
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 0x80800000 zImage; fatload mmc 1:1 0x83000000
imx6ull-14x14-emmc-4.3-480x272-c.dtb; bootz 0x80800000 - 0x83000000;'
saveenv
执行命令后,显示如下错误:
查询mmc中的内容:
ls mmc 1:1
结论:
根据文档《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81.pdf》page: 909 中提供的方法,无法正常启动内核。
5.2 使用命令直接启动内核
使用u-boot命令,从 EMMC 中读取 zImage 镜像文件和设备树文件 ,并启动内核。使用如下命令执行:
mmc dev 1
fatload mmc 1:1 0x80800000 zImage
fatload mmc 1:1 0x83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 0x80800000 - 0x83000000
启动内核之后,运行的log信息:
结论:
单独运行每一条命令,可以从EMMC中启动内核