Armadilloフォーラム

Armadillo-X1でのspidev登録について

h_g_c

2017年5月31日 19時10分

お世話になっております。

Armadillo-X1にてSPIの動作確認をしたいと考え、
Document/spi下のサンプルコード「spidev_test.c」を実行しようとしています。

そのために「/dev/spidev*.*」を登録しようとしているのですが、登録方法が分かりません。
現状「Armadillo-X1製品マニュアル」を参考にしつつ、以下の手順でspidevを登録しようとしていますがうまく登録できません。

・カーネルコンフィギュレーションのSPI機能を設定
--- SPI support
│ │ [ ] Debug support for SPI drivers
│ │ *** SPI Master Controller Drivers ***
│ │ < > Altera SPI Controller
│ │ -*- Utilities for Bitbanging SPI masters
│ │ <*> GPIO-based bitbanging SPI Master
│ │ <*> Freescale i.MX SPI controllers
│ │ [ ] Freescale SPI controller and Aeroflex Gaisler GRLIB SPI controller
│ │ < > Freescale DSPI controller
│ │ < > OpenCores tiny SPI
│ │ < > ARM AMBA PL022 SSP controller
│ │ < > PXA2xx SSP SPI master
│ │ < > NXP SC18IS602/602B/603 I2C to SPI bridge
│ │ < > Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) SPI
│ │ < > Analog Devices AD-FMCOMMS1-EBZ SPI-I2C-bridge driver
│ │ < > Xilinx SPI controller common module
│ │ < > DesignWare SPI controller core support
│ │ *** SPI Protocol Masters ***
│ │ <*> User mode SPI device driver support
│ │ < > Infineon TLE62X0 (for power switching)

・「10.2. Linux カーネルをビルドする」に従いLinuxカーネルをビルド
・生成したカーネルイメージとDTBを「11.2.2. Linux カーネルイメージの書き換え」「11.2.3. DTB の書き換え」に従いarmadilloに書き換え
・armadilloを再起動

上記手順の後/dev下のファイルを確認しましたが、spidev*.*は登録されていませんでした。

なおLinuxカーネルを確認したところ、以下の通りになりました。
------------------------------------------------------------------
root@armadillo:~# zcat /proc/config.gz |grep SPI | grep =y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_IMX_HAVE_PLATFORM_SPI_IMX=y
CONFIG_REGMAP_SPI=y
CONFIG_MTD_SPI_NOR=y
CONFIG_SPI_FSL_QUADSPI=y
CONFIG_SPI=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_BITBANG=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_IMX=y
CONFIG_SPI_SPIDEV=y
CONFIG_MFD_MC13XXX_SPI=y
CONFIG_SND_SPI=y
CONFIG_SND_SOC_I2C_AND_SPI=y
------------------------------------------------------------------

対処法について、助言頂けませんでしょうか。
よろしくお願いいたします。

コメント

溝渕です。

> │ │ *** SPI Protocol Masters ***
> │ │ <*> User mode SPI device driver support

該当コンフィギュレーションは上記で合っています。

> ・「10.2. Linux カーネルをビルドする」に従いLinuxカーネルをビルド
> ・生成したカーネルイメージとDTBを「11.2.2. Linux カーネルイメージの書き換え」「11.2.3. DTB の書き換え」に従いarmadilloに書き換え
> ・armadilloを再起動
>
>
> 上記手順の後/dev下のファイルを確認しましたが、spidev*.*は登録されていませんでした。

恐らく、armadilloで動作しているLinuxカーネルイメージは、カーネルコンフィ
ギュレーションを変更したものではありません。

どのような操作を行ってarmadilloの書き換えを行ったかを、もう少し詳細に
教えていただけますか。

溝渕様

お世話になっております。

