スキップしてメイン コンテンツに移動

投稿

STM32F407VにてNUTTXを実行:その3 On board SPI flashとSDカードを同時に使う

STM32F4Discoveryと異なり、F4VBBにはSPI接続のW25Q16 Nor Flashが載っています。この接続はSPI1で接続しているのですが、接続は、PA5,PA6,PA7ではなく、PB3,PB4,PB5で接続されていて、CSはPB0で接続されていますので、STM32F4discoveryのコードそのままでは動きません。 また、ソースコードをみたところ、W25Qの初期化コードもF4Discoveryのコードには入っておらず、これもソースコードを修正しなければいけません。そこでnuttxでのデバイス初期化について、ネットで調べたところ、https://groups.google.com/g/nuttx/c/y0x8ud02rxA によると、CSピンの初期化は以下の様にするとありました。 stm32_gpiowrite(GPIO_DEVICE_CS_PIN, !selected); また、SPIデバイスの初期化は、https://cwiki.apache.org/confluence/display/NUTTX/Using+SmartFS に、例えば、 int board_app_initialize(uintptr_t arg) { FAR struct spi_dev_s *spi; FAR struct mtd_dev_s *mtd; int minor = 0; /* Initialize the SPI bus #3 with an M25P FLASH driver */ spi = stm32_spibus_initialize(3); mtd = m25p_initialize(spi); /* Initialize SMART MTD to work with M25P FLASH device */ smart_initialize(minor, mtd, NULL); } の様にすると記述がありました。そこで、ソースコードを見てみると、board_app_initializeは、stm32_bringup.cの int stm32_bringup(void) に該当することがわかりました。これでとりあえず足掛かりはできたので、早速コードを修正して動作させたところ、とりあえず動...

STM32F407VにてNUTTXを実行:その2 MicroSD Cardをマウント

F4V Black Boardには、MicroSD カードスロットとSIPフラッシュが載っているのですが、今回はMicroSDカードをマウントしてみました。 それでは早速設定していきます。 cd /usr/src/nutxx-9.1.0/nuttx make distclean tools/configure.sh stm32f4discovery/nsh Copy files Select CONFIG_HOST_LINUX=y Refreshing... make menuconfig 最初にSystem Typeの STM32 Peripheral Supportを選択し、SDIOをEnableにします。 続いてexitし、System Typeの設定に戻ると、項目に SDIO Configuration ---> が表示されます。選択すると、以下の様に表示されますが、F4VBBの場合ボード側にSDIOのプルアップ抵抗が載っているので"Enable internal Pull-Ups"の設定はEnableにせず、そのままにしておきます。 [ ] SDIO Card support (NEW) [ ] Enable internal Pull-Ups (NEW) (0x00010000) SDIO DMA priority (NEW) [ ] Use D1 only (NEW) ここから、exitを二回エンターして、メインメニューに戻り、今度は RTOS Features ---> を選択し、さらに、 Work queue support ---> に入ります。ここで、 [*] High priority (kernel) worker thread を選択すると、9.1.0の場合、 [ ] Generic work notifier (NEW) [*] High priority (kernel) worker thread (1) Number of high-priority worker threads (NEW) (224) High priority worker thread priority (NEW) (2048) High priority ...

STM32F407VにてNUTTXを実行:その1

