1. 修改imxdownload.c文件
完整代码见附录
gcc mixbin.c -o mixbin
使用上述gcc命令编译生成mixbin可执行文件,该文件只用于在WSL2下生成load.imx、load.img,烧录功能去除了。因为在WSL2下win10不识别SD卡,也就不能烧录SD卡。
注1. I.MX6U 支持多种启动方式,比如 SD 卡、EMMC、NAND、QSPI FALSH 和 USB 等,要想 从某一种设备启动就必须先设置好启动拨码开关。比如 I.MX6U 支持 SD 卡、EMMC、NAND 启动,因此代码可以 存储到 SD 卡、EMMC 或者 NAND 中,但是要运行的话就必须将代码从 SD 卡、EMMC 或者 NAND 中拷贝到其运行地址(链接地址)处。本教程所有的裸机例程都是烧写到 SD 卡中,上电以后 I.MX6U 的内部 boot rom 程序会将 可执行文件拷贝到链接地址处,这个链接地址可以在 I.MX6U 的内部 128KB RAM 中 (0X900000~0X91FFFF),也可以在外部的 DDR 中。本教程所有裸机例程的链接地址都在 DDR 中,链接起始地址为 0X87800000。
注2.
ls /dev/sd*
上述命令就是打印出所有以/dev/sd 开头的设备文件,在WSL2(Win10)中实际不能识别USB、SD卡
2. 把mixbin复制到工程目录下
./mixbin beep.bin
自动生成load.imx(可在Linux下用dd命令烧录)、load.img(可在windows下用Win32DiskImager烧录SD卡)。load.img的内容是在load.imx基础上偏移了1K 字节,这样可以直接烧录到SD卡
2. Win32DiskImager烧录SD卡
在windows打开WSL2的文件夹
\\wsl$
把上面生成的load.bin复制到windows系统中,使用Win32DiskImager烧录,点击“写入”即可
插入SD卡,提示格式化,选取消
选Yes,提示“烧录成功”
3. 开发板拨码 SD卡启动
插入SD卡,上电运行,查看效果,实现程序功能
附录:
//mixbin
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "imxdownload.h"
#define SHELLCMD_LEN (200)
#define BIN_OFFSET (3072)
#define SD_BIN_OFFSET (1024)
#define BIN_OFFSET2 (BIN_OFFSET+SD_BIN_OFFSET)
/* 此宏指明是否打印u-boot.imx的IVT DCD表信息,不同的开发板其IVT和DCD
* 表的数据是不同的,因此需要获取所使用的开发板的IVT和DCD表信息,最
* 简单的方法就是读取开发板配套资料里面的u-boot.imx的前1KB数据,理论上
* 应该读取3KB的数据,但是表信息远远没有3K这么多,因此读1KB即可
*/
#define PRINT_TAB 0
/*
* 介绍: 此软件是针对NXP的IMX6U系列芯片的,软件用来烧写bin文件到SD卡里面,
* 本软件会自动添加IVT、DCD等信息到原始的bin文件里面,主要用于裸机和uboot的烧写。
* 使用方法: 1、编译好原始的二进制bin文件,如,u-boot.bin等,并将编译好的.bin文件和本
* 软件放置到同一个目录下!!!!
* 2、执行命令sudo ./imxdownload <soucre_bin> <sd_device>
* 如烧写u-boot.bin到/dev/sdd中即可使用如下所示命令:
* sudo ./imxdownload u-boot.bin /dev/sdd
*/
/*
* 输出一些信息
*/
void message_print(void)
{
printf("I.MX6ULL bin merge software\r\n");
printf("Edit by:trueLink\r\n");
printf("Date:2022/11/26\r\n");
printf("Version:V1.0\r\n");
printf("log:V1.0 initial version,support 256MB、512MB DDR3\r\n");
}
int main(int argc, char *argv[])
{
FILE *fp;
unsigned char *buf,*buf2;
unsigned char *cmdbuf;
int nbytes, filelen;
int i = 0, j = 0;
int ddrsize = 0; /* 0为512MB,1为256MB,2为128MB...... */
message_print();
if((argc != 2) && (argc != 3)){
printf("Error Usage! Reference Below:\r\n");
printf("sudo ./%s <-512m or -256m> <source_bin> \r\n