imx6ul_uboot移植
IMX6uboot的启动流程
IMX6uboot的启动流程⽹上看了后,做了个记录,主要是⼀个流程,具体代码没有分析,有空再细看。
cpu在上电之后,它们会⼲些什么?答:检查电压⼤⼩,确定启动模式等。
简单的检查之后呢?答:⼀般从固化在cpu内部的rom⾥⾯执⾏⼀⼩段code。
这⼀⼩段code具体做了些什么呢?各个cpu⼚商会不同,具体我也不知道。
但是我们应该知道,这⼩段code必须完成确认启动模式,并初始化启动设备,搬移烧录在启动设备⾥⾯的代码到ddr⾥⾯。
ok,搬移了代码后,cpu如何识别代码?将doc,txt⽂件烧进去⾏么?答:当然不⾏,烧录的⽂件也是有格式要求的。
格式在哪⾥定呢?稍等,先要知道⽣成的uboot.bin⽂件需要有个指导⽂件,就是uboot.lds,它的作⽤是在编译过程中,决定各个可执⾏程序段的位置。
其代码如下:1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")2 OUTPUT_ARCH(arm)3 ENTRY(_start)4 SECTIONS5 {6 . = 0x00000000;78 . = ALIGN(4);9 .text :10 {11/* WARNING - the following is hand-optimized to fit within */12/* the sector layout of our flash chips! XXX FIXME XXX */13 board/freescale/mx6q_sabreauto/flash_header.o (.text.flasheader)14 cpu/arm_cortexa8/start.o15 board/freescale/mx6q_sabreauto/libmx6q_sabreauto.a (.text)16 lib_arm/libarm.a (.text)17 net/libnet.a (.text)18 drivers/mtd/libmtd.a (.text)19 drivers/mmc/libmmc.a (.text)2021 . = DEFINED(env_offset) ? env_offset : .;22 common/env_embedded.o(.text)2324 *(.text)25 }2627 . = ALIGN(4);28 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }2930 . = ALIGN(4);31 .data : { *(.data) }3233 . = ALIGN(4);34 .got : { *(.got) }3536 . = .;37 __u_boot_cmd_start = .;38 .u_boot_cmd : { *(.u_boot_cmd) }39 __u_boot_cmd_end = .;4041 . = ALIGN(4);42 _end_of_copy = .; /* end_of ROM copy code here */43 __bss_start = .;44 .bss : { *(.bss) }45 _end = .;46 }View Code代码咱不分析,只看.text :{/* WARNING - the following is hand-optimized to fit within *//* the sector layout of our flash chips! XXX FIXME XXX */board/freescale/mx6q_sabreauto/flash_header.o (.text.flasheader)......}它的第⼀要存储的⽂件是flash_header的内容。
米尔i.MX6UL开发板Linux操作系统的构建方法
米尔i.MX6UL开发板Linux操作系统的构建方法硬件:米尔i.MX6UL开发板MYD-Y6ULX
简介:MYD-Y6ULX开发板(i.MX6UL开发板)由MYC-Y6ULX核心板和底板组成,基于 i.MX6UL处理器或i.MX6ULL处理器可选,MYD-Y6ULX开发板(i.MX6ULL开发板)提供丰盛外设硬件,板载了Mini PCIE接口(用于4G模块)及SIM卡槽、芯片及天线接口、双百兆网口、液晶接口、音频接口、带隔离的CAN,RS485,RS232等。
构建系统
本章主要介绍MYD-Y6ULX开发板上, 操作系统相关部件的编译和用法。
MYD-Y6ULX的Linux系统包含以下部件:
U-Boot: 引导程序,支持不同方式启动内核。
Linux Kernel: 适用于MYD-Y6ULX开发板的Linux 4.1.15内核,同时包含支持板载外设的驱动。
Yocto: 一个开源配合项目,提供丰盛的模板、工具和办法来支持构建出面对产品的自定义Linux系统。
本章中用到的代码存放在资源包04-Source名目下,编译u-boot和Linux内核代码前,请先安装meta-toolchain并加载环境变量到当前shell。
编译U-Boot
进入Bootloader名目,解压U-boot源码:
cd $DEV_ROOT/04-Source/
tar -xvf MYiR-iMX-uboot.tar.gz
cd MYiR-iMX-uboot
开头编译:
make distclean
make
make
这里的是配置选项名称,不同的启动模式需用法不同的配置选项,
第1页共13页。
iMX6ULL基础操作
iMX6ULL基础操作本文以飞凌嵌入式OKMX6ULL-S开发板为基础讲解,本文分为三个部分,主要讲解了iMX6ULL SD卡烧写系统及OTG烧写系统的以及单步更新内核的步骤。
通过本文您可以快速实现飞凌iMX6ULL开发板系统烧写。
一、 SD卡烧写系统以nand- sdburn为例,烧写NAND进行操作说明,飞凌iMX6ULL拨码开关设置参考如下。
设置拨码开关:烧写/启动序号1序号2序号3序号4序号5序号6SD卡烧写001010EMM C启动001000NAND启动000110OTG烧写11X X X X注意:上表中“1”代表ON,“0”代表OFF,“X”代表无关。
1、制作SD卡将文件nand-burnsd拷贝到Ubuntu 系统的任一目录,假设为/home/neo/work。
用户资料\Linux\烧录工具\nand-sdburn.zip 为256M NAND文件系统。
用户资料\Linux\烧录工具\ emmc-sdburn.zip 为4G EMMC文件系统。
步骤1:nand-burnsd.zip解压后拷贝到/home/neo/work。
步骤2:使用 USB 读卡器把SD 卡插入到电脑的USB 端口(VMware 虚拟机用户如果U盘没有被虚拟机识别,可以使用如下箭头指向图标将优盘连接到虚拟机)。
步骤3:待虚拟机识别到SD卡后弹出目录再进行下边烧写操作。
进入/home/neo/work/nand-burnsd目录,执行脚本:neo@ubuntu:~/work/nand-burnsd$ sudo ./6ullsdburn.sh执行上述命令后,终端会列出电脑的硬盘或U盘,对应选择自己的SD 卡,回车。
注意:判定自己的U盘是 sda/sdb/sdc 可以根据容量进行判断,比如自己的优盘容量为4G,则其size 为3872256 KB≈ 4G,建议用户执行此操作时不要同时插入多个优盘,以免混淆。
这里以我们的操作为例:选择 1 ,回车选择y,回车,等待至制卡完成。
uboot移植初步成功啦
uboot移植初步成功啦uboot移植初步成功啦哈哈,真高兴啊,就在晚饭前,终于在SDRAM中调试uboot1.4取得初步成功,晚饭后,就在写前,把uboot烧写到flash中,重启后,在超级终端中看到了正常显示,只是蜂鸣器一直想,哈哈,移植算是初步成功了,兴奋啊~~~ 明天再弄弄就可取得完胜了吧现在回过头来看uboot移植才发现,移植是这么滴简单,HOHO~~`先说说移植吧,代码上的移植:只是基于代码的改动,而不包括知道代码改动的背后~~移植的uboot版本为1.4版,用的编译工具链为arm-elf-。
不能用arm-linux编译,原因是用的c库不同。
简单的说就是arm-linux是为有MMU硬件单元的处理器配置的,如ARM9器件,而arm-elf-则是用于无MMU的cpu 的,如ARM7。
(也试了一下,用arm-linux-编译得到的uboot.bin加载到SDRAM中运行后无显示)。
arm-elf-gcc 版本为2.93版本的(有点低,还需要修改cpu\s3c44b0\config.mk,后面提到)。
在uboot1.4版本中符合s3c44b0内核的板子为dave\B2板,移植就是基于该板子的,当然实际板子有很多硬件情况与它不同,需要修改。
现在就分别讲讲所要修改的文件和具体修改吧:"uboot\"表示uboot的根目录uboot\Makefile:在uboot中,默认的编译器为arm-linux-,所以首先要修改的就是把编译器改为arm-elf-:ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux- endif只需要把arm-linux-改为arm-elf-就行同时,要增加自己的板子在Makefile中的配置:B2_config : unconfig@./mkconfig $(@:_config=) arms3c44b0 B2 dave该句增加了B2板子在Makefile中的配置,其中向编译器传递了四个参数:cpu体系cpu类型板子公司可仿造该板子增加自己板子的设置,其中板子和公司可自取,为了文件,都取为44b0,增加配置如下:44b0_config:unconfig@./mkconfig $(@:_config=) arm s3c44b0 44b0 44b0uboot\board:该文件夹放置了所有uboot支持的板子。
uuboot 移植流程
uuboot 移植流程U-Boot 移植流程介绍U-Boot是一个开源的引导加载程序,常用于嵌入式系统中。
移植U-Boot可以将其适配到不同的硬件平台上,以满足特定需求。
本文将详细说明U-Boot移植的流程。
准备工作1.硬件选型:根据项目需求,选择适合的硬件平台。
2.获取源代码:从U-Boot官方网站或仓库下载最新版本的源代码。
3.安装交叉编译工具链:根据目标硬件平台的指令集架构,选择合适的交叉编译工具链,并进行安装。
4.了解目标硬件平台:熟悉目标硬件平台的架构、引导方式、存储器布局等相关信息。
移植流程1.配置编译环境:设置交叉编译工具链的环境变量,以确保正确编译U-Boot源代码。
2.配置U-Boot:修改U-Boot源代码中的配置文件,根据目标硬件平台的特性和需求进行相应配置。
–配置目标硬件平台的处理器类型、存储器布局等基本信息。
–配置启动方式,如通过网络(TFTP)或存储介质(SD卡、NAND Flash)等进行启动。
–配置启动流程,如引导加载程序的加载顺序、启动脚本等。
3.添加适配代码:根据目标硬件平台的需求,编写适配代码,包括引导加载程序和设备驱动等。
–引导加载程序:为目标硬件平台选择合适的程序入口点,配置启动参数,加载适配的设备驱动等。
–设备驱动:根据目标硬件平台的外设,编写相应的设备驱动代码,以支持外设的初始化和操作。
4.编译U-Boot:使用交叉编译工具链,编译修改后的U-Boot源代码。
–执行make clean清除之前的编译结果。
–执行make命令编译U-Boot源代码。
5.烧录和运行:将编译生成的U-Boot镜像烧录到目标硬件平台,并进行测试。
–根据目标硬件平台的烧录方式(串口、JTAG等),将U-Boot镜像烧录到目标设备。
–启动目标设备,观察U-Boot的启动信息是否正常输出,检查设备驱动是否正常加载。
6.调试和优化:根据实际情况,进行U-Boot的调试和性能优化。
–使用调试工具进行调试,如调试器、串口打印信息等。
UBoot移植详解
u-boot 移植步骤详解1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
正点原子imx6ull操作手册
正点原子imx6ull操作手册:深度与广度兼具的全面评估一、简介正点原子imx6ull是一款基于ARM Cortex-A7架构的嵌入式处理器,具有低功耗、高性能和丰富的外设接口。
其操作手册是使用该处理器的重要参考文档,能够帮助开发者深入了解其特性和功能,从而更好地应用于实际项目中。
二、硬件特性正点原子imx6ull处理器集成了丰富的外设接口,包括多个串口、SPI、I2C、USB等,为开发者提供了丰富的硬件资源,满足各种应用场景的需求。
其低功耗特性也使得它在电池供电的嵌入式系统中有着广泛的应用。
三、软件支持正点原子imx6ull处理器支持多种操作系统,包括Linux、Android等,同时也提供了丰富的驱动和示例代码,方便开发者快速上手并进行应用开发。
其丰富的软件支持为开发者提供了便利,使得开发工作更加高效。
四、应用案例正点原子imx6ull处理器在物联网、智能家居、工业控制等领域有着广泛的应用,为各种智能设备的核心处理器。
通过深入学习其操作手册,开发者可以更加深入地了解其特性和功能,为项目开发提供更多可能性。
五、个人观点通过撰写这篇文章,我对正点原子imx6ull操作手册有了更深入的了解,深度和广度兼具的信息让我对这款处理器有了更全面的认识。
其丰富的硬件特性和软件支持为开发者提供了极大的便利,同时其广泛的应用场景也使得它成为一款非常值得开发者深入学习和应用的处理器。
总结与回顾通过深入撰写这篇文章,我对正点原子imx6ull操作手册有了更深刻的理解,它的硬件特性、软件支持以及应用案例都使我对其有了更全面的认识。
我相信这样的深入学习对我未来的应用开发工作将会有着积极的影响。
结语正点原子imx6ull操作手册是一份非常有价值的文档,深度和广度兼具的内容使得开发者可以更加全面、深刻和灵活地理解其特性和功能,为项目开发提供了极大的便利。
我希望通过撰写这篇文章,能够帮助更多开发者深入了解并应用这款处理器,从而推动物联网和智能设备领域的发展。
uboot移植心得
最近跑完裸机之后,便开始跑系统,但想着裸机与系统之间隔着个Bootloader,反正以前也没怎么深入研究,便说花一到两周时间来搞搞U-BOOT。
参考了fzb和赵春江两位大牛的,也研究了2010.06版本的和2011.06版本两个经典版本,也对比了TQ(我买的板是天嵌的)自己写的U-BOOT,学到了不少,也发现了很多东西,以下便记录以下自己的心得吧,以便以后可以自己参考下。
U-BOOT的两个阶段启动过程:(2010.06经典版来说)第一阶段:start.S的路径位于arch\arm\cpu\arm920t\这段汇编代码一般被称作第一阶段初始化代码。
主要作用是初始化运行环境;初始化内存;重新放置UBOOT代码到内存中;跳入到内存中执行第二段初始化代码1、关闭开门狗,屏蔽所有中断2、设置分频比3、bl cpu_init_crit() 关MMU,初始化内存bl lowlevel_init() 配置内存,修改内存刷新率参数等4、relocate判断当前代码是在NORFLASH还是RAMcopy_loop循环将FLASH代码复制至RAM中5、stack_setup栈设置clear_bss_bss_start到_bss_end之间的数据清06、ldr pc , start_armboot 跳转到第二阶段//=====================================================================第二阶段:board.c的路径位于arch/arm/lib/board.c,这段代码为U-BOOT的第二阶段初始化代码。
主要作用是初始化两个重要数据结构,对SDRAM的内存分配设置,对各种需要用到的外设进行初始化,最后循环跳入main_loop()函数二阶段start_armboot分为board_init_f 和 board_init_r两部分先执行的board_init_f部分:1、为gd数据结构分配地址,并清零2、执行init_fnc_ptr函数指针数组中的各个初始化函数,如下board_early_init_f ,timer_init ,env_init init_baudrate serial_initconsole_init_f display_banner dram_init3、A、分配SDRAM高64KB为TLB,用于U-BOOTB、分配SDRAM下一单元为U-BOOT代码段,数据段,BSS段(这里插一句,原来BSS段是用来存放未初始化的全局变量与静态变量)C、接着开辟malloc空间,存bd , gd , 3个字大小的异常堆空间4、将relorate的地址值赋给gd结构体相应变量(2011.06版本的,用于返回start.S)后执行的board_init_r部分:1、对gd , bd 数据结构赋值初始化2、各种外设初始化:初始化NORFLASH, NANDFLASH,初始化ONENAND FLASH初始化环境变量初始化PCI设置IP地址初始化各类外设:IIC、LCD、键盘、USB初始化控制台建立IRQ中断堆栈初始化以太网初始化跳转表(定义了U-Boot中基本的常用函数库)。
i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)
i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)∙开发平台:i.MX 6UL∙最新系统: u-boot2015.04 + Linux4.1.15_1.2.0∙交叉编译工具:dchip-linaro-toolchain.tar.bz2源码下载地址:U-Boot: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2)/git/cgit.cgi/imx/uboot-imx.git/Kernel: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2)/git/cgit.cgi/imx/linux-2.6-imx.git/源码移植过程:1、将linux内核及uBoot源码拷贝到Ubuntu12.04系统中的dchip_imx6ul目录下;2、使用tar命令分别将uboot和kernel解压到dchip_imx6ul目录下;3、解压后进入uboot目录下,新建文件make_dchip_imx6ul_uboot201504.sh,且文件内容如下:#################################################################### Build U-Boot.2015.04 For D518--i.MX6UL By FRESXC #####################################################################!/bin/bashexport ARCH=armexportCROSS_COMPILE=<YourPath>/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi -make mrproper # means CLEANmake mx6ul_14x14_evk_defconfigmake2>&1|tee built_dchip_imx6ul_uboot201504.out4进入kernel目录下,新建文件make_dchip_imx6ul_linux4115120.sh,且文件内容如下:#################################################################### Build Linux-4.1.15 For D518--i.MX6UL By FRESXC # ################################################################### #!/bin/bashexport ARCH=armexportCROSS_COMPILE=<YourPath>/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi -make mrproper # means cleanmake imx_v7_defconfigmake uImage LOADADDR=0x100080002>&1|teebuilt_dchip_imx6ul_linux4115120.outmake imx6ul-14x14-evk.dtb做完以上部分,在终端中分别进入kernel和uboot源码目录下,使用./make_dchip_imx6ul_uboot201504.sh和./make_dchip_imx6ul_linux4115120.sh 命令运行上面的两个脚本文件。
基于imx6ull的uboot2017启动流程
基于imx6ull的uboot2017启动流程1、Uboot2017编译配置流程/Uboot-2017.03$ make distclean/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig/Uboot-2017.03$ make最后会编译出u-boot-dtb.imx⽂件,可以烧⼊板⼦中启动了。
2、Uboot2017的启动流程分析 1)内核启动的第⼀阶段⾸先,经过上⾯的编译后,会在顶层⽬录下发现⾃动⽣成了u-boot.lds链接⽂件,有了这个⽂件后,我们就会很容易找到我们需要分析的第⼀个⽂件是什么:因此,我们就可以从arch/arm/cpu/armv7/start.S这个⽂件出发,去分析;但是当打开start.S这个⽂件时,并不会发现有程序的⼊⼝,也就是上图的_start这个标志,这个标志定义在arch/arm/lib/vectors.S⽂件中:从上⾯也可以看到,主要定义了异常与中断的跳转函数,⽽第⼀个跳转到的是reset标志,可以发现,reset标志是定义在start.S中的,然后顺着程序向下执⾏:1)将CPU从⽤户模式切换到管理员模式2)禁⽌中断这个函数是对CPU进⾏初始化搜索_main,该函数定义在crt0.S中,这个函数是第⼀阶段的关键,第⼀阶段中最主要的函数是为了调⽤board_init_f:由于此时RAM还并没有初始化,不能使⽤,因此使⽤gd结构体进⾏数据的传输1)设置c代码的运⾏环境,为调⽤board_init_f作准备 a) 设置堆栈 b) 调⽤board_init_f_alloc_reserve接⼝,从堆栈开始的地⽅,为uboot的gd结构分配空间 c) 调⽤board_init_f_init_reserve接⼝,对gd进⾏初始化2)调⽤board_init_f函数,完成⼀些前期的初始化⼯作 a)点亮⼀个Debug⽤的LED灯,表⽰u-boot已经活了 b)初始化DRAM,DDR等system范围的RAM等 c)计算后续代码需要使⽤的⼀些参数,包括relocation destination,the future stack,the future GD location等.3).如果当前是SPL(由CONFIG_SPL_BUILD控制),则_main函数结束,直接返回.如果是正常的u-boot,则继续执⾏后续的动作4).根据board_init_f指定的参数,执⾏u-boot的relocation操作5).清除BSS段6).调⽤board_init_r函数,执⾏后续的初始化操作#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)ldr sp, =(CONFIG_SPL_STACK)#elseldr sp, =(CONFIG_SYS_INIT_SP_ADDR)#endif#if defined(CONFIG_CPU_V7M) /* v7M forbids using SP as BIC destination */mov r3, spbic r3, r3, #7mov sp, r3#elsebic sp, sp, #7 /* 8-byte alignment for ABI compliance */#endifmov r0, spbl board_init_f_alloc_reservemov sp, r0/* set up gd here, outside any C code */mov r9, r0bl board_init_f_init_reservemov r0, #0bl board_init_f 在board_init_f中会顺序的执⾏init_sequence_f中定义的函数指针,函数指针中,⽐较关键的是初始化时钟、初始化内核启动的环境参数、设置串⼝波特率、初始化串⼝、初始化i2c、初始化SPI、初始化ram、设置重定位地址、重定位get_clocksenv_initinit_baud_rateserial_initinit_func_i2cinit_func_spidram_initjump_to_copy.... jump_to_copy函数调⽤crt0.S⽂件中的重定位函数,之后便进⾏清除bss段,之后便调⽤board_init_r函数,进⼊内核启动的第⼆阶段。
IAC-IMX6UL-Kit LINUX 用户手册说明书
IAC-IMX6UL-Kit LINUX用户手册版本号:V1.0前言 (2)产品说明 (2)产品版本说明 (2)修订记录 (2)一、阅读前说明 (3)二、准备工作 (4)三、功能测试 (6)四、固件烧写 (7)五、安装交叉编译器 (8)5.1概述 (8)5.2安装步骤 (8)六、搭建NFS网络文件系统 (11)6.1概述 (11)6.2安装步骤 (11)七、源码编译 (14)7.1概述 (14)7.2 uboot 编译 (14)7.3内核的配置及编译 (18)八、应用程序的开发 (21)8.1编写应用程序及交叉编译 (21)8.2运行应用程序 (22)九、添加应用程序到文件系统 (26)9.1概述 (26)9.2添加到文件系统 (26)十、结束语 (29)产品说明欢迎使用浙江启扬智能科技有限公司产品IAC-IMX6UL-Kit,本产品Linux部分包含6份手册:《IAC-IMX6UL-Kit 用户手册.pdf》修订记录修订记录累积了每次文档更新的说明。
最新版本的文档包含以前所有文档版本的更新内容。
一、阅读前说明●装有Linux系统(ubuntu 或其它Linux发行版),本手册以ubuntu 12.04 操作为例,具体搭建请参照《虚拟机安装ubuntu指导手册.pdf》!●在ubuntu用户目录下创建一个工作目录:mkdir ~/work①②,并将要编译的文件拷贝到此目录下。
●关于linux下的常用命令以及vi的操作等在这里都不做详细说明,请用户自行查阅相关资料!●开发板标配光盘目录,文档说明中用到的所有工具软件以及代码文件全部在光盘的对应目录下,使用前请确保光盘资料齐全!●光盘中有移植好的源码,用户可直接编译使用,也可以根据实际情况进行配置、编译。
注:①这里的~/表示用户目录,整条命令表示在用户目录下创建work目录实际对应的绝对路径为/home/lvmh(此目录为登录账户工作目录,本手册以lvmh账户为例,操作过程中请以实际登录账户所在目录为准),~/work对应的路径是/home/lvmh/work。
imx6ul_uboot移植
imx6ul_uboot移植1,确定config文件如果不存在configs/mx6ul_14x14_evk_nand_defconfig文件1.1,则复制configs/mx6ul_14x14_evk_defconfig1.2, 重命名为mx6ul_14x14_evk_nand_defconfig2,修改mx6ul_14x14_evk_nand_defconfig文件修改CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/ mx6ul_14x14_evk/imximage.cfg,MX6UL"为CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/ mx6ul_14x14_evk/imximage.cfg,MX6UL,SYS_BOOT_NAND"3,确定DDR内存大小如果内存为不是512M则修改include/configs/mx6ul_14x14_evk.h#define CONFIG_DEFAULT_FDT_FILE "imx6ul-14x14-evk.dtb"#define PHYS_SDRAM_SIZE SZ_256M /*修改为实际值*/#define CONFIG_BOOTARGS_CMA_SIZE "cma=64M "4,编译编一个简单编译的脚本内容如下:#! /bin/shmake mrpropermake mx6ul_14x14_evk_nand_defconfigmake ARCH=arm CROSS_COMPILE=arm-fsl-linux-gnueabi- 直接运行此脚本编译5,运行测试可把编译好的u-boot.bin load到内存中测试6,问题6.1,运行时显示了nand flash的容量,而且有显示MMC: SDHC: 0 SDHC: 1然后一直显示: Mxs Nand: DMA read error修改include/configs/mx6ul_14x14_evk.h文件//#ifdef CONFIG_SYS_USE_NAND#define CONFIG_SYS_FSL_USDHC_NUM 1#else#define CONFIG_SYS_FSL_USDHC_NUM 2#endif//改为#ifdef CONFIG_SYS_BOOT_NAND#define CONFIG_SYS_FSL_USDHC_NUM 1#else#define CONFIG_SYS_FSL_USDHC_NUM 2#endif6.2,运行nand read出现nand read ERROR failed -74提示修改include/configs/mx6ul_14x14_evk.h文件//增加以下定义#define CONFIG_NAND_MXS_BCH_LEGACY_GEO。
UBOOT移植操作
UBOOT移植操作1. 确定目标平台和硬件:首先需要了解目标平台的硬件架构、处理器类型、存储设备(如 Flash 或者 SD 卡)等重要信息。
同时需要获取目标平台的硬件参考手册或者相关文档。
2.设置交叉编译工具链:UBOOT是使用C和汇编语言编写的,因此需要使用交叉编译工具链来生成可在目标平台上运行的二进制可执行文件。
交叉编译工具链包括交叉编译器、链接器和调试器等工具,这些工具需要针对目标平台进行配置。
4. 配置 UBOOT 环境:进入 UBOOT 源代码目录,运行 `make menuconfig` 命令来配置 UBOOT 的环境。
这个命令会打开一个图形界面,可以在其中选择需要的功能、驱动程序和选项。
根据目标平台的硬件特性和需求,选择适当的选项。
5. 修改配置文件:UBOOT 需要一个配置文件(通常是`include/configs/<target.h>`),在这个文件中需要将目标平台的硬件配置信息填入。
这些信息包括芯片型号、Flash 存储器地址等。
还需要设置启动参数,如内核地址、根文件系统地址等。
6. 编译 UBOOT:运行 `make` 命令来编译 UBOOT。
根据配置和硬件平台的不同,可能需要选择不同的编译选项。
编译过程会生成一个 UBOOT 头文件(u-boot.bin)和其他必要的文件。
7.将UBOOT烧录到目标平台:使用烧录工具(如JTAG烧录器、USB烧录器或者SD卡等)将编译好的UBOOT烧录到目标平台的存储设备中。
具体的烧录方法和工具依赖于目标平台的配置。
8.测试和调试:将烧录好的UBOOT安装到目标平台后,通过串口或者网络连接到目标平台,使用终端工具进行测试和调试。
可以通过串口输出来查看启动过程中的日志和错误信息,或者使用调试工具来分析程序执行的问题。
9.优化和定制:根据需求对UBOOT进行优化和定制。
可以修改配置文件、增加功能模块或者修改代码,以达到更好的性能和适应特定需求的目的。
UBoot移植详细教程
u-boot 移植步骤详解(必会)1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT 改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
U-BOOT移植教程
U-BOOT移植实验u-boot简介u-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, u-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
u-boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。
u-boot源码目录介绍u-boot的启动过程1 启动流程我们一般把bootloader都分为阶段1(stage1)和阶段2(stage2)两大部分,依赖于CPU体系结构的代码(如CPU初始化代码等)通常都放在阶段1中且通常用汇编语言实现,而阶段2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
1 阶段1,汇编代码,对于s3c2410是cpu/arm920t/start.s文件。
主要流程如下:关闭看门狗禁掉所有中断设置CPU的频率把自己拷贝到RAM配置内存区控制寄存器配置的栈空间进入C代码部分2 阶段2是C语言代码,在lib_arm/board.c中的start_armboot是C语言开始的函数,也是整个启动代码中C语言的主函数。
这个函数调用一系列的初始化函数,然后进入主UBOOT命令行,进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。
当用户输入启动linux的命令的时候,u-boot会将kernel 映像(zImage)和从nand flash 上读到RAM 空间中,为内核设置启动参数,调用内核,从而启动linux。
u-boot移植要点:我们可以总结出bootloader的两大功能:1 是下载功能,既通过网口、串口或者USB口下载文件到RAM中。
2 是对flash芯片的读写功能。
u-boot对S3C2410已经有了很好的支持,我们在移植过程中主要是完善u-boot对nand flash的读写功能。
IMX6Q,在uboot下在内核下,修改成GPIO
IMX6Q,在uboot下在内核下,修改成GPIO 博主使⽤的是天嵌的IMX6Q_coreC,CPU是IMX6Q,内核下修改GPIO:内核版本4.1.15以下使⽤ EIM_D26 为例介绍修改⼀个已经被驱动占⽤的管脚,将其修改为 gpio1.在 imx6q-pinfunc.h ⽂件中搜索 EIM_D26,搜索的结果如图所⽰:从图⽚可以看出EIM_D26 是GPIO3_26管脚。
2. 打开 arch/arm/boot/dts/⽬录下的 e9qdl-sabresd.dtsi(e9 板卡使⽤),imx6qdl-sabresd.dtsi(imx6q corec 板卡使⽤)⽂件,搜索 EIM_D26,搜索结果如图所⽰:查看标号1的红⾊⽅框的内容可以看出EIM_D26管脚被uart占⽤。
看图中标号 2 可知改⽂件中只有标号 1 处使⽤了该管脚(注:如果有 2 个或多个,⼀般真正使⽤的也只有⼀个,例如:只需搜索标号1 中的 pinctrl_uart2 即可得知是否真的使⽤)。
3.搜索标号 1 中的 pinctrl_uart2 关键词:由红⾊⽅框的内容可以得知该管脚是被uart2使⽤的,如果没有被使⽤⼀般搜索结果不会出现2个选项。
4.将串⼝ 2 注释掉释放该管脚,注释如图所⽰:搜索关键词 imx6qdl-sabresd,在组⾥⾯添加第⼀步搜索到的GPIO3_26:然后重新编译,将修改后的设备树烧写进去即可.uboot下修改GPIO:以下说明以 EIM_DA12管脚改为GPIO为例:1.打开arch/arm/include/asm/arch-mx6/mx6q_pins.h⽂件,搜索EIM_DA12可以搜索到:MX6_PAD_DECL(EIM_DA12__EIM_AD12, 0x0458, 0x0144, 0, 0x0000, 0, 0)MX6_PAD_DECL(EIM_DA12__IPU1_DI1_PIN03, 0x0458, 0x0144, 1, 0x0000, 0, 0)MX6_PAD_DECL(EIM_DA12__IPU2_CSI1_VSYNC, 0x0458, 0x0144, 2, 0x08E4, 1, 0)MX6_PAD_DECL(EIM_DA12__GPIO3_IO12, 0x0458, 0x0144, 5, 0x0000, 0, 0)MX6_PAD_DECL(EIM_DA12__SRC_BOOT_CFG12, 0x0458, 0x0144, 7, 0x0000, 0, 0)其中 EIM_AD12, IPU1_DI1_PIN03, IPU2_CSI1_VSYNC, GPIO3_IO12, SRC_BOOT_CFG12的功能模式2.修改board/freescale/mx6sabresd/mx6sabresd.c⽂件,(IMX6UL--:board/freescale/mx6ul_evk/mx6ul_evk.c)添加:iomux_v3_cfg_t const gpio_pads[] = {MX6_PAD_ EIM_DA12__GPIO3_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL),};然后在函数int board_init(void)中添加:imx_iomux_v3_setup_multiple_pads(gpio_pads, ARRAY_SIZE(gpio_pads));gpio_direction_output(IMX_GPIO_NR(3, 12), 0); //输出低电平gpio_direction_output(IMX_GPIO_NR(3, 12), 1); //输出⾼电平ret = gpio_get_value(IMX_GPIO_NR(3, 12)); //获取gpio电平。
编译IMX6ULL开发板的Uboot和Linux内核
编译IMX6ULL开发板的Uboot和Linux内核迅为I.MX6ULL终结者开发板对应的Uboot源码在光盘资料的“i.MX6UL 终结者光盘资料\05_uboot linux源码\终结者Uboot和源码.zip”压缩包里面,解压该压缩包,得到“uboot-imx-rel_imx_4.1.15_2.1.0_ga_xxxxxxxx.tar.gz”文件(其中的xxxxxxxx代表的是发布日期),这个文件就是终结者开发板对应的Uboot源码。
我们通过SSH将该文件上传到系统,上传完成后如下图所示:然后我们输入“tar -xvfuboot-imx-rel_imx_4.1.15_2.1.0_ga_20200314.tar.gz”指令,开头解压Uboot源码,如下图所示:解压完成后,得到“uboot-imx-rel_imx_4.1.15_2.1.0_ga”文件夹,用法“cduboot-imx-rel_imx_4.1.15_2.1.0_ga”指令进入到Uboot源码名目下,如下图所示:然后我们开头编译Uboot,由于迅为的i.MX6ULL核心板有两种:EMMC版本和NAND FLASH版本,这两个版本的编译指令不一样,可以参考下面表格:我这里以EMMC版本的核心板为例,开头编译Uboot 源码,挺直在终端输入“./create.sh”指令,如下图所示:编译过程如下图所示:编译完成会生成“u-boot.imx”文件,如下图所示:上图生成的“u-boot.imx”文件就是Uboot的景象文件,我们可以把它拷贝到Windows系统下然后用法MFGTools烧写工具烧写到开发板运行。
29.3 编译终结者开发板Linux内核I.MX6ULL终结者开发板对应的Linux内核源码在光盘资料的“i.MX6UL终结者光盘资料\05_uboot linux源码\终结者Uboot和Linux源码.zip”压缩包里面,解压该压缩包,得到“linux-imx-rel_imx_4.1.15_2.1.0_ga_xxxxxxxx.tar.gz”文件(其中的xxxxxxxx代表的是发布日期),这个文件就是终结者开发板对应的Linux内核源码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
增加以下定义
#define CONFIG_NAND_MXS_BCH_LEGACY_GEO
//
#ifdef CONFIG_SYS_USE_NAND
#define CONFIG_SYS_FSL_USDHC_NUM 1
#else
#define CONFIG_SYS_FSL_USDHC_NUM 2
#endif
//
改为
#ifdef CONFIG_SYS_BOOT_NAND
#define CONFIG_SYS_FSL_USDHC_NUM 1
#else
#define CONFIG_SYS_FSL_USDHC_NUM 2
#endif
6.2,运行nand read出现nand read ERROR failed -74提示
修改include/configs/mx6ul_14x14_evk.h文件
#define CONFIG_BOOTARGS_CMA_SIZE "cma=64M "
4,编译
编一个简单编译的脚本内容如下:
#! /bin/sh
make mrproper
make mx6ul_14x14_evk_nand_defconfig
make ARCH=arm CROSS_COMPILE=arm-fsl-linux-gnueabi-
1,确定config文件
如果不存在configs/mx6ul_14x14_evk_nand_defconfig文件
1.1,则复制configs/mx6ul_14x14_evk_defconfig
1.2, 重命名为mx6ul_14x14_evk_nand_defconfig
直接运行此脚本编译
5,运行测试
可把编译好的u-boot.bin load到内存中测试
6,问题
6.1,运行时显示了nand flash的容量,而且有显示MMC: SDHC: 0 SDHC: 1
然后一直显示: Mxs Nand: DMA read error
修改include/configs/mx6ul_14x14_evk.h文件
3,确定DDR内存大小
如果内存为不是512M则修改include/configs/mx6ul_14x14_evk.h
#define CONFIG_DEFAULT_FDT_FILE "imx6ul-14x14-evk.dtb"
#define PHYS_SDRAM_SIZE SZ_256M /*修改为实际值*/
2,修改mx6ul_14x14_evk_nand_defconfig文件
修改CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ul_14x14_evk/imximage.cfg,MX6UL"
为CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ul_14x14_evk/imximage.cfg,MX6UL,SYS_BOOT_NAND"