STM32F407VET6とMicro SDスロットと2MBのSPIフラッシュが載った、通称 F4V Black Boardというボードが手元にあったので、NUTTX(Real Time OS)をビルド・実行してみました。 では早速、設定していきますが、コンフィグレーションには、クロスコンパイラ類と、kconfig-frontendsが必要なので、先にhostマシン(Debian 11/Bullseye)にインストールしておきます。 sudo apt-get install kconfig-frontends binutils-arm-none-eabi gcc-arm-none-eabi 2020/9/21日時点での、wiki上でのリリース済の最新バージョンは、9.0の様ですが、( https://cwiki.apache.org/confluence/display/NUTTX/NuttX+9.0 ) git repository上での最新ブランチはrelease 9.1.0の様子なので、こちらをクローンしました。 mkdir /usr/src/nuttx-9.1.0 cd /usr/src/nuttx-9.1.0 git clone -b nuttx-9.1.0 https://github.com/apache/incubator-nuttx nuttx git clone -b nuttx-9.1.0 https://github.com/apache/incubator-nuttx-apps apps 今回は、stm32f407v black board (stm32f407ve, microsd slot, spi 16Mbit flash付き)なんですが、STM32F4DISCOVERY(stm32f407vg)の物をコンパイル/インストールしてみます。 NUTTXとSTM32F4DISCOVERYのwikiを参考にしました。 https://cwiki.apache.org/confluence/display/NUTTX/Wiki https://cwiki.apache.org/confluence/display/NUTTX/STM32F4DISCOVERY+Unix cd /usr/src/nuttx-9.1....

DHCPv6-PDで固定のprefixとaddressを割り当てる

親ルータから子ルータ、子ルータから孫ルータへ等とPrefix Delegationをおこなっていて気が付いたのは、Prefixが動的に割り当てられるため、上位のルータのPREFIXが変更されると下位のルータが通信できなくなる点でした。つまり、Prefix Delegationはするが固定で割り当てる必要があるといまさらながら気が付きました。そこで調べたところ、ホスト固定でprefixを付与する方法があるようなので、本稿をUPしてみました。 まず、最初にしらべないといけないのは、クライアント(下位ルータ)のDUIDです。上位のルータの/var/log/syslogに以下のようなログがあるのでそれを利用します。 dhcpd[1954]: Reply NA: address 2XXX:aaaa:bbbb:cc00:1111:2222:3333:4444 to client with duid 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF iaid = ZZZZZZZZZZ valid for 600 seconds 後はdhcpd6.confに以下の様に追加設定すれば、固定でPREFIXとアドレスを割り当てることができます。 host gw2 { host-identifier option dhcp6.client-id 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF; fixed-address6 2XXX:aaaa:bbbb:cc00::2; fixed-prefix6 2XXX:aaaa:bbbb:cc10::/60; on commit { execute("/usr/local/sbin/pdr.sh", "2XXX:aaaa:bbbb:cc10::", "60", "2XXX:aaaa:bbbb:cc00::2"); } } on commit時に/usr/loca/sbin/pdr.shを固定呼び出しているのは、サブルータへのスタテイックルートを設定するためですが、固定で割当てている場合、dhcp6.ia-pdが存在していて設定をパラメータ渡ししようとしても、no ...

DHCPv6-PD サブルータの構成 その3: /80の委譲を受けたひ孫ルータの場合

PREFIX /80の委譲を受けたひ孫ルータの設定です。今回も構成は前回と同じです。 それでは早速設定です。今回は、図のgw4です。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 172.16.3.2 netmask 255.255.255.0 gateway 172.16.3.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.4.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash ## clear lease records just for sure. rm /var/lib/dhcp/dhclient6.eth0.leases touch /var/lib/dhcp/dhclient6.eth0.leases sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ## 0-4. /etc/radvd.conf (apt-get install radvd) interface eth1 { AdvManagedFlag on; AdvOtherConfigFlag on; AdvSendAdvert on; AdvLinkMTU 1500; MaxRtrAdvInterval 180; RDNSS 2606:4700:4700::1111 2606:4700:4700::1001 { }; A...

DHCPv6-PD サブルータの構成 その2: 孫ルータが/64の委譲を受け、ひ孫ルータに/80を委譲する場合

前回の続きです。孫ルータがひ孫ルータに/80を委譲する場合です。/80の委譲なんてできるのか?ということについていえば、/56や/60の委譲と同じく、DHCPv6を使えばできます。あまりとやかく書いても仕方ないので、早速設定に入ります。構成は前回と同じですが、今回は孫ルータのgw3の設定です。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 172.16.2.2 netmask 255.255.255.0 gateway 172.16.2.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.3.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ip -4 route add 172.16.4.0/24 via 172.16.3.2 ## 0-4. /etc/radvd.conf (apt-get install radvd) 注:DHCPv6にアドレス管理を任せる場合は、AdvManagedFlagとAdvOtherConfigFlagをonにしてください。 interface eth1 { AdvManagedFlag off; AdvOtherConfigFlag off; AdvSendAdvert on; AdvLinkMTU 1500; MaxRtrAd...

DHCPv6-PD サブルータの構成 その1: 子ルータが /60の委譲を受け、孫ルータに/64を委譲する場合

前回 は、ONU直下に/60のPREFIXをサブルータに委譲するMAP-Eルータを構成しましたが、今回はMAP-Eルータ以下に/64のプレフィックスをさらに孫ルータへと委譲する子ルータを構成してみました。 親・子・孫ルータともにPDでき、かつ、サブルータへの経路を設定できる構成は見かけないので、本稿をアップしてみました。通信環境はOCNバーチャルコネクトで、OSはDebianです。 構成図は以下の通りですが、今回は子ルータgw2の設定です。 それでは早速設定していきます。 ## 0-1a. /etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1 iface eth0 inet6 dhcp accept_ra 2 request_prefix 1 ## 0-1b. /etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet static address 172.16.2.1 netmask 255.255.255.0 iface eth1 inet6 manual ## 0-2. /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.eth0.accept_ra = 2 ## 0-3. /etc/rc.local (chmod+x) #!/bin/bash sysctl -p ifup eth1 sleep 10 /etc/init.d/isc-dhcp-server restart ip -4 route add 172.16.3.0/24 via 172.16.2.2 dev eth1 ip -4 route add 172.16.4.0/24 via 172.16.2.2 dev eth1 ## 0-4. /etc/radvd.conf (apt-get install radvd) interface eth1 { Adv...