【imx6ul】从头搭建imx6ul开发环境(uboot、内核编译及烧入、mfgtools详细使用方法)

article/2025/9/16 21:52:53

实现一个自制的Bootloader见:

01-基于imx6ul从0自制Bootloader专栏实现总结_【星星之火】的博客-CSDN博客

  • 硬件平台:自制imx6ul(详见【ALLEGRO】从零制作imx6-PCB核心板全流程_【星星之火】的博客-CSDN博客)
  • 系统:linux-4.1.15
  • 文件系统:busybox-1.22.1.tar.bz2
  • 编译器: gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) 
I.MX6ULL 系列是基于高性能、超低功率 ARM Cortex-A7核心 处理器,处理器运行速度高达 528 MHz。取代三星2440,慢慢成为国内流行的低端嵌入式linux产品的首选。本文 主要记录,拿到一款imx6如何重烧系统,搭建起开发环境。及mfgtools使用原理。

一、编译所需文件

(1)更新交叉编译工具链、
tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux  -C  /opt
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin"
(2)编译uboot
tar xvf MYS-IMX6UL-uboot.tar.bz2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mys_imx6ull_14x14_nand_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
uboot使用网络前:
setenv ipaddr 192.168.1.17
setenv ethaddr 00:0c:29:4d:e4:f4
setenv  gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.102
saveenv
(3)编译内核及设备树
tar -xvf MYS-IMX6UL-Linux.tar.gz
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mys_imx6_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules
(4)制作文件系统
imx6支持Yocto来构建我们所需的文件系统,这里我们使用网络文件系统即可。
setenv  bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.102:/work/new_work/rootfs_2440  ip=192.168.1.17:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttymxc0,115200
此时我们准备好了:u-boot.imx  、zImage、zImage-imx6ul-14x14-evk.dtb、文件系统等。如何烧写呢?此时就需要用到NXP提供的一个工具。这里重点介绍一下这个工具的操作细节。

二、mfgtools软件的使用方法

MFGTools 是  NXP 官方推荐的一个使用  OTG 来升级镜像的软件。此软件功能很轻大,而且可塑性非常高:可以用来升级  Linux,升级  Android;单独刷写某一系统分区,如  android 的  boot.img 分区等;独立地刷写  spi nor,emmc 等等;
1、几个重要的文件
(1)打开.vbs文件:如mfgtool2-yocto-mx-evk-nand.vbs
内容如下:
Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""NAND Flash""  -s ""board=sabreauto"" -s ""lite=l"" -s ""6uluboot=14x14evk"" -s ""nand=nand"" -s ""6uldtb=14x14-evk"" -s ""nanddtb=gpmi-weim"" -s ""part_uboot=0"" -s ""part_kernel=1"" -s ""part_dtb=2"" -s ""part_rootfs=3""   "
Set wshShell = Nothing
我们看到,这里相当于定义了一些变量。后面会用到这里定义的东西,如
""lite=l"" -s ""6uluboot=14x14evk"" -s ""nand=nand"。 一会会用到
(2)MfgTool.log
记录烧写过程中的信息,出错可以来查看
(3)重点关心的目录:
工具目录下有如下目录:Profiles\Linux\OS Firmware
目录里面存放着的是镜像文件,镜像文件分为两种:第一种是作为媒介用途的镜像(可以启动的 linux 的 uboot 和 dtb 以及 zImage),存放于 mfgtools\Profiles\Linux\OS Firmware\firmware 目录;第二种是真正烧录到  emmc 或者 nand 的镜像文件,存放于mfgtools\Profiles\Linux\OS Firmware\files 目录。之所以存着这两种镜像,是因为 s MFGTools 的烧写原理是先将媒介镜像下载到到 ddr3内存里面,然后启动linux,再通过这个启动的linux把目标镜像固化到 emmc或者 nand里。
(4)Profiles\Linux\OS Firmware\ucl2.xml
升级时候的操作文件,s MFGtools 会根据文件里面 t list 的内容进行相应的升级。文件以
 
<CMD state="BootStrap"type="jump" > Jumping to OS image. </CMD>
为界限,可以分为上阶段跟下阶段,上阶段是把“媒介镜像”烧录到  ddr3 3  内存里并运行起来,下阶段是烧录“ file”
文件夹里面的文件到  emmc 里面。对于第二阶段,关注以下注释:
 
