cdc-acm.koが必要になったので、そのビルド
まずカーネルソース(linux-xlnx)を落とす
git clone https://github.com/Xilinx/linux-xlnx.git
該当のブランチをチェックアウト
今回はPYNQ v2.1を使う。https://github.com/Xilinx/PYNQ/releases によれば
v2.1ではXilinx 2017.4 を使っているので、以下のようにする
git checkout xilinx-v2017.4
PYNQのカーネルコンフィグを落としてくる
https://github.com/Xilinx/PYNQ/tree/master/sdbuild/boot_configs/Pynq-Z1-defconfig
にある、kernel.configをダウンロードして.configにリネームし、linux-xlnxのルートフォルダに置く。
$ cd linux-xlnx $ wget https://raw.githubusercontent.com/Xilinx/PYNQ/master/sdbuild/boot_configs/Pynq-Z1-defconfig/kernel.config .config
カーネルモジュールをコンパイルする準備(menuconfig/prepare/modules_prepare)
$ make ARCH=arm CROSS_COMPILE:=arm-xilinx-linux-gnueabi- menuconfig scripts/kconfig/mconf Kconfig *** End of the configuration. *** Execute 'make' to start the build or try 'make help'.
$ make ARCH=arm CROSS_COMPILE:=arm-xilinx-linux-gnueabi- prepare CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/bounds.h CHK include/generated/timeconst.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh
$ make ARCH=arm CROSS_COMPILE:=arm-xilinx-linux-gnueabi- modules_prepare CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/bounds.h CHK include/generated/timeconst.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh
適当にビルドフォルダを作成
mkdir ~/Downloads/cdc-acm-driver cd ~/Downloads/cdc-acm-driver cp ~/Downloads/linux-xlnx/drivers/usb/class/cdc-acm.c . cp ~/Downloads/linux-xlnx/drivers/usb/class/cdc-acm.h .
Makefileは以下のようにする
export ARCH:=arm export CROSS_COMPILE:=arm-xilinx-linux-gnueabi- CC=$(CROSS_COMPILE)gcc obj-m += cdc-acm.o KDIR := /home/shohei/Downloads/linux-xlnx PWD := $(shell pwd) default: ${MAKE} -C ${KDIR} M=${PWD} modules clean: ${MAKE} -C ${KDIR} M=${PWD} clean
実行
$ make make -C /home/shohei/Downloads/linux-xlnx M=/home/shohei/Downloads/cdc-acm-driver modules make[1]: Entering directory '/home/shohei/Downloads/linux-xlnx' WARNING: Symbol version dump ./Module.symvers is missing; modules will have no dependencies and modversions. Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory '/home/shohei/Downloads/linux-xlnx' $ ls cdc-acm.c cdc-acm.ko cdc-acm.mod.o Makefile Module.symvers cdc-acm.h cdc-acm.mod.c cdc-acm.o modules.order
cdc-acm.koをPYNQに送ってinsmodでロード
$ sudo insmod cdc-acm.ko