> > ・「10.2. Linux カーネルをビルドする」に従いLinuxカーネルをビルド
> > ・生成したカーネルイメージとDTBを「11.2.2. Linux カーネルイメージの書き換え」「11.2.3. DTB の書き換え」に従いarmadilloに書き換え
> > ・armadilloを再起動
> >
> > 上記手順の後/dev下のファイルを確認しましたが、spidev*.*は登録されていませんでした。
>
> 恐らく、armadilloで動作しているLinuxカーネルイメージは、カーネルコンフィ
> ギュレーションを変更したものではありません。
>
> どのような操作を行ってarmadilloの書き換えを行ったかを、もう少し詳細に
> 教えていただけますか。

Linuxカーネルのビルドからarmadilloへの書き換えの手順は以下の通りに行っています。
ご確認お願いいたします。

-------------------------------------------------------------------
1.下記コマンドにてLinuxカーネルをビルド(各コマンド入力時のログを添付させていただきます)
root@atde6:/linux-3.14-x1-at13# make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm
root@atde6:/linux-3.14-x1-at13# make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm LOADADDR=0x80008000 uImage

2.生成したファイル「uImage」「armadillo_x1.dtb」をSDカードにcpコマンドでコピー

3.ArmadilloにSDカードをセットし、下記手順にてSDカードからarmadilloに「uImage」「armadillo_x1.dtb」をコピー
「root@armadillo:~# mount -t vfat /dev/mmcblk0p1 /mnt」でSDカードをmntディレクトリにマウント
mntディレクトリからArmadilloのホームディレクトリに「uImage」「armadillo_x1.dtb」をcpコマンドでコピー
「root@armadillo:~# umount /mnt」でSDカードアンマウント

4.下記手順にて、手順3.でコピーした「uImage」「armadillo_x1.dtb」をeMMCに書き換え
「root@armadillo:~# mount -t vfat /dev/mmcblk2p1 /mnt」でeMMC第1パーティションをmntディレクトリにマウント
mntディレクトリへ手順3.で用意した「uImage」「armadillo_x1.dtb」をcpコマンドでコピー
「root@armadillo:~# umount /mnt」でeMMC第1パーティションアンマウント
-------------------------------------------------------------------

誤っている点等ありましたらご教授お願いいたします。

溝渕です。

eMMCの書き換え手順は問題無さそうです。再起動すると、ビルドしたLinuxカー
ネルで起動すると思います。

起動にはeMMCのLinuxカーネルを利用していますか? JP1がオープンに設定され
ていることを確認してください。

また、以下のコマンドを実行するとLinuxカーネルのビルドタイムが出力され
るので、実際にビルドした時刻と同じになっているかを確認してみてください。

root@armadillo:~# uname -a

溝渕様

いつもお世話になっております。

> 起動にはeMMCのLinuxカーネルを利用していますか? JP1がオープンに設定され
> ていることを確認してください。

大変申し訳ありませんが、JP1とは何のことを指していますでしょうか?
Armadillo-X1のインターフェースレイアウトからは確認することが出来ませんでした。
SDカード拡張ボードのスイッチであれば、NORMALモードに設定しております。

> また、以下のコマンドを実行するとLinuxカーネルのビルドタイムが出力され
> るので、実際にビルドした時刻と同じになっているかを確認してみてください。
>
> root@armadillo:~# uname -a

教えていただいたコマンドの実行結果は以下のようになりました。
Linuxカーネルのビルドタイムは実際にビルドした時刻と同じであることを確認しました。
-------------------------------------------------------------------
root@armadillo:~# uname -a
Linux armadillo 3.14.79-at13 #21 SMP PREEMPT Thu Jun 1 12:50:35 JST 2017 armv7l GNU/Linux
-------------------------------------------------------------------

