1 更新uboot到EMMC
1.1 在uboot中更新uboot
将编译好的u-boot.imx拷贝到Ubuntu中的tftpboot目录下,然后在uboot命令行下执行以下命令
mmc dev 1 0 //切换到EMMC分区0 tftp 80800000 u-boot.imx //下载u-boot.imx到DRAM mmc write 80800000 2 32E //烧写u-boot.imx到EMMC中,因为u-boot.imx大小416768字节,416768/512=814个块,有小数的话需要再加1个块。要从SD卡分区第2个块(扇区)开始烧写。 mmc partconf 1 1 0 0 //分区配置,EMMC 需要这一步!
1.2 在电脑上通过SD卡更新uboot
1.1 将imxdown拷贝到工程目录下,也就是和u-boot.bin文件在同一个文件夹下
1.2 给予imxdownload可执行权限
chmod 777 imxdownload
1.3 电脑中插入sd卡(使用 ls /de/sd*来查看确认sd卡是sd多少)
ls /dev/sd*
1.4 烧写bin文件
./imxdownload u-boot.bin /dev/sdd
2 更新内核和设备树文件到EMMC
可以通过MfgTool来烧写到emmc或sd卡,或者使用uboot下的mmc write指令烧写到emmc或sd卡:
待补充。
3 uboot启动Linux的两种启动方式(通过bootz启动)
3.1 从EMMC启动
先将zImage文件和设备树文件保存到emmc中,详见第2节。
mmc dev 1 //切换到 EMMC fatload mmc 1:1 0x80800000 zImage //从EMMC读取zImage到DRAM的0x80800000处 fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb //从EMMC读取设备树到DRAM的0x83000000处 bootz 0x80800000 - 0x83000000 //启动 Linux
3.2 从网络启动
tftp 80800000 zImage //将tftp文件夹里面的zImage文件下载到开发板DRAM的0x80800000地址处 tftp 83000000 imx6ull-alientek-emmc.dtb //将tftp文件夹里面的imx6ull-alientek-emmc.dtb文件下载到开发板DRAM的0x83000000地址处 bootz 80800000 – 83000000 //启动
4 uboot启动Linux的两种启动方式(通过boot启动)
4.1 从EMMC启动
4.1.1 将zImage和设备树文件保存到EMMC中
待补充
4.1.2 设置bootargs和bootcmd环境变量
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000
imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
saveenv
4.1.3 启动内核
boot
或者
run bootcmd
4.2 从网络启动
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv
tftp 80800000 zImage:将tftp文件夹里面的zImage文件下载到开发板DRAM的0x80800000地址处
tftp 83000000 imx6ull-alientek-emmc.dtb:将tftp文件夹里面的imx6ull-alientek-emmc.dtb文件下载到开发板DRAM的0x83000000地址处
5、将根文件系统通过NFS挂载
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
<server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP地址,比如我的 Ubuntu 主机 IP 地址为 192.168.1.250。
<root-dir>: 根文件系统的存放路径,比如我的就是/home/mk-linux/nfs/rootfs。
<nfs-options>: NFS 的其他可选选项,一般不设置。
<client-ip>: 客户端 IP 地址,也就是我们开发板的 IP 地址, Linux 内核启动以后就会使用 此 IP 地址来配置开发板。
<server-ip>: 服务器 IP 地址。
<gw-ip>: 网关地址,比如 192.168.1.1。
<netmask>:子网掩码, 255.255.255.0。
<hostname>:客户机的名字,一般不设置,此值可以空着。
<device>: 设备名,也就是网卡名,一般是 eth0, eth1….,正点原子的 I.MX6U-ALPHA 开 发板的 ENET2 为 eth0, ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。 这里我们使用 ENET2,所以网卡名就是 eth0。
<autoconf>: 自动配置,一般不使用,所以设置为 off。
<dns0-ip>: DNS0 服务器 IP 地址,不使用。
<dns1-ip>: DNS1 服务器 IP 地址,不使用。
根据上面的格式 bootargs 环境变量的 root 值如下:
root=/dev/nfs rw nfsroot=192.168.1.250:/home/zuozhongkai/linux/nfs/rootfs ip=192.168.1.251: 192.168.1.250:192.168.1.1:255.255.255.0::eth0:off