i.MX6ULL終結者串列埠格式化函數例程編譯及執行

2020-10-18 12:00:22

我們開啟Makefile檔案,輸入下面的內容:

  1 CROSS_COMPILE   ?= arm-linux-gnueabihf-
  2 TARGET ?= printf
  3 
  4 CC := $(CROSS_COMPILE)gcc
  5 LD := $(CROSS_COMPILE)ld
  6 OBJCOPY := $(CROSS_COMPILE)objcopy
  7 OBJDUMP := $(CROSS_COMPILE)objdump
  8 
  9 LIBPATH := -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm    -linux-gnueabihf/4.9.4
 10 
 11 
 12 INCDIRS := core \
 13                                    stdio/include \
 14                                    drivers/clk \
 15                                    drivers/led \
 16                                    drivers/delay \
 17                                    drivers/beep \
 18                                    drivers/gpio \
 19                                    drivers/key  \
 20                                    drivers/exit \
 21                                    drivers/int  \
 22                                    drivers/epittimer    \
 23                                    drivers/keyfilter    \
 24                                    drivers/uart
 25 
 26 SRCDIRS := ./   \
 27                                    stdio/lib \
 28                                    drivers/clk \
 29                                    drivers/led \
 30                                    drivers/delay \
 31                                    drivers/beep \
 32                                    drivers/gpio \
 33                                    drivers/key  \
 34                                    drivers/exit \
 35                                    drivers/int  \
 36                                    drivers/epittimer    \
 37                                    drivers/keyfilter    \
 38                                    drivers/uart
 39 
 40 
 41 INCLUDE := $(patsubst %, -I %, $(INCDIRS))
 42 
 43 SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
 44 CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
 45 
 46 SFILENDIR := $(notdir  $(SFILES))
 47 CFILENDIR := $(notdir  $(CFILES))
 48 
 49 SOBJS := $(patsubst %, output/%, $(SFILENDIR:.S=.o))
 50 COBJS := $(patsubst %, output/%, $(CFILENDIR:.c=.o))
 51 OBJS := $(SOBJS) $(COBJS)
 52 
 53 VPATH := $(SRCDIRS)
 54 
 55 .PHONY: clean
 56         
 57 $(TARGET).bin : $(OBJS)
 58         $(LD) -Timx6ul.lds -o $(TARGET).elf $^ $(LIBPATH)
 59         $(OBJCOPY) -O binary -S $(TARGET).elf $@
 60 
 61 $(SOBJS) : output/%.o : %.S
 62         $(CC) -Wall -nostdlib -fno-builtin -c -O2  $(INCLUDE) -o $@ $<
 63 
 64 $(COBJS) : output/%.o : %.c
 65         $(CC) -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c -O2  $(INCLUDE) -o $@ $<
 66         
 67 clean:
 68         rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

Makefile檔案我們主要修改下面幾個地方:
第2行的target賦值改成printf。
第13行新增格式化函數庫的標頭檔案「stdio/include」到INCDIRS變數。
第27行新增格式化函數庫的.c檔案「stdio/lib」到SRCDIRS變數。
第65行新增-Wa,-mimplicit-it=thumb編譯選項。

連結檔案保持不變。

然後我們在終端輸入「make」命令,開始編譯,編譯完成後生成printf.bin檔案,如圖 1所示:
在這裡插入圖片描述

圖 1

然後在終端輸入命令「chmod 777 create_imx」修改create_imx檔案具有可執行許可權,如圖 2所示:
在這裡插入圖片描述

圖 2

最後在終端執行命令「./create_imx printf.bin」生成最終的映象檔案「bare.imx」,如圖 3所示:
在這裡插入圖片描述

圖 3

然後我們將生成的bare.imx檔案通過SSH軟體拷貝到mfg燒寫工具內對應目錄下,這一步可以參考前面的燒寫章節。將撥碼開關切換成燒寫模式,上電燒寫等待燒寫完成,然後將撥碼開關切換回啟動模式,然後我們開啟SecureCRT,按照上一章節的設定,設定完進入SecureCRT的串列埠模式下,然後開發板上電,可以看到串列埠列印資訊如圖 4所示:
在這裡插入圖片描述

圖 4

根據提示輸入兩個整數,中間用空格分開,輸入完成按鍵回車按鍵,可以看到SecureCRT的列印資訊如圖 5所示:
在這裡插入圖片描述

圖 5

從上圖可以看到我們分別輸入了整數21和23,它們的和是44。通過執行結果可以看到我們的printf和scanf格式化函數移植成功。在這裡插入圖片描述