【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动

前言

  • 最近为了深入研究 嵌入式Linux 的开发,把【迅为iMX6Q】开发板 找了出来,重新搭建了开发编译环境

  • 【迅为iMX6Q】开发板 的 u-boot,放在了 android 源码中,可以从 【迅为iMX6Q】开发板 网盘资料里,下载 iTOP-iMX6_android6.0.1_20200731.tar.gz,解压后,提取 uboot-imx,版本为 2015.04

提取 uboot-imx

  • 下载 iTOP-iMX6_android6.0.1_20200731,可以在 【迅为】提供的网盘地址下载,为 7z 格式化的压缩包
zhangsz@zhangsz-virtual-machine:~/linux/imx6q/android 6.0.1$ ls -la
total 14394144
drwxrwxr-x  3 zhangsz zhangsz       4096  13 17:09 .
drwxrwxr-x 12 zhangsz zhangsz       4096  13 16:53 ..
drwxr-xr-x 28 zhangsz zhangsz       4096  13 17:14 iTOP-iMX6_android6.0.1
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.001
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.002
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.003
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.004
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.005
-rwxrwxr-x  1 zhangsz zhangsz 1073741824  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.006
-rwxrwxr-x  1 zhangsz zhangsz  862685960  13 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.007
-rw-rw-r--  1 zhangsz zhangsz 7434417077  731  2020 iTOP-iMX6_android6.0.1_20200731.tar.gz
  • $ sudo apt install p7zip-full,安装 7z 解压缩工具

  • 7z 解压缩 7z x iTOP-iMX6_android6.0.1_20200731.tar.7z.001

zhangsz@zhangsz-virtual-machine:~/linux/imx6q/android 6.0.1$ 7z x iTOP-iMX6_android6.0.1_20200731.tar.7z.0017-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs 12th Gen Intel(R) Core(TM) i7-12700F (90672),ASM,AES-NI)Scanning the drive for archives:
1 file, 1073741824 bytes (1024 MiB)Extracting archive: iTOP-iMX6_android6.0.1_20200731.tar.7z.001
--
Path = iTOP-iMX6_android6.0.1_20200731.tar.7z.001
Type = Split
Physical Size = 1073741824
Volumes = 7
Total Physical Size = 7305136904
----
Path = iTOP-iMX6_android6.0.1_20200731.tar.7z
Size = 7305136904
--
Path = iTOP-iMX6_android6.0.1_20200731.tar.7z
Type = 7z
Physical Size = 7305136904
Headers Size = 186
Method = LZMA2:21
Solid = -
Blocks = 1Everything is OkSize:       7434417077
Compressed: 7305136904
  • 7z解压缩后为 iTOP-iMX6_android6.0.1_20200731.tar.gz

  • 再次解压,得到 iTOP-iMX6_android6.0.1,也就是基于 迅为 imx6q 开发板的 android 源码,其中包括 u-boot、Linux kernel

  • 解压缩 $ tar zxf iTOP-iMX6_android6.0.1_20200731.tar.gz

  • uboot-imx 路径:iTOP-iMX6_android6.0.1/bootable/bootloader/uboot-imx,这个就是 uboot 的源码,版本: 2015.04

在这里插入图片描述

编译 uboot-imx

  • 可以直接使用 uboot-imx 下 的 编译脚本:build_uboot.sh 编译,也可以把 uboot-imx 复制到其他的位置,单独编译 uboot

  • 可以把 uboot-imx 从 android 源码中 拷贝出来,加人 Git 管理

  • 编译脚本修改:建议使用: gcc-linaro-5.2-2015.11-2-x86_64_arm-linux-gnueabi,版本 ``gcc version 5.2.1 20151005 (Linaro GCC 5.2-2015.11-2)

export ARCH=arm
#export CROSS_COMPILE=$(pwd)/../../../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
export CROSS_COMPILE=arm-linux-gnueabi-make distcleanif [ "$1" = "plus" ]
then#plusecho "****************** build imx6q plus ******************"cp include/configs/mx6sabresd.h_2G include/configs/mx6sabresd.hmake mx6qpsabresdandroid_config
else#6qecho "****************** build imx6q ******************"#make mx6qsabresdandroid_configmake mx6qsabresd_defconfig
fimake -j4

编译产物

  • 编译生成了 u-boot.bin 与 u-boot.imx,这里的 u-boot.imx 用于烧写到 SD卡或者 emmc 中

