1.原始碼結構
dir目錄: --------- bin:可執行檔案生成目錄
--------- src:源檔案目錄------main.c 主程式檔案
------start.s 彙編啟動檔案
-------- makefile 編譯指令碼
-------- raspi.lds 鏈結檔案
2.makefile檔案
arch = arm-none-eabi #宣告交叉編譯工具鏈
cc = $-gcc #交叉編譯c檔案
cpp = $-g++ #交叉編譯c++檔案
as = $-as #交叉編譯彙編檔案
ld = $-ld #鏈結工具
ar = $-ar
objcopy = $-objcopy #格式轉化工具
platform = raspi
cflags = -o0 -g -std=gnu99 -werror -d__$(platform)__ -draspberry_pi -fno-builtin
asflags = -g
cflags_for_target = -mcpu=arm1176jzf-s #核心引數
asflags_for_target = -mcpu=arm1176jzf-s
ldflags = -nostdlib -static --error-unresolved-symbols #鏈結引數
src_dir := src #原始檔
inc_dir := $(addsuffix /include,$(src_dir)) #標頭檔案
build_dir := $(addsuffix /build,$(src_dir))
asrc := $(foreach sdir,$(src_dir),$(wildcard $(sdir)/*.s))
aobj := $(asrc:.s=.o)
csrc := $(foreach sdir,$(src_dir),$(wildcard $(sdir)/*.c))
cobj := $(csrc:.c=.o)
includes := -isrc $(addprefix -i,$(src_dir) $(inc_dir))
vpath %.c $(src_dir) #獲取所有c檔案列表
vpath %.cpp $(src_dir) #獲取所有c++檔案列表
vpath %.s $(src_dir) #獲取所有彙編檔案列表
%.o: %.c
$(cc) $(cflags_for_target) $(includes) $(cflags) -c -o $*.o $<
%.o: %.s
$(as) $(asflags_for_target) $(includes) $(asflags) -o $*.o $<
obj = $(aobj) $(cobj)
bin/kernel.img: bin/kernel.elf #轉化kernel.img
$ -o binary $< $@
bin/kernel.elf: raspi.ld $(obj)
$ $ $(obj) -map bin/kernel.map -o $@ -t raspi.ld #鏈結kernel.elf
clean:
rm -f bin/*.elf bin/*.img bin/*.map $(obj) #make clean
上面是裸核驅動開發工程進行管理的makefile模板,
可以向src目錄下新增新的驅動c檔案,彙編s檔案,makefile不用做修改
樹莓派外設開發
這裡只列舉了我初次開發時的一些筆記,具體其他的可參考博文 普通io口 input output pwm 串列埠uart iic spi iis等介面 wiringpi庫是樹莓派io控制庫,提供豐富的介面 gpio控制 中斷 多執行緒等。在使用wiringpi庫時,需要包含標頭檔案 include 編...
樹莓派 按鍵程式
樹莓派3b wiringpi庫的使用 button按鈕操作 五 樹莓派3b wiringpi庫的使用 點亮led 如何編譯的教程 樹莓派學習筆記 wiringpi簡介 安裝和管腳說明 檢視樹莓派gpio引腳編號及定義 gpio readall輸出如下,說明wiringpi庫已經安裝成功。原來的官方鏈...
樹莓派環境處理 樹莓派開發環境配置
接上篇,準備樹莓派開發環境的配置。買回來的樹莓派一般會帶乙個系統,在這裡我建議自己定製系統,以樹莓派桌面系統為藍本搭建開發環境。你需要準備一張 16g的高速tf卡,用以安裝系統。4b取消了全尺寸的hdmi,還需要準備乙個minihdmi轉hdmi的線纜來連線顯示器。需要3a以上的電源,否則連線鍵盤滑...