100ask imx6ull开发板移植NXP官方Uboot

使用环境:Ubuntu16.04

开发板:100ask imx6ull

uboot镜像:正点原子提供的nxp官方uboot

下载工具:imxdownload工具

    参考正点原子的移植教程进行移植uboot,移植成功,且在uboot中启动Linux。

准备阶段:
1. 使用100ask的下载工具将emmc.img烧写到emmc中
2. 准备好TF卡
3. 准备好nxp原厂uboot:
链接: https://pan.baidu.com/s/1abSmlcYJ6iTan6U0XEjtsQ 提取码:4imf

编译阶段:

#nxp编译命令
make distclean        # 清除掉配置文件
make  mx6ull_14x14_evk_emmc_defconfig    # 默认配置,生成.config
make -j12            # 编译

工具阶段:

  1. 启动Linux

    1. 将Linux镜像文件拷贝到DRAM:可以用nfs、tftp、emmc等方式

    2. 将设备树文件拷贝到DRAM

    3. 使用bootz命令启动

  2. 使用USB更新Uboot:

    1. 编译出u-boot-dtb.imx

    2. 拷贝到100ask烧写工具的files目录下

    3. 连接好OTG线,模式为USB启动

    4. 查看到已连接后开始更新UBOOT

    5. 切换成emmc启动,查看UBOOT编译时间是否发生改变

  3. SD卡更新UBOOT(正点原子)

    1. 使用正点原子的烧录工具imxdownload,./imxdownload u-boot.bin /dev/sdb下载到SD卡中

    2. 开发板使用SD卡启动,查看UBOOT编译时间是否发生改变

  4. 使用SD卡更新Uboot(100ask)

    1. 使用 dd 命令烧写 imx 镜像文件到 /dev/sdb 设备, 注意: 是烧写到 1K 偏移处: sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync

    2. 开发板使用SD卡启动,查看UBOOT编译时间是否发生改变

移植阶段:

  1. (添加板子默认配置文件) 复制configs目录下的默认的配置文件mx6ull_14x14_evk_emmc_defconfigmx6ull_100ask_defconfig,并进行修改

  1. (添加板子对应的头文件:不同的板子,有一些需要配置的信息,每个板子有一个)复制include/configs目录下的mx6ullevk.hmx6ull100ask.h,并进行修改

  2. 添加开发板对应的板级文件夹(每个板子都有特有的文件,也叫做板级文件),复制board/freescale/mx6ullevkmx6ull100ask

    1. 移动mx6ullevk.cmx6ull100ask.c

    2. 修改Makefile为mx6ull100ask.o,此时才会编译mx6ull100ask.c

    3. 修改imximage.cfg文件

    4. 修改Kconfig文件

    5. 修改MAINTAINERS文件

    6. 修改UBOOT图形配置界面,在arch/arm/cpu/armv7/mx6/Kconfig目录下添加:配置项和包含Kconfig

    7. 检查board/freescale/mx6ull100ask/imx100ask.c是否被编译成.o文件,以及查看nclude/configs/mx6ull100ask.h是否被引用

    8. 修改LCD驱动

      1. 修改board/freescale/mx6ull100ask/mx6ull100ask.c

      2. 修改include/configs/mx6ull100ask.h,把所有panel=TFT43AB换成100askTFT(panel的值要与.c中的.name的值一样)

      3. 使用SD卡启动查看屏幕是否显示正常,查看UBOOT的环境变量是否修改成功

    9. 修改网络驱动

      1. 修改include/configs/mx6ull100ask.h中的宏,选择ENET2,由于100ask的ENET2的PHY外接了上拉电阻,地址为0x1,不用修改,但要添加使能SMSC公司的LAN8729A驱动。

      2. 修改board/freescale/mx6ull100ask/mx6ull100ask.c中的复位引脚定义,由于只用到了ENET2,所以修改ENET2的RESET引脚(查看开发板原理图),删除掉74LV595(参考的nxp开发板上所使用的网卡驱动)的IO配置参数结构体

      3. 删除掉74LV595的初始化函数和控制74LV595的IO输出电平函数

      4. 在板子初始化函数中删除调用74lv595的初始化函数

      5. 添加网络复位引脚驱动,此处只添加了ENET2的复位引脚

      6. 添加网络IO复位引脚的初始化代码

      7. 修改drivers/net/phy/phy.c文件中的函数genphy_update_link,这个函数用于更新PHY的连接状态和速度

      8. 重新编译uboot,并将u-boot.bin烧写到SD卡中启动./imxdownload u-boot.bin /dev/sdb,连接到路由器后启动开发板会自动dhcp来获取ip或者进行配置环境变量,配置完成后ping一下主机可以ping通

        setenv ipaddr 192.168.1.55 //开发板 IP 地址
        setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址
        setenv gatewayip 192.168.1.1 //开发板默认网关
        setenv netmask 255.255.255.0 //开发板子网掩码
        setenv serverip 192.168.1.250 //服务器地址,也就是 Ubuntu 地址
        saveenv //保存环境变量
        
      9. 配置完成后ping一下主机可以ping通

      1. 修改板子名称,board/freescle/mx6ull100ask/mx6ull100ask.c,修改函数checkboard

    启动阶段:

    1. 使用emmc启动,由于100ask的emmc内分区1和分区2都是采用的ext2格式,所以要使用ext2load命令来加载zImage和dtb

      1. mmc dev 1:切换mmc设备到EMMC

      2. ext2ls mmc 1:2 boot:查看EMMC的第一个分区文件

      3. ext2load mmc 1:2 80800000 /boot/zImage:从EMMC中读取zImage到内存

      4. ext2load mmc 1:2 83000000 /boot/100ask_imx6ull-14x14.dtb:读取dtb文件到内存

      5. bootz 80800000 - 83000000:启动内核

      6. 启动成功

    2. 使用tftp启动:保证uboot能够ping通主机(依据修改网络驱动中的步骤进行配置)