<!- -- create partition - --> >
<!- -- burn uboot - --> >
<!- -- burn uImage - --> >
<!- -- burn dtb - --> >
<!- -- burn rootfs - --> >
注释下的内容严格规定了 s MFGTools 的烧录过程,分区-->烧写  uboot- --> >烧写  uImage- --> >烧写  dtb- --> >烧写  rootfs。
ucl2.xml是很重要的文件,但是里面内容很简单,用到了最初定义的那个,这里就不唠叨了。很显然,这个软件配置好了,功能是很强大的。
2、烧写过程(注意顺序不要改变)
(1)调节拨码开关(改变SOC模式)
(2)上电
(3)连接OTG与开发板和PC
(4)双击:mfgtool2-yocto-mx6ul-evk-nand.vbs启动烧入软件
(5)点击MfgTool界上的"Start"按钮,此时会安装目录中配置文件的信息,开始烧入。
三、tftp烧写
抛开这些花哨的软件,使用最原始的方法烧写内核、设备树、文件系统等:
内核启动有如下分区:
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000f00000 : "kernel"
0x000000f00000-0x000001000000 : "dtb"
0x000001000000-0x000010000000 : "rootfs"
//烧写内核
nand erase 0x500000 0xa00000   
tftp zImage  
nand write 0x80800000 0x500000 $filesize       
//烧写设备树
nand erase 0xf00000 0x100000   
tftp zImage-imx6ull-14x14-evk-gpmi-weim.dtb   
nand write  0x80800000  0xf00000 $filesize

总结:

到此我们可以实现mfgtools来烧写uboot及内核了。本人还是倾向于抛开这些工具,使用最通用的方法来烧写。
我们可以修改工具内的配置,使用这个工具只来更新uboot。之后我们可以通过nfs tftp等多种通用的方式来更新内核、设备树、及文件系统。

http://chatgpt.dhexx.cn/article/pskRaDTb.shtml

相关文章

飞思卡尔IMX6处理器的GPIO配置方式

在linux或android系统中&#xff0c;假如我们要配置飞思卡尔IMX6处理器的GPIO管脚&#xff0c;比如是GPIO_19这个管脚&#xff0c;那么要像这样&#xff1a; #define MX6Q_PAD_GPIO_19__GPIO_4_5 \(_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL))其中_MX6Q_PAD_…

迅为IMX6Q四核核心板商业级|工业级|IMX6Plus版本|IMX6D双核核心板

迅为IMX6Q核心板工业级/Plus版本 IMX6Q处理器&#xff1a;兼容单核&#xff0c;双核&#xff0c;工业级&#xff0c;汽车级&#xff0c;IMX6Q最新Plus版本&#xff0c;共用同一底板&#xff0c;高端产品无忧。 i.MX6系列针对消费电子、工业控制和汽车应用领域&#xff0c;它将…

imx6ull驱动开发经验

1、背景 imx6ull驱动开发基于正点原子的开发板&#xff0c;上面运行linux 4.1.15内核&#xff0c;根文件系统为ubuntu 16.05.5 LTS. 2、加载驱动文件chrdevbase.ko文件时&#xff0c;先使用depmod生成依赖文件时&#xff0c;提示无modules.order, modules.builtin无这两个文件…

【盘点】imx6的应用

导读: i.mx6系列应用处理器因其高性能&#xff0c;低功耗以及令人瞩目的多媒体功能等特性&#xff0c;被广泛运用于消费电子、工业以及汽车车载娱乐系统等新应用中。 今天为大家盘点一下启扬i.MX6嵌入式主板的部分实际应用。 以智能、多媒体为中心、基于触摸的设备市场正在迅速…

imx6 usb增强信号强度

USB信号 参考&#xff1a;官方文档 USB信号完整性取决于许多因素&#xff0c;如电路设计、PCB布局、堆叠和阻抗。每个产品可能彼此不同&#xff0c;因此客户需要微调参数&#xff0c;以获得最佳的信号质量。 测试板已经路由出两个USB端口:一个OTG1&#xff0c;一个主机。每个端…

iMX6ULL上手体验

CSDN仅用于增加百度收录权重&#xff0c;排版未优化&#xff0c;日常不维护。请访问&#xff1a;www.hceng.cn 查看、评论。 本博文对应地址: https://hceng.cn/2018/03/28/iMX6ULL上手体验/#more 第一次接触NXP/Freescale的SOC&#xff0c;记录拿到板子后快速上手的技巧和思维…

imx6ul 驱动详解

链表的知识&#xff1a; struct list_head { struct list_head *next, *prev; };API函数 函数 功能LIST_HEAD声明并初始化双向链表。INIT_LIST_HEAD初始化双向链表。list_add在链表头head节点后面插入一个新的节点new。list_add_tail在链表末尾tail节点后面插入一个新的节点n…

IMX6 / IMX8 系列芯片简单对比

imx6有&#xff1a; imx8 分为&#xff1a; IMX8/IMX8M/IMX8X三个系列 IMX8有&#xff1a;iMX 8qm 和 IMX8-QP IMX8M有&#xff1a;IMX8mn 、 IMX8mm 、 IMX8mq 、IMX8mp 3.IMX8X 有&#xff1a;iMX8dxp / iMX8qxp 和 iMX8dx

IMX6启动流程

