一、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...