烧写到 SD 卡

  • u-boot.imx 烧写到 SD 卡的 0x400(1K 字节)偏移的位置,SD 卡前面的1K 字节,用于分区表 MBR 与 预留空间

  • u-boot.imx 带有 IVT 等 imx6q 启动需要的信息,直接烧写 u-boot.bin 无法引导

  • 首先把 SD 卡通过读卡器,插入电脑,在 ubuntu 中连接,然后 df -l 确认 SD 卡识别的设备号,如 sdb sdc

在这里插入图片描述

  • 如我的 SD 卡识别为 : /dev/sdc1 ~ /dev/sdc4,SD 卡设备为: /dev/sdc/dev/sdc1 ~ /dev/sdc4 代表有四个分区

  • 由于 u-boot 烧写到 SD 卡 1K字节偏移的位置,所以不会影响分区表,但是 SD 卡分区时,需要在SD 前面偏移一定的空间,如偏移8M字节,用于 u-boot 与 u-boot env 变量的保存。

  • 烧写命令使用: sudo dd if=u-boot.imx of=/dev/sdc bs=512 seek=2 && sync

注意这里的 if=u-boot.imx 输入文件
of=/dev/sdc ,这里是 SD 设备,不是分区
bs=512 读写的块大小,512字节
seek=2 前面2个块(1K字节)偏移
sync 为了数据同步到 SD 卡中

zhangsz@zhangsz-virtual-machine:~/linux/imx6q/uboot/uboot-imx_android6.0.1$ sudo dd if=u-boot.imx of=/dev/sdc bs=512 seek=2 && sync
814+0 records in
814+0 records out
416768 bytes (417 kB, 407 KiB) copied, 0.0644534 s, 6.5 MB/s

修改 uboot-imx

  • 直接编译的 uboot-imx,发现启动有问题,首先需要根据开发板 DDR 的配置,我当前的开发板是 2G DDR,默认是1G DDR 配置,所以需要更改

  • 进入 board/freescale/mx6sabresd$ cp mx6q_4x_mt41j128.cfg_2G mx6q_4x_mt41j128.cfg,也就是把 DDR 配置改为 2G的

  • 修改 sd 卡引脚配置,主要是 CD 引脚,需要根据原理图进行修改

  • 迅为开发板 imx6q, sd 卡 cd 引脚为:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

static iomux_v3_cfg_t const usdhc2_pads[] = {MX6_PAD_SD2_CLK__SD2_CLK	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_SD2_CMD__SD2_CMD	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_SD2_DAT0__SD2_DATA0	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_SD2_DAT1__SD2_DATA1	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_SD2_DAT2__SD2_DATA2	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_SD2_DAT3__SD2_DATA3	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_NANDF_D4__SD2_DATA4	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_NANDF_D5__SD2_DATA5	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_NANDF_D6__SD2_DATA6	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_NANDF_D7__SD2_DATA7	| MUX_PAD_CTRL(USDHC_PAD_CTRL),MX6_PAD_GPIO_4__GPIO1_IO04	| MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
};

在这里插入图片描述

  • 还需要修改: USDHC2_CD_GPIO
#define USDHC2_CD_GPIO	IMX_GPIO_NR(1, 4)

在这里插入图片描述

重新编译并下载

在这里插入图片描述

  • 运行效果
U-Boot 2015.04 (Jan 04 2023 - 20:53:15)CPU:   Freescale i.MX6Q rev1.5 at 792 MHz
CPU:   Temperature 16 C
Reset cause: POR
Board: MX6-SabreSD
I2C:   ready
DRAM:  2 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
LCD type:5.0
bootsystem:android
bootargs=console=ttymxc0,115200 androidboot.console=ttymxc0 consoleblank=0 vmalloc=256M init=/init video=mxcfb0:dev=lcd,VGA_800480,if=RGB24,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off androidboot.hardware=freescale cma=384M
Display: 5.0 (800x480)
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC [PRIME]
Normal Boot
Hit any key to stop autoboot:  0
reading boot-topeet_9.7.img
** Unable to read file boot-topeet_9.7.img **
Unknown command 'boota' - try 'help'
=>
  • 根据LCD 屏,修改 LCD type,我当前的屏为 5寸屏,修改 setenv lcdtype '5.0'
=> setenv lcdtype '5.0'
=> saveenv
Saving Environment to MMC...
Writing to MMC(0)... done
=> reset
resetting ...

LCD 显示

  • uboot 默认显示 LOGO 图片

在这里插入图片描述

在这里插入图片描述

  • 【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动成功

小结

  • 可以直接使用 NXP 官方的 u-boot 进行移植,不过 迅为提供的 u-boot,网络驱动、LCD 驱动都适配好了


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部