Armadilloフォーラム

カーネルモジュールのロード

atsushi

2018年9月27日 17時53分

お世話になっております、藤森と申します。

今回、Armadillo IoT-G3にSilicon Labs社様のCP210x USB to UART Bridge VCP Driversをインストールしようとしておりますが、
イントールがうまくできておりません。

行った作業といたしましては、

①linux-4.9-x1-at1.tar.gzを御社ホームページからダウンロードし、ATDE7上に展開(~/Kernel/linux-4.9-x1-at1)

②CP210x USB to UART Bridge VCP DriversのLinux 3.x.x and 4.x.x用ドライバをダウンロードし、ATDE7上に展開

③クロスコンパイルを行うため、CP210xのMakefileを以下のように変更

obj-m = cp210x.o
KDIR = ~/Kernel/linux-4.9-x1-at1
SRCDIR = $(PWD)
# try this instead if you don't have PWD defined
# SRCDIR = $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
all:
$(MAKE) -C $(KDIR) M=$(SRCDIR) modules
clean:
$(MAKE) -C $(KDIR) M=$(SRCDIR) clean

④Makefileが存在するディレクトリ上でmakeコマンドを実行

⑤作成されたcp210x.koをArmadillo IoT-G3の適当な場所へコピー

⑥modprobe cp210x.koコマンドを実行

modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.9.107-at1/modules.dep.bin'
modprobe: FATAL: Module cp210x not found in directory /lib/modules/4.9.107-at1

とのエラーが発生し、モジュールのロードができませんでした。
Armadillo IoT-G3上でuname -aコマンドを送った結果は以下の通りです。

Linux armadillo 4.9.107-at1 #4 SMP PREEMPT Mon Jun 18 19:03:12 JST 2018 armv7l GNU/Linux

modinfo cp210x.koの結果は以下の通りです。

filename: /root/Share/cp210x.ko
license: GPL
description: Silicon Labs CP210x RS232 serial adaptor driver
alias: usb:v413Cp9500d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v3195pF281d*dc*dsc*dp*ic*isc*ip*in*
(省略)
depends:
retpoline: Y
vermagic: 4.9.107-at1 SMP mod_unload modversions 686

方針としては問題ありませんでしょうか。
また、どこか間違っている手順はありますでしょうか。
基本的な質問かもしれませんが、よろしくお願いいたします。

コメント

y.nakamura

2018年9月27日 18時12分

中村です。

> ②CP210x USB to UART Bridge VCP DriversのLinux 3.x.x and 4.x.x用ドライバをダウンロードし、ATDE7上に展開
>
> ③クロスコンパイルを行うため、CP210xのMakefileを以下のように変更
...
> ⑥modprobe cp210x.koコマンドを実行
...
> 方針としては問題ありませんでしょうか。

カーネルとは別にソースからクロスコンパイルしてモジュールにするのではなく、
カーネル組み込みでよければ、カーネルのコンフィグレーション変更だけで、
CP210xが使えるようになるはずです。

Device Drivers  --->
  [*] USB support  --->
    <*>   USB Serial Converter support  --->
      < >   USB CP210x family of UART Bridge Controllers

このCP210xのところを<*>変更して、カーネルの再コンパイルです。

--
なかむら

atsushi

2018年9月28日 9時13分

お世話になっております、藤森です。

迅速なご返事ありがとうございます。

早速make menuconfigを実行したところ、

Device Drivers  --->
  [*] USB support  --->
    <*>   USB Serial Converter support  --->
      <M>   USB CP210x family of UART Bridge Controllers

となっており、
Yを押したところ、
this feature depends on another which has been configured as a module
との表示が現れました。

とりあえずこのままconfigを保存し、makeを行ってから実機のカーネルを差し替えて確認を行ってみます。

よろしくお願いいたします。

atsushi

2018年9月28日 16時27分

お世話になっております、藤森です。

上記の方法ではビルド時にエラーが発生してしまいましたので、
ユーザーマニュアルのカーネルビルド方法
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
を参照し、

make ARCH=arm x1_defconfig
make ARCH=arm menuconfig

コマンドからCP210Xを有効にしたConfigを変更し、カーネルをクロスコンパイルしました。
その後にSDブートディスクの作成
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
を参照して、SDブートディスクを作成いたしました。

SDからブートを行い、CP210Xを使用している装置を差したところ、

usb 1-1: new full-speed USB device number 2 using ci_hdrc
cp210x 1-1:1.0: cp210x converter detected
usb 1-1: cp210x converter now attached to ttyUSB4

との表示がなされましたので、カーネルにドライバが組み込めたと思われます。

ご教授ありがとうございました。

y.nakamura

2018年9月28日 16時40分

中村です。

> usb 1-1: cp210x converter now attached to ttyUSB4

認識してくれたようで、よかったです。

ttyUSB4になるということは、G3のM1モデルですよね。

M1モデルのG3/LTEモデム関連のソフトや設定などが、
モデムのポートがttyUSB0~ttyUSB3となることを
前提としてるところがあった場合、
CP210xの機器をつないだ状態で起動すると、
このttyUSBxの順番が変わってしまって、
モデムに影響がでるかもしれません。

> ユーザーマニュアルのカーネルビルド方法
> https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

書いてあることはほとんど同じなのですが、
マニュアルのこのページも参考に。

第22章 Howto
22.1. イメージをカスタマイズする
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

--
なかむら