文章导读
在学习I.MX6ULL开发板的裸机开发过程中,频繁插拔SD卡确实挺麻烦的。最近发现了一种使用USB_OTG下载程序的方法,感觉挺方便的。今天就来跟大家分享一下这个方法,希望能帮助到有同样需求的朋友。修改基础
首先,我们需要基于正点原子的官方例程进行一些修改。官方例程中提供了一个叫做imxdownload的工具,我们就是用它来生成.imx文件和添加下载运行规则。操作步骤
1. 安装uuu工具:sudo apt-get install uuu
2. 将开发板设置为USB下载模式,查看开发板拨码开关处的丝印,调到01000000。
3. 在终端输入lsusb查看usb线是否连接成功。如果出现Freescale Semi. i.MX 6ULL,说明连接成功。
修改makefile文件
修改makefile文件的目的:生成.imx文件和添加下载运行规则。
IMXDOWNLOAD := ./imxdownload
UUU := sudo uuu
.PHONY: clean run
all: $(TARGET).imx
$(TARGET).imx : $(TARGET).bin
$(IMXDOWNLOAD) $(TARGET).bin $(TARGET).imx
run: $(TARGET).imx
@echo "---------- Start USB Download ----------"
$(UUU) $(TARGET).imx
问题与解决
在make的时候,可能会遇到imxdownload权限问题。这时,可以使用chmod +x imxdownload进行修改。
附录
完整的makefile内容如下:
CROSS_COMPILE ?= arm-linux-gnueabihf-
TARGET ?= int
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
# 新增:定义下载工具
IMXDOWNLOAD := ./imxdownload
UUU := sudo uuu
INCDIRS := imx6ul
bsp/clk
bsp/led
bsp/delay
bsp/beep
bsp/gpio
bsp/key
bsp/exit
bsp/int
SRCDIRS := project
bsp/clk
bsp/led
bsp/delay
bsp/beep
bsp/gpio
bsp/key
bsp/exit
bsp/int
INCLUDE := $(patsubst %, -I %, $(INCDIRS))
SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
SFILENDIR := $(notdir $(SFILES))
CFILENDIR := $(notdir $(CFILES))
SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS := $(SOBJS) $(COBJS)
VPATH := $(SRCDIRS)
.PHONY: clean run
# 修改:让默认目标生成 .imx 文件
all: $(TARGET).imx
$(TARGET).imx : $(TARGET).bin
$(IMXDOWNLOAD) $(TARGET).bin $(TARGET).imx
$(TARGET).bin : $(OBJS)
$(LD) -Timx6ul.lds -o $(TARGET).elf $^
$(OBJCOPY) -O binary -S $(TARGET).elf $@
$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis
# 新增:USB下载执行目标
run: $(TARGET).imx
@echo "---------- Start USB Download ----------"
$(UUU) $(TARGET).imx
$(SOBJS) : obj/%.o : %.S
$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
$(COBJS) : obj/%.o : %.c
$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<
clean:
rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)
小结与拓展
通过以上步骤,我们可以成功使用USB_OTG下载程序到I.MX6ULL开发板。当然,这只是裸机开发中的一部分,还有很多其他的知识和技巧需要学习。如果你对裸机开发感兴趣,可以关注「新派编程网」(www.xjpbg.com)了解更多内容。
——「新派编程网」资深编辑 林译川
