開発環境は、Cross-gcc +Eclipse +OpenOCD で用意している。
NUCLEOボードは、ST-LinkというデバッグI/Fがあり便利だ。
しかし、JTAG I/Fのみならず、USB Storageデバイスが接続されたようになる。
害がないならそれも良いのだが、Linuxでは問題になる。
OpenOCD User's guide の USB ST-LINK based に/etc/modprobe.confを書き換えることが書いてある。この文書は少し古い。
最近のUbuntuなら、/etc/modprobe.dの下にそれぞれの設定ファイルを置く。
私は /etc/modprobe.d/stlink.conf を以下の内容で作った。
# Prevent ST-LINK from showing up as a USB disk options usb-storage quirks=483:3744:i,483:374b:i,483:374e:iこれで、ST-Linkを接続しても、自動マウントされなくなる。
解決したと思っていたが、職場のPCではおかしなことになった。
上記、/etc/modprobe.d/stlink.conf を用意しても効かない。
起動時、initrdの段階で、usb-storage.ko が読まれているのでは?と、思った。
この設定は、モジュールロード時のパラメータだ。
initrdの段階では、/etc/modprobe.d/の設定は読めない。VAIO-C1で遊んでいるときに経験していた。
職場のPCにはUSBカードリーダが常時接続されている。
bootシーケンスのinitrdの段階でそれを検出すると、usb-storage.koがロードされる。
その時点では/etc/modprobe.d/の設定はアクセスできないので、結果的にパラメータなしでロードされる。
ルートファイルシステムマウント後(/etc/modprobe.dがアクセス可能になる)、ST-Linkを挿しても、すでにusb-storage.koが読み込まれているので、再ロードは行われない。
そのため、/etc/modprobe.d/stlink.conf が、無視されたように見える。
rmmodで、アンロード(uasを先にアンロード)してNUCLEOを挿すと、再ロードが行われる。
このとき、/etc/modprobe.d/stlink.conf が適用されるため、ST-LinkのUSB Storageがマウントされない。
わざわざrmmodするのは面倒だ。
何もせずとも、ST-Link の USB Storage はマウントしないでほしい。
initrdでのモジュールのパラメータを調整するには、VAIO-C1のときのように、/etc/initramfs-tools/modules を書き換える。以下のようになる。
# List of modules that you want to include in your initramfs. # They will be loaded at boot time in the order below. # # Syntax: module_name [args ...] # # You must run update-initramfs(8) to effect this change. # # Examples: # # raid1 # sd_mod usb-storage quirks=483:3744:i,483:374b:i,483:374e:i最後の行が追加したもの。
コメントを読めばわかるが、書き換え後initrdを作り直す必要があり、update-initramfs を実行しなければならない。以下のように:
$ sudo update-initramfs -u [sudo] <ユーザ名> のパスワード:パスワードを入力すれば、initrdが更新される。
これをやれば、/etc/modprobe.d/stlink.confが不要というわけではない。
起動時にUSBメモリやUSBカードリーダが接続されていない場合は、initrd内でusb-storage.koは読み込まれない。
Linuxの起動が完了した後は、/etc/modprobe.d/stlink.confが必要になるので、両方用意しておく必要がある。
最初にSTM32を使ったのは、雑誌(CQ出版 Design Wave 2008年5月号)の付録のSTM32F103VBだった。
開発環境は、cross-gcc + eclipse + OLIMEXのJTAG(千石で購入) で揃えた。
最初に開発環境を自力で揃えてしまったので、未だにSTM-STUDIOを使わない(Cubeは利用するけど)。
もしかしたら、STM-STUDIOを使っている場合はこんな問題に遭遇しないのかもしれない。
最近ではarm-none-eabi用のgccを自分でビルドしなくても良くなり、OpenOCDもUbuntuのもので十分だ。
多少楽になったが、それでも自前で揃えるには何気に大変だ。
バカバカしいかもしれないけど、何かを開発するのは苦労の連続だ。
苦労と考えず、楽しむつもりでやるのが「馬鹿の道」。ついでに、問題解決力が鍛えられる。
0 件のコメント:
コメントを投稿