以前からSTM32F103RC向けにフォークしたソースを使っているのですが、具体的にフォークさせる方法を上げていなかったので、備忘録として本稿を上げることにしました。
フォークとは言うものの、一からソースフォークするわけではなく、すでにNUTTXがサポートしているCPUの範囲であることが前提です。なお、本稿ではnuttx-9.1でフォークしました。
それでは、早速設定です。まず最初に、フォークする名前等を決めておきます。
board name small: f103rcbb board name big : F103RCBB board CPU : STM32F103RC RAM Size : 49152続いてフォークする設定をnuttx/boards/Kconfigに3箇所追加します。(2023/10/20追記:config ARCH_BOARD_NUCLEO_F103RBの後ろでもどこでも構いません。) 一箇所目
config ARCH_BOARD_F103RCBB bool "F103RC black board" depends on ARCH_CHIP_STM32F103RC select ARCH_HAVE_LEDS select ARCH_HAVE_BUTTONS select ARCH_HAVE_IRQBUTTONS ---help--- F103RC black board based on the STMicro STM32F103RCT6 MCU.二箇所目
default "f103rcbb" if ARCH_BOARD_F103RCBB三箇所目
if ARCH_BOARD_F103RCBB source "boards/arm/stm32/f103rcbb/Kconfig" endifなお先頭の空白はスペースではなく、タブです。続いてフォーク元のソースをコピーします。
cd /usr/src/nuttx/nuttx cp -a boards/arm/stm32/nucleo-f103rb boards/arm/stm32/f103rcbbあとは、フォークしたソースを編集していきます。修正箇所が多い項目を手動で編集すると間違いが起こりやすいので、findやsedを使います。
cd /usr/src/nuttx/nuttx/boards/arm/stm32/f103rcbb for f in `find . -type f`; do sed -i 's/NUCLEO_F103RB/F103RCBB/g' $f;done for f in `find . -type f`; do sed -i 's/nucleo-f103rb/f103rcbb/g' $f;done for f in `find . -type f`; do sed -i 's/STM32F103RB/STM32F103RC/g' $f;done for f in `find . -type f`; do sed -i 's/RAM_SIZE=20480/RAM_SIZE=49152/g' $f;done mv src/nucleo-f103rb.h src/f103rcbb.h続いてリンカースクリプトの編集を行います。viを使ってもよいですし、sedで編集してもどちらでも構いません。
sed -i 's/128K/256K/g' scripts/ld.script sed -i 's/20K/48K/g' scripts/ld.scriptNucleo-f103rbとf103rcの違いは少なく、基本的なソースフォークはここまででできていますので、nshをコンパイルし、ターゲットに書き込みしてみます。
cd /usr/src/nuttx/nuttx make distclean | grep zzzz; tools/configure.sh f103rcbb/nsh; \ make clean | grep zzzz; make -j4 | grep zzzz openocd.exe -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg \ -c "init" -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000 bin" \ -c shutdownフォーク元のnucleo-f103rbはnshのシリアルポートをUSART2, PA2=TX, PA3=RXにしているので、USBシリアルのTXをターゲットのRXに、RXをターゲットのTXに接続して動作確認してください。 後は、ボードにあわせてsrc以下とinclude/board.hなど必要な設定を編集します。button, led等ですが、フォーク対象によっては、RCCクロックの設定をinclude/board.hで変更する必要などもありますが、本稿では触れません。また、nuttx/arch/arm/stm32/f103rcbb/configs以下のコンフィグの内、メモリ容量や対象CPUの確認などを行ってください。 今回は以上です。それでは。
コメント
コメントを投稿