=> tftp 80800000 zImage
Using FEC1 device
TFTP from server 192.168.5.11; our IP address is 192.168.5.9
Filename 'zImage'.
Load address: 0x80800000
Loading: ############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################2.3 MiB/s
done
Bytes transferred = 7924872 (78ec88 hex)
=> tftp 83000000 100ask_imx6ull-14x14.dtb
Using FEC1 device
TFTP from server 192.168.5.11; our IP address is 192.168.5.9
Filename '100ask_imx6ull-14x14.dtb'.
Load address: 0x83000000
Loading: ###1.5 MiB/s
done
Bytes transferred = 38370 (95e2 hex)
=> bootz 80800000 - 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x78ec88 ]
## Flattened Device Tree blob at 83000000Booting using the fdt blob at 0x83000000Using Device Tree in place at 83000000, end 8300c5e1Starting kernel ...

问题阶段:

1. 由于正点原子的emmc镜像文件分区为fat格式,100ask的emmc镜像文件格式不同,所以要使用不同的命令来加载zImage和dtb2. 不知道使用什么命令来启动Linux,开发板使用emmc启动,然后查看环境变量
=> printenv
baudrate=115200
board_name=EVK
board_rev=14X14
boot_fdt=try
bootcmd=run updateset;run findfdt;run findtee;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi
bootcmd_mfg=run mfgtool_args; if test ${tee} = yes; then bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; else bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; fi;
bootdelay=3
bootdir=/boot
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
eth1addr=00:01:3f:2d:3e:4d
ethaddr=00:01:1f:2d:3e:4d
ethprime=eth1
fdt_addr=0x83000000
fdt_file=100ask_imx6ull-14x14.dtb
fdt_high=0xffffffff
fdtcontroladdr=9ef40478
findfdt=if test $fdt_file = undefined; then if test $board_name = EVK && test $board_rev = 9X9; then setenv fdt_file imx6ull-9x9-evk.dtb; fi; if test $board_name = EVK && test $board_rev = 14X14; then setenv fdt_file imx6ull-14x14-evk.dtb; fi; if test $fdt_file = undefined; then setenv fdt_file imx6ull-14x14-alpha.dtb; fi; fi;
image=zImage
initrd_addr=0x83800000
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x80800000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=ext2load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${bootdir}/${fdt_file}
loadimage=ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${image}
loadtee=fatload mmc ${mmcdev}:${mmcpart} ${tee_addr} ${tee_file}
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcautodetect=no
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${tee} = yes; then run loadfdt; run loadtee; bootm ${tee_addr} - ${fdt_addr}; else if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi; fi;
mmcdev=1
mmcpart=2
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; setenv get_cmd tftp; ${get_cmd} ${image}; ${get_cmd} ${fdt_addr} ${fdt_file};  bootz ${loadaddr} - ${fdt_addr};
panel=TFT7016
script=boot.scr
tee=no
tee_addr=0x84000000
tee_file=uTee-6ullevk
update=yes
updateset=if test $update = undefined; then setenv update yes; saveenv; fi;Environment size: 2738/8188 bytes
3. 实际运行的命令:
mmc dev 1
ext2load mmc 1:2 0x80800000 /boot/zImage
ext2load mmc 1:2 0x83000000 /boot/100ask_imx6ull-14x14.dtb
setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
bootz 0x80800000 - 0x83000000

