(1)0411-imx6ull的启动方式、UBOOT(1),2024年最新字节跳动+阿里+华为+腾讯等大厂物联网嵌入式开发面试题

217 阅读7分钟

在这里插入图片描述
可以分为两部分:

1.BOOT MODE1和BOOT MODE0

在这里插入图片描述
常用的就是01串行下载和10内部boot模式启动。
其中串行下载是在使用nxp的官方烧录工具mfgtool通过usb otg向开发板下载代码的时候使用的,这个时候八个拨码开关的位置应该是:01 000000。
而内部boot模式是在正常运行的时候使用的,从内部boot模式启动,芯片会执行内部的boot rom代码,这段代码会进行硬件初始化,然后从boot设备(SD/EMMC,NAND)中将代码拷贝出来复制到指定的RAM中。
在这里插入图片描述

2.GPIO配置设备启动(此时前两个拨码应为10,配置为从boot启动模式)

在这里插入图片描述
启动设备通过24个配置IO:
BOOT_CFG1[7:0],BOOT_CFG2[7:0],BOOT_CFG4[7:0]。
在这里插入图片描述
其中所需要的就是六个引脚。
在这里插入图片描述

3.正点原子阿尔法开发板的启动方式设置总结

在这里插入图片描述
其中EMMC和NAND是两种底板型号,我买的是EMMC版本,所以可以选择EMMC启动或者SD卡启动。
在这里插入图片描述
在这里插入图片描述

2.imx6ull移植

1.移植bootloader代码(Uboot启动内核)

2.移植Linux内核

3.移植rootfs根文件系统(基本命令和文件)

3.Uboot使用实验

uboot官网: www.denx.de/wiki/U-Boot…

1.uboot编译

1.安装ncurses库

sudo apt-get install libncurses5-dev 

2.传输uboot源码压缩包
可以在user下新建文件夹linux,再新建uboot文件夹,再新建alientek_uboot文件夹,传输uboot文件。
在这里插入图片描述
3.解压缩uboot源码压缩包

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

4.我是512MB(DDR3)+8GB(EMMC)核心板。
新建sheel脚本文件“mx6ull_alientek_emmc.sh”。

#!/bin/bash 
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

三行shell脚本的作用是清理工程、配置ubbot,编译uboot。
5.赋予脚本可执行权限,编译脚本

chmod +x mx6ull_alientek_emmc.sh
./mx6ull_alientek_emmc.sh

2.安装交叉编译环境

1.将如下路径的交叉编译器上传到linux环境。
可以新建如下文件夹home/user/linux/tool。
在这里插入图片描述
2.在ubuntu中新建目录

sudo mkdir /usr/local/arm

3.在home/user/linux/tool目录下执行如下命令,复制到/usr/local/arm中,并解压。

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f 
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 

4.使用vi打开/etc/profile文件夹,修改环境变量

sudo vi /etc/profile

打开后,在最下面输入:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

修改好后重启。
5.重启后,安装其他库。

sudo apt-get install lsb-core lib32stdc++6

6.验证是否安装成功。

arm-linux-gnueabihf-gcc -v 

3.安装imxdownload软件

1.将imxdownload软件拷贝到工程文件下。
在这里插入图片描述
2.赋予权限

chmod 777 imxdownload

3.插入SD卡
在这里插入图片描述
4.使用imxdownload软件向sd卡中烧写程序

./imxdownload led.bin /dev/sdd

4.uboot烧写与启动

1.将sd卡插入u盘,插到电脑上
使用imxdownload软件将uboot编译文件烧写到sd卡中

chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可 
./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或sda1 设备里面!

2.将sd卡插入开发板,boot设置为从sd卡启动,即:10 000010。
使用usb线,将usb_ttl与电脑相连。
在这里插入图片描述
3.在电脑上打开mobaxterm软件,设置好串口参数,复位开发板,在3s内按下回车键。
在这里插入图片描述

5.学习10类uboot命令

在这里插入图片描述

一、信息查询命令
1.bdinfo
查看板子信息
2.printenv
输出环境变量信息
3.version
查看uboot版本号

二、环境变量操作命令
1.setenv 
用于设置或者修改环境变量的值
2.saveenv
保存修改后的环境变量
eg:
setenv bootdelay 5
saveenv

三、内存操作命令
1.md
显示内存值
eg:
md.b 80000000 14
查看以 0X80000000 开始的 20 个字节的内存值,14是16进制
2.nm 
修改指定地址的内存值
eg:
nm.l 80000000
0x12345678
以.l 格式修改 0x80000000 地址的数据为 0x12345678
3.mm 
修改指定地址内存值
比nm有自增,就是输入后,会显示下一个地址的值,问询是否修改,不修改,输入q即可
4.mw
使用一个指定的数据填充一段内存
eg:
mw.l 80000000 0A0A0A0A 10
使用.l 格式将以 0X80000000 为起始地址的 0x10 个
内存块(0x10 \* 4=64 字节)填充为 0X0A0A0A0A
5.cp
数据拷贝命令
eg:
cp.l 80000000 80000100 10
使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为0x10 个内存块(0x10 \* 4=64 个字节)
6.cmp
用于比较两段内存的数据是否相等
eg:
cmp.l 80000000 80000100 10
使用.l 格式来比较 0x80000000 和 0X80000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 \* 4=64 个字节)



![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/133bb5f6b80d48c299451872821213d6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1772460821&x-signature=z0USdk2SOZn%2FHzR9IXRciF8inB0%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/474c6f4352be43c79156fa61b4840172~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1772460821&x-signature=5m3g%2FOXYR%2F0wpG%2Bso6gDOZ1xP30%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**