imx6ull 5 之BSP工程管理

2021-10-24 05:57:53 字數 4005 閱讀 7439

一、bsp工程管理原理

為了模組化管理**,同一屬性的檔案存放在同一目錄中

1、新建所需的資料夾,將同一屬性的檔案放到相應的資料夾中

2、修改clk、led、delay驅動,建立對應的驅動檔案,然後放到對應的目錄中

3、根據編寫的新驅動檔案,修改main.c檔案內容

—設定vscode標頭檔案路徑,先建立.vscode 目錄,ctrl + shift + p 。然後開啟 c/c++:ed,會在.vscode目錄下生成 c_cpp_properties.json

再新增目錄

/**"

,"$/bsp/clk"

,//"$/bsp/delay",/

/<

----

----

----

-------

"$/bsp/led",/

/<

----

----

----

-------

"$/imx6u",/

/<

----

----

----

-------

"$/project"//

<

----

----

----

-------

],"defines":[

],"compilerpath"

:"/usr/bin/gcc"

,"cstandard"

:"gnu11"

,"cppstandard"

:"gnu++14"

,"intellisensemode"

:"clang-x64"}]

,"version":4

}

二、makefile編寫

makefile指定標頭檔案路徑,需要 -i。

編譯原始碼的時候,需要指定標頭檔案路徑

比如:bsp/clk/bsp_clk.h 變為 -ibsp/clk/bsp_clk.h

wildcard 讓萬用字元在變數裡面展開

objects := $(wildcard *.o)

讓 objects 的值是所有[.o]的檔名的集合,

這種用法由關鍵字「wildcard」指出

= imx6u \ //行連線符後面不能接空格!!必須要立即換行

bsp/clk \

bsp/led \

bsp/delay

srcdirs :

= project \

bsp/clk \

bsp/led \

bsp/delay

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)

$(target).bin : $(objs)

$(ld) -timx6u.lds -o $(target).elf $^

$(objcpoy) -o binary -s $(target).elf $@

$(objdump) -d -m arm $(target).elf > $(target).dis

$(sobjs) : obj/%.o : %.s

$(cc) -wall -nostdlib -c -o2 $(include) -o $@ $<

$(cobjs) : obj/%.o : %.c

$(cc) -wall -nostdlib -c -o2 $(include) -o $@ $<

.phony:clean

clean:

rm -rf $(target).elf $(target).bin $(target).dis $(objs)

print:

@echo include = $(include)

@echo sfiles = $(sfiles)

@echo cfiles = $(cfiles)

@echo sfilendir = $(sfilendir)

@echo cfilendir = $(cfilendir)

@echo sobjs = $(sobjs)

@echo cobjs = $(cobjs)

@echo objs = $(objs)

執行make print

include =

-i imx6u -i bsp/clk -i bsp/led -i bsp/delay

sfiles = project/start.s

cfiles = project/main.c bsp/clk/bsp_clk.c bsp/led/bsp_led.c bsp/delay/bsp_delay.c

sfilendir = start.s

cfilendir = main.c bsp_clk.c bsp_led.c bsp_delay.c

sobjs = obj/start.o

cobjs = obj/main.o obj/bsp_clk.o obj/bsp_led.o obj/bsp_delay.o

objs = obj/start.o obj/main.o obj/bsp_clk.o obj/bsp_led.o obj/bsp_delay.o

imx6u.lds

sections

.data align(4

):.rodata align(4

):__bss_start =.;

.bss align(4

):__bss_end=.;

}

使用 -o2 ,要用delay(volatile),不然延時函式就會失效。或者不用-o2優化編譯

行連線符 \ ,後面要立即換行,不能接空格再換行

重複包含標頭檔案似乎沒有報錯,最好共同要包含的標頭檔案(可能會造成重複的.h)放到同乙個 .h 檔案裡。或者每個標頭檔案都用ifndef 。。。

touch 已存在的目錄/檔名,直接在這個目錄下建立檔案

vpath關鍵字 指定原始檔的路徑( .s .c)

gcc編譯時一定要-i加標頭檔案路徑

IMX6ULL學習手冊之核心編譯

1.uboot是乙個複雜的裸機程式。2.uboot是乙個bootloader,用於啟動linux系統,主要是用來初始化ddr的,引導linux核心的啟動,因為linux是執行在ddr中的。但是imx是個例外。uboot是通用的,支援多種架構。1.uboot有乙個原始碼官網,但是你的晶元是由不同的生產...

imx6ull 1 之彙編點亮led

鏈結就是將所有的.o檔案鏈結到一起,並鏈結到指定的位置,本實驗鏈結時要指定連線起始位址。鏈結起始位址就是 執行的起始位址,有可能是儲存 的起始位址 對於6ull來說,鏈結起始位址由我們自己來指定,cortex a系列的晶元內部有rom,都沒有flash,但rom不能用。所以應該指向ram位址。ram...

imx6ull開發環境搭建之tftp nfs搭建

imx6ull開發環境之系統安裝 請參考 在嵌入式開發過程中,不管是核心還是應用,自然不是每次更改都需要像微控制器開發那樣燒錄進去執行,而通常我們使用的是tftp nfs的方式,在kernel起來之後會掛載我們的server上的nfs網路檔案系統,而我們新編譯的可執行檔案,可直接反應到開發板上的nf...