pixhawk本身的硬體資源有限,咱們可能需要將pixhawk移植到咱們自己的板子上,但是又想不影響原版pixhawk的使用,這就需要增加編譯命令了。可是網上查不到如何增加編譯命令的帖子,所以本人只有自己研究,經過幾天的各種實驗,終於成功的新增了新板子的編譯命令。
以下講解基於pixhawk1.0.1版本
先講原理:
編譯命令是否存在取決於makefiles資料夾中的config_*.mk檔案是否存在:
例如我們編譯pixhawk的命令是:px4fmu-v2_default ,之所以有這個命令是由於存在檔案firmware/makefiles/config_px4fmu-v2_default.mk,這個檔案刪了這個命令就無效了.
config_px4fmu-v2_default.mk中包含這句話:
romfs_optional_files =$(px4_base)/images/px4io-v2_default.bin #這句話制定了所對應的io處理器檔案
makefile會根據.mk檔案的名稱尋找io晶元的mk檔案:
例如:config_px4fmu-v2_default.mk
對應的是config_px4io-v2_default.mk,就算將romfs_optional_files
的值設定為別的,也改變不了對應關係。
config_*.mk檔案中包含應用層模組的裁剪資訊,nuttx作業系統的配置是在board_*.mk中:
敲命令"makearchives",就會將每個board_*.mk編譯出來,例如board_px4fmu-v2.mk就是v2版本硬體的fmu晶元的作業系統配置。
具體選擇哪個board_*.mk檔案是由config_*.mk檔案的名字決定的:
例如config_px4fmu-v2_default.mk對應著board_px4fmu-v2.mk
makefile會根據board_*.mk檔案的名字去尋找板子的配置兩個資料夾
:1.firmware
/nuttx-configs
/ #例如board_px4fmu-v2.mk對應其中的px4fmu-v2資料夾
2.firmware
/src
/drivers
/boards
/ #例如board_px4fmu-v2.mk對應其中的px4fmu-v2資料夾
firmware/image資料夾中的*.prototype與board_*.mk檔名稱對應:
例如,board_px4fmu-v2.mk與px4fmu-v2.prototype對應
再講步驟:
1.例如新增命令,make px4fmu-makekam_default
2.在firmware/makefiles資料夾中新增config_px4fmu-makekam_default.mk與config_px4io-makekam_default.mk,修改其中的bin檔名稱,和drivers/boards/模組的包含。
3.在firmware/makefile資料夾中新增board_px4fmu-makekam.mk與board_px4io-makekam.mk
4.在firmware/image資料夾中新增px4fmu-makekam.prototype與px4io-makekam.prototype
5.在firmware/src/drivers/boards/中增加px4fmu-makekam與px4io-makekam資料夾
6.同理在firmware/nuttx-configs中增加兩個資料夾
7.修改src/module/px4iofirmware/module.mk,因為其中由編譯命令條件分支,而我們的分支是新的
8.rcs指令碼和px4io.cpp中會命令fmu燒寫io,燒寫時選擇的bin檔名需要修改為"px4io-makekam_default.bin".
9.給nutttx-config/我們的目錄/nsh/defconfig中增加我們自己的巨集定義,於是就可以形成分支了。
關於defconfig,其實這個檔案是nuttx的配置檔案,所有的硬體資訊都在這個檔案中配置,值得好好研究,我們也可以在裡面增加自己的巨集。
cmake中新增 g編譯選項
在cmake 3.12之前,新增編譯選項可以如下方式新增 add definitions wall g 新增了之後,就相當於在編譯的時候加上了 wall g選項 沒加之前 gcc c main.c o test 新增之後,相當於 gcc g wall c main.c o test書中給出的示例如下...
cmake中新增 fPIC編譯選項方法
relocation r x86 64 32 against text can not be used when a shared object recompile with fpic 分別驗證過以下二種方法 第一種 筆者所採用的,因需修改原始cmakelists.txt檔案,感覺不太方便,非常希望...
新增除錯選項編譯出現錯誤
sky sky lenovo ideapad y470 work gcc o ggdb3 statistic statistic.c statistic 在函式 fini 中 fini 0x0 fini 被多次定義 usr bin ld usr lib debug usr lib x86 64 li...