IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 野火EBF6ULL Pro 烧写官方镜像 -> 正文阅读

[嵌入式]野火EBF6ULL Pro 烧写官方镜像

说明:

编译环境:

????????VMware 15.5.7 + ubuntu-18.04.5-desktop-amd64

开发板:

????????野火EBF6ULL Pro

启动方式:

????????SD卡启动

uboot/kernel/rootfs镜像:

????????基于NXP官方野火电子进行适配修改的源代码进行编译

烧写方法:

????????在linux环境下手动制作启动SD卡,并将镜像拷贝到指定位置(具体位置及方法见下文)

一、编译

uboot:

代码获取

? ? ? ? git clone https://gitee.com/Embedfire/ebf_6ull_uboot.git

需要的工具链(arm-none-eabi-gcc:v6.3.1):

????????sudo apt-get install gcc-arm-none-eabi

需要的必要环境:

????????sudo apt-get install lib32ncurses5 lib32tinfo5 libc6-i386 make gcc

编译方法:

????????清理编译记录:

????????????????make ARCH=arm clean

????????生成配置:

????????????????SD卡:make ARCH=arm mx6ull_14x14_evk_defconfig

????????????????emmc:make ARCH=arm mx6ull_14x14_evk_emmc_defconfig

????????????????nand:make ARCH=arm mx6ull_14x14_evk_nand_defconfig

????????编译:

????????????????make -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi-

kernel:

代码获取:

? ? ? ? git clone https://gitee.com/Embedfire/ebf_6ull_linux.git

需要的工具链(arm-linux-gnueabihf-gcc: v7.4.0):

????????sudo apt-get install gcc-arm-linux-gnueabihf

需要的必要环境:

????????sudo apt-get install lzop libncurses5-dev

编译方法:

????????ebf_6ull_linux/arch/arm/configs下的配置文件:

????????imx_v6_v7_defconfig、imx_v7_defconfig:nxp官方提供的默认配置文件,用于编译官方的imx6ull开发板

????????imx6_v7_ebf_defconfig:野火提供的配置文件

配置编译环境变量:

????????export PATH=/opt/arm-gcc/bin:$PATH

????????export ARCH=arm

????????export CROSS_COMPILE=arm-linux-gnueabihf-

清理编译记录:

????????make ARCH=arm clean

生成配置:

????????make ARCH=arm imx6_v7_ebf_defconfig

编译:

????????make ARCH=arm -j10 CROSS_COMPILE=arm-linux-gnueabihf-

生成路径:

????????内核:ebf_6ull_linux/arch/arm/boot

????????设备树:ebf_6ull_linux/arch/arm/boot/dts

只编译设备树:

????????make ARCH=arm -j10 CROSS_COMPILE=arm-linux-gnueabihf- dtbs

rootfs:

使用buildroot工具:

????????git clone https://gitee.com/Embedfire/ebf_6ull_buildroot.git

需要的必要环境:

????????sudo apt-get install -y sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget g++-multilib

生成配置:

????????带Qt Demo:imx6ull_ebf_pro_defconfig

????????最小的完整镜像:imx6ull_ebf_minimal_defconfig

????????pico文件系统配置(不编译uboot与内核,文件系统5M左右):imx6ull_ebf_pico_defconfig

????????make imx6ull_ebf_pro_defconfig

二、烧写:

创建分区

????????fdisk /dev/sdb << EOF?

????????n

????????p

????????1

????????20480

????????1024000

????????n

????????p

????????2

????????1228800

? ? ? ? 这里是默认

????????w

????????EOF

格式化分区:

????????mkfs.vfat /dev/sdb1

????????mkfs.ext4 /dev/sdb2

????????分区1格式化成vfat是因为uboot中使用的是fatload进行的加载

????????分区2格式化成ext4是因为后续是将rootfs直接解压到的分区2,内核直接会把分区2进行了挂载

将uboot烧写到sd卡:

????????dd if=uboot of=/dev/sdb bs=512 seek=2 conv=fsync

????????跳过sd卡前面1k,可能是为了不破坏分区表和sd卡的一些标识,比如Disk identifier在448的位置,分区表在448~512之间

????????查看sd卡前1k数据果真如此,如下:

将kernel和dtb拷贝到sdb1(注意名字要对):

????????cp zImage /dev/sdb1

????????cp imx6ull-14x14-evk.dtb /dev/sdb1

????????名字必须这样写是因为uboot里写死了就是这个名字,否者找不到文件

将rootfs解压到/dev/sdb2

????????tar -jxvf rootfs.tar.gz /dev/sdb2

将sd卡插入板子,重启即可

三、uboot参数分析:

=> printenv
设置波特率: 
baudrate=115200 
判断是什么板子的,下面会用: 
board_name=EVK 
也是用于判断的,后面会根据该参数选择对应的dtb设备树: 
board_rev=14X14 
尝试加载dtb 
boot_fdt=try 
默认的bootargs参数,后面会改: 
bootargs=console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=:,v3,tcp 
运行命令,就是从这里开始执行的: 
bootcmd=run logo_display;run findfdt;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 
使用nxp官方提供usb烧写工具时使用: 
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; 
设置uboot等待时间,0的话直接就启动内核了: 
bootdelay=0 
执行一个脚本程序,这里的作用主要是用于通过sd卡升级emmc的,大概方法就是将内核文件系统写到内存并运行,然后将指定文件写入到指定位置: 
bootscript=echo Running bootscript from mmc ...; source 
串口号: console=ttymxc0 
ethact=FEC1 
ethprime=FEC 
dtb写入到内存的位置: 
fdt_addr=0x83000000 
dtb文件名称: 
fdt_file=imx6ull-14x14-evk.dtb 
fdt_high=0xffffffff 
找dtb文件的: 
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 echo WARNING: Could not determine dtb to use; fi; fi; 
如果是网络文件系统启动用的: 
get_cmd=dhcp 
内核文件名: 
image=zImage 
initrd加载到内存位置,这里没有用: 
initrd_addr=0x83800000 
initrd_high=0xffffffff 
如果是网络文件系统启动用的: 
ip_dyn=yes 
脚本或者内核加载到内存的位置: 
loadaddr=0x80800000 
将脚本文件从vfat分区加载到内存: 
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script}; 
将设备树文件从vfat分区加载到内存: 
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file} 
将内核镜像从vfat分区加载到内存: 
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image} 
logo文件名: 
logo=logo.bmp 
将logo文件从vfat加载到内存: 
logo_display=fatload mmc ${mmcdev}:${mmcpart} ${splashimage} ${logo} 
使用nxp官方提供usb烧写工具时使用,工具会读取这里的两个id来判断设备类型: 
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 
设置bootargs,本文章的方法用的: 
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot} mmcautodetect=yes 
启动内核: 
mmcboot=echo Booting from mmc ...; run mmcargs; 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; 
从那个设备找内核文件: 
mmcdev=0 
从哪个分区找内核文件: 
mmcpart=1 
根文件系统在哪里: 
mmcroot=/dev/mmcblk0p2 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; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; 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; panel=TFT50AB 
sd卡升级emmc用的脚本: 
script=boot.scr 
图片加载位置: 
splashimage=0x82000000 
splashpos=m,m 
stderr=serial 
stdin=serial 
stdout=serial 

Environment size: 2723/8188 bytes

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:54:30  更:2021-08-16 11:56:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:21:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码