前言
-
最近为了深入研究 嵌入式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 1月 3 17:09 .
drwxrwxr-x 12 zhangsz zhangsz 4096 1月 3 16:53 ..
drwxr-xr-x 28 zhangsz zhangsz 4096 1月 3 17:14 iTOP-iMX6_android6.0.1
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.001
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.002
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.003
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.004
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.005
-rwxrwxr-x 1 zhangsz zhangsz 1073741824 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.006
-rwxrwxr-x 1 zhangsz zhangsz 862685960 1月 3 16:54 iTOP-iMX6_android6.0.1_20200731.tar.7z.007
-rw-rw-r-- 1 zhangsz zhangsz 7434417077 7月 31 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.001
7-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 = 1
Everything is Ok
Size: 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 distclean
if [ "$1" = "plus" ]
then
#plus
echo "****************** build imx6q plus ******************"
cp include/configs/mx6sabresd.h_2G include/configs/mx6sabresd.h
make mx6qpsabresdandroid_config
else
#6q
echo "****************** build imx6q ******************"
#make mx6qsabresdandroid_config
make mx6qsabresd_defconfig
fi
make -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 驱动都适配好了