目录 1. 流程图 2. u-boot.imx的构造 1. 流程图 正常情况下&#xff0c;一台IMX6设备的启动路径就是图中自上而下最左边那条路&#xff1a; 启动/复位后先检查CPU的ID(每颗芯片独一无二) ------> 检查复位状态(有没有按下复位键) ------> 检查boot模式(mmc? USB? SPI…

ARM恩智浦IMX6系列-产品开发无忧-四种主控核心

ITOP-IMX6 开发平台是基于 NXP 的 IMX6 系类的芯片开发的一款产品&#xff0c;CPU 采用 Cortex-A9 内核&#xff0c;主频达1Ghz。 ITOP-IMX6 开发板平台均由核心板和底板构成&#xff0c;核心板的主要芯片有 CPU,内存&#xff0c;EMMC&#xff0c;电源管理&#xff0c;EEPROM 等…

关于NXP公司的IMX6系列芯片参考资料体系介绍

IMX6系列芯片由FreeScale公司基于ARM核设计开发&#xff0c;该公司于2015年被NXP公司收购。之前由FreeScale提供支持的资源被整合进NXP支持体系&#xff0c;资料内部FreeScale和NXP的标记都有&#xff0c;文档内部原有资源链接失效&#xff0c;给人混乱感。加之IMX6系列芯片本身…

伺服电机矢量控制原理与仿真(1)控制系统的建立

自动控制原理综合实践 直流伺服电机及其控制为什么是六步换向法类比有刷直流电机类比三相异步电机这些差异意味着什么 从六步换向到FOCFOC的大体流程FOC的目的电流环的执行器&#xff1a;SVPWM 从物理走向数学直流伺服电机的数学模型&#xff08;正弦式&#xff09;从数学模型到…

台达PLC模拟量或台达伺服电机控制模块程序案例

台达PLC模拟量或台达伺服电机控制模块程序案例&#xff0c;二选一 ID:6958618562901252Anh13309639501 以下内容不属于本博内容&#xff0c;仅仅是相关参考&#xff1a; 台达PLC采用可以编制程序的存储器&#xff0c;用来在其部存储执行逻辑运算、顺序运算、计时、计数和算术运…

使用Arduino开发板控制伺服电机

大多数情况下&#xff0c;直流电机控制的控制方法都是非常简单的&#xff08;只需要连接电源和地&#xff09;。伺服电机有一些不同&#xff0c;它使用3根线连接&#xff08;电源、地和信号&#xff09;将电机移动到某个旋转位置。该位置由信号线上发送的信号决定。一旦电机到达…

步进伺服电机控制程序: 1.实现步进电机的正转、反转控制 2.相对和绝对位置运动

步进伺服电机控制程序: 1.实现步进电机的正转、反转控制 2.相对和绝对位置运动 3.电机复位找原点功能 4.显示电机的当前位置 硬件:1西门子S7-200PLC 2.昆仑通泰MCGS触摸屏 3.步进电机驱动器(不限制厂家) 西门子200步进电机控制 4810625077520119gao699592

三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序

三菱fx3u型PLC和昆仑通泰MCGS触摸屏控制松下伺服电机控制程序 一、包含内容&#xff1a; mcgs7.7触摸屏程序 2.三菱FX3U型PLC梯形图程序一个&#xff0c;带IO表 3.PLC和伺服电机接线图一个 4.伺服电机使用手册 二、主要功能&#xff1a; 1.伺服电机运动速度设定 2.伺服电机运动…

伺服电机

1.简介 伺服系统&#xff08;servomechanism&#xff09;是使物体的位置、方位、状态等输出被控量能够跟随输入目标&#xff08;或给定值&#xff09;的任意变化的自动控制系统。伺服主要靠脉冲来定位&#xff0c;基本上可以这样理解&#xff0c;伺服电机接收到1个脉冲&#xf…

机器人关节伺服电机PID串级控制

机器人的运动控制系统 通常由电机控制器、电机驱动、电机本体(多为伺服电机)组成。电机控制器具备智能运算功能&#xff0c;并可传送指令以驱动电机。驱动可提供增压电流&#xff0c;根据控制器指令以驱动电机。电机可以直接移动机器人&#xff0c;也可通过传动系统或链条系统…

机器人关节伺服电机三环控制方式

伺服电机&#xff08;servo motor &#xff09;是指在伺服系统中控制机械元件运转的发动机&#xff0c;是一种补助马达间接变速装置。 伺服电机可以控制速度&#xff0c;位置精度非常准确&#xff0c;可以将电压信号转化为转矩和转速以驱动控制对象。伺服电机转子转速受输入信…

CANOpen DS402伺服电机控制项目总结

公司的电机控制要统一到CANOpen上面来&#xff0c;协议栈用的CanFestival&#xff0c;配合RTThread进行控制。 要控制伺服电机&#xff0c;最先搞明白的就是控制字6040和状态字6041。一共使用过三个厂家的伺服电机&#xff0c;控制字都是一样的&#xff0c;但是状态字各家有自…