100ask imx6ull开发板移植NXP官方UBOOT相关推荐

  1. Uboot专题(一)—— 移植NXP官方Uboot(2016.03版本)

    linux系列目录: linux系统移植篇(二)-- Uboot使用介绍 Uboot专题(一)-- 移植NXP官方Uboot(2016.03版本) 文章目录 一.编译NXP官方uboot 1.获取ub ...

  2. 移植NXP官方U-boot全过程

    一.NXP官方U-boot编译 1.解压缩官方U-boot 解压缩命令 tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 为了方便,修改文件夹名字 ...

  3. imx6ull开发板 通过usb网卡uboot ping通虚拟机和windows主机

    1遇到的问题:直接烧录 uboot+kernel 启动后,手动配置开发板IP地址可以和windows主机linux虚拟机ping通,但是只烧录uboot后无法ping通linux虚拟机和windows ...

  4. imx6ull 开发板移植mjpg-streamer

    imx6ull 移植mjpg-streamer 参考链接:https://blog.csdn.net/mucheni/article/details/109447610 前期准备: PC端:Ubunt ...

  5. Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核)

    Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核) 文章目录 Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4 ...

  6. i.MX6ULL移植NXP官方Linux内核imx_5.4.47_2.2.0

    目录 开发环境 设置交叉编译工具链 下载NXP官方维护的内核 使用官方配置编译 使用4.9.88版本的设备树 通过网络下载内核镜像以及设备树 使用之前写在emmc中的根文件系统 添加自己的板子 使用n ...

  7. i.MX6ULL移植NXP官方uboot2020.04_5.4.47_2.2.0

    目录 开发环境 设置交叉编译工具链 下载nxp的uboot 移植uboot 编译uboot 烧写uboot镜像 建立自己的单板文件配置 解决适配问题 适配 lan8720a 网卡 查看公版原理图 查看 ...

  8. i.MX6ULL系统移植 | 移植NXP官方linux4.1.15内核

    更新时间 更新内容 2021-11-15 初稿完成 2022-07-28 更新网络驱动移植部分 一.NXP官方linux内核 1. 下载 NXP官方linux仓库地址为:https://github. ...

  9. 迅为IMX6ULL开发板Linux学习教程

    1800+页使用手册(持续更新)+入门视频教程+实战视频教程 关注VX公众号:迅为电子 ,  回复 :终结者,免费获取产品资料  让教程更细致,终结入门难! 所有教程由迅为原创,是迅为工作多年的工程师 ...

  10. 讯为开发板移植linux,迅为I.MX6ULL开发板移植Linux5.4内核教程

    4412上移植最新5.4内核的流程非常的简单,因为4412被Linux官方支持,那么我们来看一下怎么把官方5.4内核移植到我们的I.MX6ULL终结者开发板上. 平台:i.MX6ULL开发板 前言 本 ...

最新文章

  1. 学文科的优势_男生学文科,出路在哪里?带了十几年文科的班主任道出了实情...
  2. WPF与缓动(一) N次缓动
  3. java xlsx读写_Java读写Excel
  4. Fcrackzip——简介、安装、使用
  5. Linux上搭建verdaccio私服
  6. 关联式容器(map,set,multimap,multiset)
  7. ffmpeg libx264_nginx+ffmpeg搭建流媒体服务器(直播流)
  8. 如何点击打印,直接打印出来,不弹打印设置选项
  9. 实践:不同编程语言, 函数检测多属性的全部合理的具体实现。
  10. java生成pdf417_java生成PDF417条码
  11. Word中的Visio图直接转换为图片
  12. 全网最简单Win10桌面美化教程,只需4步!!
  13. warning: #61-D: integer operation result is out of range
  14. 解决调用接口时的OPTIONS请求
  15. win7-32位系统SqlServer2014版本下载与安装
  16. Real-Time Rendering 第五章 光照模型
  17. iOS逆向 开发工具
  18. springcloud ribbon实现负载均衡的时候,提示Request URI does not contain a valid hostname: htt...
  19. 如何打造个人品牌(IP)?
  20. 【深度解读】金氪首创ERC-721 概念版T恤发布,那ERC-721是什么?

热门文章

  1. C语言怎么算n维向量的加法,3D数学读书笔记——向量运算及在c++上的实现
  2. RestTemplate请求oauth获取token报401错误
  3. 【模拟电子技术Analog Electronics Technology 6】—— 共射放大电路的原理与改进
  4. springboot+mybatis报错处理
  5. 对union的遍历运算
  6. “汇新杯”科技+文化艺术专项赛介绍
  7. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  8. koa 设置cache_nodejs cache 缓存机制的简单实现
  9. YOLOv5、v7改进之三十九:引入改进遮挡检测的Tri-Layer插件 | BMVC 2022
  10. macOS如何格式化移动硬盘和U盘