• 正点原子Linux MINI板系统固化(烧录uboot、linux kernel、.dtb(设备树)和 rootfs)


    摘要:任何一个linux开发板都需要将uboot、linux kernel、.dtb(设备树)和 rootfs 这四个文件烧写到板子上的 EMMC、NAND 或 QSPI Flash 等其他存储设备上。也就是系统烧写之后才能进行后学的编程操作。

    注:其实完全可以不用编译uboot,直接烧录正点原子的uboot源码,这里编译了一下uboot学习,所以只是编译了uboot,其他的linux kernel、.dtb(设备树)和rootfs暂时就不编译了。

    一、编译uboot

    首先将uboot源码上传到ubuntu中进行编译。

    1、上传源码到ubuntu

    使用mobaterm的FTP登录ubuntu系统,将正点原子的uboot源码上传到ubuntu。

    源码路径为:开发板光盘->1、程序源码->3、正点原子 Uboot 和 Linux 出厂源码->uboot-imx-2016.03-2.1.0-gee88051-v1.6.tar.bz2

    将源码上传至ubuntu的/home/zhiguoxin/linux/IMX6ULL/uboot/目录下。/linux/IMX6ULL/uboot/是自己新建的文件夹。

    使用如下命令对其进行解压缩:

    tar -vxjf uboot-imx-2016.03-2.1.0-gee88051-v1.6.tar.bz2
    
    • 1

    解压完成以后文件夹内容如图 所示:

    2、编译uboot

    使用如下命令来编译对应的uboot:

    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- -j12
    
    • 1
    • 2
    • 3

    说明:

    这三条命令中ARCH=arm设置目标为 arm 架构,CROSS_COMPILE指定所使用的交叉编译器。第一条命令相当于make distclean,目的是清除工程,一般在第一次编译的时候最好清理一下工程。第二条指令相当于make mx6ull_14x14_ddr512_emmc_defconfig,用于配置 uboot,配置文件为mx6ull_14x14_ddr512_emmc_defconfig。最后一条指令相当于make -j12也就是使用12核来编译 uboot。

    当这三条命令执行完以后 uboot 也就编译成功了,会生成一个u-boot.imx的文件。

    可以看出,编译完成以后uboot源码多了一些文件,其中u-boot.bin就是编译出来的uboot二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行,图中的u-boot.imx文件就是添加头部以后的u-boot.binu-boot.imx就是我们最终要烧写到开发板中的uboot 镜像文件

    3、将源码下载到windows

    我们在ubuntu中生成的u-boot.imx文件需要复制到windows中,使用OTG固化系统。首先打开Mobatrem软件,将u-boot.imx文件下载到windows桌面上。

    4、使用mfgtool工具OTG方式固化系统

    正点原子提供两种固化系统方式,

    • 第一种方式是使用正点原子修改过的 NXP 官方的上位机工具mfgtool。这种固化系统方式可以使用 PC机在线直接固化系统。

    • 第二种方法需要制作 TF 卡系统卡,插卡的方式固化系统。这两种方法都有各自的好处。我现在使用的是第一种方式使用正点原子修改过的 NXP 官方的上位机工具mfgtool

    mfgtool\Profiles\Linux\OS Firmware\files\boot文件夹中的
    u-boot-imx6ull-14x14-emmc.imx文件替换成我们刚刚生成下载到windows的u-boot.imx文件,但是文件名需要重命名一下,必须是u-boot-imx6ull-14x14-emmc否则软件识别的不了。

    之后双击打开mfgtool文件夹下的Mfgtool2-eMMC-ddr512-eMMC.vbs文件(其他不需要的.vbs文件可以删除)。此时开发板必须接好电源线、USB-OTG线CH340串口线。并且要将拨码开关拨到USB位置。

    这时mfgtool工具会出现符合HD标准的供应商定义设备这几个字,如果没有请检查接线是否正确以及拨码开关是否拨码至USB档位。同时打开一个串口调试终端软件,可以观察在烧写系过程中的打印信息。

    点击“Start”按钮即可开始烧写,烧写什么东西呢?肯定是烧写 uboot、Linux kernel、.dtb 和 rootfs

    二、MfgTool 烧写的原理

    MfgTool 其实是先通过USB OTG先将uboot、kernel 和.dtb(设备树)这是三个文件下载到开发板的DDR中,注意不需要下载rootfs。就相当于直接在开发板的DDR上启动Linux 系统,等Linux 系统启动以后再向EMMC中烧写完整的系统,包括uboot、linuxkernel、.dtb(设备树)和 rootfs,因此MfgTool工作过程主要分两个阶段:

    • ①、将 firmware 目录中的uboot、linux kernel和.dtb(设备树),然后通过USB OTG将这个文件下载到开发板的DDR中,目的就是在DDR中启动Linux系统,为后面的烧写做准备。
    • ②、经过第①步的操作,此时Linux系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC的格式化、分区等操作。EMMC分区建立好以后就可以从files中读取要烧写的uboot、linux kernel、.dtb(设备树)和rootfs 这4个文件,然后将其烧写到EMMC中,这就是 MfgTool的大概工作流程。

    1、开始烧写

    这个时候可以在Mobaterm上看到具体的烧写过程:

    等待烧写完成,因为正点原子的根文件系统比较大,因此烧写的时候耗时会久一点。烧写完成以后 MfgTool 软件如图所示:

    烧写完成以后点击Stop按钮停止烧写,然后点击Exit键退出。拔出USB线,将开发板上的拨码开关拨到EMMC启动模式,然后重启开发板,此时就会从EMMC启动。只是启动以后的系统是正点院原子官方给I.MX6ULL ALPHA|MINI开发板制作的。(这个系统需要输入用户名,用户名为root,没有密码),如图所示:

    2、设置网络

    如上图所示新烧写的系统不支持网络,uboot 是支持网络的,我们在移植 uboot 的时候一般都要调通网络功能,因为在移植 linuxkernel的时候需要使用到 uboot的网络功能做调试。这时候给uboot添加网络相关的环境变量。

    setenv ipaddr 192.168.10.50 
    setenv ethaddr 00:04:9f:04:d2:35 
    setenv gatewayip 192.168.10.1
    setenv netmask 255.255.255.0
    setenv serverip 192.168.10.100 
    saveenv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP地址在同一个网段内,比如我现在的开发板和电脑都在 192.168.10.0 这个网段内,所以设置开发板的 IP 地址为 192.168.10.50,我的 Ubuntu 主机的地址为 192.168.10.100,因此 serverip 就是192.168.10.100。ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的 ethaddr 是不同的,否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。

    开发板的网络能否使用,是否可以和服务器(Ubuntu 主机)进行通信,通过 ping 命令就可以验证,直接ping服务器的 IP 地址即可,比如我的服务器 IP 地址为 192.168.10.100,命令如下:

    ping 192.168.1.250
    
    • 1

    将环境变量 bootdelay 改为 5,就是在启动内核之前倒计时时间为5s,进入uboot。

    setenv bootdelay 5
    saveenv
    
    • 1
    • 2

    3、设置静态 ip

    由于LAN8720 PHY网络芯片没有MAC地址,系统启动时会生成随机MAC地址给网络使用。每次都生成一个MAC地址,导致每次开机网络获取的ip不是固定的。所以我们要设置给它一个静态的ip,不因MAC地址的改变而改变,设置固定ip方法调试。开发板启动时会自动获取ip,最简单的方法是直接设置一个ip 给它。这样我们就可以直接使用这个ip 了。

    在出厂文件系统里/etc/rc.local 文件里如图位置添加以下文件。

    vi /etc/rc.local
    
    • 1

    添加以下内容,请根据个人使用的路由器,设置相应网段的ip地址。下图为设置eth0的静态ip 地址。

    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    ifconfig eth0 192.168.10.50 netmask 255.255.255.0
    route add default gw 192.168.10.1
    echo "nameserver 114.114.114.114" > /etc/resolv.conf
    
    • 1
    • 2
    • 3
    • 4

  • 相关阅读:
    Oracle集群管理-19C集群禁用numa和大页内存特性
    torch搭建神经网络(三)
    车载电子电器架构 —— 国产基础软件生态简介
    OpenCV 透视变换
    架构设计的五个核心要素
    C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
    NISP和CISP中的网络安全设备运维体系建设
    Typescript 函数类型详解
    07- 诊断事件diagnostic events的类图关系
    Go 项目配置文件的定义和读取
  • 原文地址:https://blog.csdn.net/qq_39400113/article/details/126819546