なおspidev*.*の登録確認は以下のコマンドで確認しておりますが、問題ありませんでしょうか。
-------------------------------------------------------------------
root@armadillo:~# ls /dev
30084000.etf loop6 pts tty1 tty36 tty62
30086000.etr loop7 ram0 tty10 tty37 tty63
autofs mem ram1 tty11 tty38 tty7
block mmcblk0 ram10 tty12 tty39 tty8
bus mmcblk0p1 ram11 tty13 tty4 tty9
char mmcblk2 ram12 tty14 tty40 ttymxc4
console mmcblk2boot0 ram13 tty15 tty41 ubi_ctrl
cpu_dma_latency mmcblk2boot1 ram14 tty16 tty42 uinput
disk mmcblk2p1 ram15 tty17 tty43 urandom
dri mmcblk2p2 ram2 tty18 tty44 vcs
fd mmcblk2p3 ram3 tty19 tty45 vcs1
full mmcblk2rpmb ram4 tty2 tty46 vcs2
fuse mtd0 ram5 tty20 tty47 vcs3
hci_tty mtd0ro ram6 tty21 tty48 vcs4
hwrng mtd1 ram7 tty22 tty49 vcs5
i2c-2 mtd1ro ram8 tty23 tty5 vcs6
i2c-3 mtd2 ram9 tty24 tty50 vcsa
iio:device0 mtd2ro random tty25 tty51 vcsa1
initctl mtdblock0 rfkill tty26 tty52 vcsa2
input mtdblock1 rtc tty27 tty53 vcsa3
kmsg mtdblock2 rtc0 tty28 tty54 vcsa4
log network_latency rtc1 tty29 tty55 vcsa5
loop-control network_throughput shm tty3 tty56 vcsa6
loop0 null snd tty30 tty57 vga_arbiter
loop1 port stderr tty31 tty58 watchdog
loop2 ppp stdin tty32 tty59 watchdog0
loop3 pps0 stdout tty33 tty6 xconsole
loop4 ptmx tty tty34 tty60 zero
loop5 ptp0 tty0 tty35 tty61
-------------------------------------------------------------------

以上、よろしくお願いいたします。

> 大変申し訳ありませんが、JP1とは何のことを指していますでしょうか?
> Armadillo-X1のインターフェースレイアウトからは確認することが出来ませんでした。
> SDカード拡張ボードのスイッチであれば、NORMALモードに設定しております。

申し訳ございません。Armadillo-X1にはJP1はありません。

ご推測の通り、SDカード拡張ボードのスイッチがお伝えしたかった内容です。

> > また、以下のコマンドを実行するとLinuxカーネルのビルドタイムが出力され
> > るので、実際にビルドした時刻と同じになっているかを確認してみてください。
> >
> > root@armadillo:~# uname -a
>
> 教えていただいたコマンドの実行結果は以下のようになりました。
> Linuxカーネルのビルドタイムは実際にビルドした時刻と同じであることを確認しました。
> -------------------------------------------------------------------
> root@armadillo:~# uname -a
> Linux armadillo 3.14.79-at13 #21 SMP PREEMPT Thu Jun 1 12:50:35 JST 2017 armv7l GNU/Linux
> -------------------------------------------------------------------

以上より、ビルドしたLinuxカーネルで起動したことが確認できます。

> なおspidev*.*の登録確認は以下のコマンドで確認しておりますが、問題ありませんでしょうか。
> -------------------------------------------------------------------
> root@armadillo:~# ls /dev

SPIコアをすでにDevice Treeで有効化しているのであれば、上記コマンドでデ
バイスが確認できると思います。

もし、行っていない場合は、"arch/arm/boot/dts/imx7d-sdb-touch.dts"の
"ecspi3"ノード等を参考に有効化してください。

以上です。

お世話になっております。

返信が遅くなってしまい申し訳ありません。

> SPIコアをすでにDevice Treeで有効化しているのであれば、上記コマンドでデ
> バイスが確認できると思います。
>
> もし、行っていない場合は、"arch/arm/boot/dts/imx7d-sdb-touch.dts"の
> "ecspi3"ノード等を参考に有効化してください。

下記の記事を参考にSPIをDevice Treeで有効にしたところ、/dev/spidev*.*を確認することが出来ました。
https://users.atmark-techno.com/blog/615/2577

また、有効にしたspidevを利用して「spidev_test.c」の動作確認を行うことが出来ました。
ご教授頂きありがとうございました。