WSL2编译IMX6ULL裸机程序Win10通过Win32DiskImager烧录SD卡

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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值