diff --git a/.gitignore b/.gitignore index 7080306..67a9d52 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ modules.order /driver/revision.h /fwtool/fwtool -*.bin +fwtool/*.bin *.sys *.zip diff --git a/README.md b/README.md index 702ddf1..bd93517 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,9 @@ BonDriver と同じフォルダに DriverHost_PX4.exe / DriverHost_PX4.ini / it9 ### 1. ファームウェアの抽出とインストール +> **px4_drv を Debian パッケージや DKMS を使ってインストールする場合、ファームウェアは自動的にインストールされます。** +> Debian パッケージや DKMS を使ってインストールする場合は、この手順は不要です。 + unzip, gcc, make がインストールされている必要があります。 $ cd fwtool @@ -97,39 +100,40 @@ unzip, gcc, make がインストールされている必要があります。 または、抽出済みのファームウェアを利用することもできます。 - $ sudo mkdir -p /lib/firmware && sudo cp winusb/pkg/DriverHost_PX4/it930x-firmware.bin /lib/firmware/ + $ sudo mkdir -p /lib/firmware && sudo cp etc/it930x-firmware.bin /lib/firmware/ ### 2. ドライバのインストール 一部の Linux ディストリビューションでは、udev のインストールが別途必要になる場合があります。 + +#### Debian パッケージを使用してインストール -#### DKMS を使用しない場合 +`./build_deb.sh` を実行すると、./build_deb.sh の一つ上層のディレクトリに `px4-drv-dkms_0.2.1_(amd64|arm64).deb` という名前の Debian パッケージが生成されます。 -gcc, make, カーネルソース/ヘッダがインストールされている必要があります。 + $ ./build_deb.sh + $ sudo apt install -y ../px4-drv-dkms_0.2.1_amd64.deb - $ cd driver - $ make - $ sudo make install - $ cd ../ +上記コマンドで、px4_drv の Debian パッケージをインストールできます。 -#### DKMS を使用する場合 +#### DKMS を使用してインストールする gcc, make, カーネルソース/ヘッダ, dkms がインストールされている必要があります。 $ sudo cp -a ./ /usr/src/px4_drv-0.2.1 $ sudo dkms add px4_drv/0.2.1 $ sudo dkms install px4_drv/0.2.1 - -#### ビルド済みバイナリを Debian パッケージからインストールする -`build_deb.sh` を実行すると、 -- px4-drv-***.deb -- px4-drv-dkms-***.deb -の2つのファイルが生成されます。 -``` -sudo apt install ./px4-drv*.deb -y -``` -とする事でインストールができます。 +#### DKMS を使用せずにインストールする + +gcc, make, カーネルソース/ヘッダがインストールされている必要があります。 + +> DKMS を使用せずにインストールした場合、カーネルのアップデート時にドライバが自動的に再ビルドされないため、アップデート後に再度インストールを行う必要があります。 +> 基本 DKMS を使用してインストールすることをおすすめします。 + + $ cd driver + $ make + $ sudo make install + $ cd ../ ### 3. 確認 @@ -220,19 +224,27 @@ sudo apt install ./px4-drv*.deb -y ### 1. ドライバのアンインストール -#### DKMS を使用せずにインストールした場合 +#### Debian パッケージを使用してインストールした場合 - $ cd driver - $ sudo make uninstall - $ cd ../ + $ sudo apt purge px4-drv-dkms #### DKMS を使用してインストールした場合 $ sudo dkms remove px4_drv/0.2.1 --all $ sudo rm -rf /usr/src/px4_drv-0.2.1 +#### DKMS を使用せずにインストールした場合 + + $ sudo modprobe -r px4_drv + $ cd driver + $ sudo make uninstall + $ cd ../ + ### 2. ファームウェアのアンインストール +> **px4_drv を Debian パッケージや DKMS を使ってインストールした場合、ファームウェアは自動的にアンインストールされます。** +> Debian パッケージや DKMS を使ってインストールした場合は、この手順は不要です。 + $ sudo rm /lib/firmware/it930x-firmware.bin ## 受信方法 diff --git a/build_deb.sh b/build_deb.sh index 6ccbe50..c6d0be3 100755 --- a/build_deb.sh +++ b/build_deb.sh @@ -1,26 +1,9 @@ #!/bin/bash set -CEuo pipefail -SCRIPT_DIR=$(cd $(dirname $0) && pwd) - -VER_MAJ=0 -VER_MIN=2 -VER_BUILD=1 - -cd $SCRIPT_DIR # Prep -sudo apt install dkms dpkg +sudo apt-get install -y dkms dpkg -# Source pkg +# Build dkms deb dkms mkdeb - -# Binary pkg -mkdir -p ./installer/lib/firmware -cp ./winusb/pkg/DriverHost_PX4/it930x-firmware.bin ./installer/lib/firmware -cp -r ./debian ./installer/DEBIAN -dpkg-deb --build installer - -# Clean up, and then place them all -rm -rf installer -mv ./installer.deb ../px4-drv_${VER_MAJ}.${VER_MIN}.${VER_BUILD}_all.deb -v diff --git a/debian/control b/debian/control deleted file mode 100644 index bde7643..0000000 --- a/debian/control +++ /dev/null @@ -1,7 +0,0 @@ -Maintainer: nns779 <25547272+nns779@users.noreply.github.com> -Build-Depends: debhelper (>= 9), dpkg -Package: px4-drv -Architecture: all -Depends: px4-drv-dkms -Description: Binary blob(s) for the it930x driver -Version: 0.2.1 diff --git a/dkms.conf b/dkms.conf index d66f626..7abb37f 100644 --- a/dkms.conf +++ b/dkms.conf @@ -5,6 +5,6 @@ MAKE="cd ./driver; make KVER=${kernelver} px4_drv.ko" BUILT_MODULE_LOCATION="driver" BUILT_MODULE_NAME="px4_drv" DEST_MODULE_LOCATION="/updates/dkms" -POST_INSTALL="dkms/post_install" -POST_REMOVE="dkms/post_remove" +POST_INSTALL="dkms/post_install.sh" +POST_REMOVE="dkms/post_remove.sh" AUTOINSTALL="yes" diff --git a/dkms/post_install b/dkms/post_install deleted file mode 100755 index 9ad0f09..0000000 --- a/dkms/post_install +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -rm -fv /etc/udev/rules.d/90-px4.rules -install -D -v -m 644 ./etc/99-px4video.rules /etc/udev/rules.d/99-px4video.rules diff --git a/dkms/post_install.sh b/dkms/post_install.sh new file mode 100755 index 0000000..327d09d --- /dev/null +++ b/dkms/post_install.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Unload previous driver +KVER=`uname -r` +if [ `grep -e '^px4_drv' /proc/modules | wc -l` -ne 0 ]; then + modprobe -r px4_drv +fi + +rm -fv /etc/udev/rules.d/90-px4.rules +install -D -v -m 644 ./etc/99-px4video.rules /etc/udev/rules.d/99-px4video.rules +install -D -v -m 644 ./etc/it930x-firmware.bin /lib/firmware/it930x-firmware.bin diff --git a/dkms/post_remove b/dkms/post_remove deleted file mode 100755 index dbbb07b..0000000 --- a/dkms/post_remove +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -if [ `find /lib/modules/ -name px4_drv.ko | wc -l` -eq 0 ]; then - rm -fv /etc/udev/rules.d/90-px4.rules /etc/udev/rules.d/99-px4video.rules -fi diff --git a/dkms/post_remove.sh b/dkms/post_remove.sh new file mode 100755 index 0000000..5ce6de3 --- /dev/null +++ b/dkms/post_remove.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Unload previous driver +KVER=`uname -r` +if [ `grep -e '^px4_drv' /proc/modules | wc -l` -ne 0 ]; then + modprobe -r px4_drv +fi + +if [ `find /lib/modules/ -name px4_drv.ko | wc -l` -eq 0 ]; then + rm -fv /etc/udev/rules.d/90-px4.rules /etc/udev/rules.d/99-px4video.rules + rm -fv /lib/firmware/it930x-firmware.bin +fi diff --git a/etc/it930x-firmware.bin b/etc/it930x-firmware.bin new file mode 100644 index 0000000..3bd8e28 Binary files /dev/null and b/etc/it930x-firmware.bin differ diff --git a/px4_drv-dkms-mkdeb/Makefile b/px4_drv-dkms-mkdeb/Makefile new file mode 100644 index 0000000..817173d --- /dev/null +++ b/px4_drv-dkms-mkdeb/Makefile @@ -0,0 +1,29 @@ +#/usr/bin/make +SRC = $(DESTDIR)/usr/src +SHARE = $(DESTDIR)/usr/share/$(NAME)-dkms + +all: + +clean: + +install: + +#source tree +ifeq ("$(wildcard $(NAME)-$(VERSION))", "$(NAME)-$(VERSION)") + install -d "$(SRC)" + cp -a $(NAME)-$(VERSION) $(SRC) + #ref: https://github.com/dell/dkms/issues/53#issuecomment-1591788158 + #chmod 644 -R "$(SRC)/$(NAME)-$(VERSION)" +endif + +#tarball, possibly with binaries +ifeq ("$(wildcard $(NAME)-$(VERSION).dkms.tar.gz)", "$(NAME)-$(VERSION).dkms.tar.gz") + install -d "$(SHARE)" + install -m 644 $(NAME)-$(VERSION).dkms.tar.gz "$(SHARE)" +endif + +#postinst, only if we are supporting legacy mode +ifeq ("$(wildcard common.postinst)", "common.postinst") + install -d "$(SHARE)" + install -m 755 $(PREFIX)/usr/lib/dkms/common.postinst $(SHARE)/postinst +endif \ No newline at end of file diff --git a/px4_drv-dkms-mkdeb/debian/README.Debian b/px4_drv-dkms-mkdeb/debian/README.Debian new file mode 100644 index 0000000..f8495d9 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/README.Debian @@ -0,0 +1,5 @@ +MODULE_NAME DKMS module for Debian + +This package was automatically generated by the DKMS system, +for distribution on Debian based operating systems. + diff --git a/px4_drv-dkms-mkdeb/debian/changelog b/px4_drv-dkms-mkdeb/debian/changelog new file mode 100644 index 0000000..2434da0 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/changelog @@ -0,0 +1,6 @@ +DEBIAN_PACKAGE-dkms (MODULE_VERSION) stable; urgency=low + + * Automatically packaged by DKMS. + + -- Dynamic Kernel Modules Support Team DATE_STAMP + diff --git a/px4_drv-dkms-mkdeb/debian/compat b/px4_drv-dkms-mkdeb/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/compat @@ -0,0 +1 @@ +7 diff --git a/px4_drv-dkms-mkdeb/debian/control b/px4_drv-dkms-mkdeb/debian/control new file mode 100644 index 0000000..b455166 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/control @@ -0,0 +1,12 @@ +Source: DEBIAN_PACKAGE-dkms +Section: misc +Priority: optional +Maintainer: Dynamic Kernel Modules Support Team +Build-Depends: debhelper (>= 7), dkms +Standards-Version: 3.8.1 + +Package: DEBIAN_PACKAGE-dkms +Architecture: DEBIAN_BUILD_ARCH +Provides: DEBIAN_PACKAGE-modules (= MODULE_VERSION) +Depends: dkms (>= 1.95), ${misc:Depends} +Description: DEBIAN_PACKAGE driver in DKMS format. diff --git a/px4_drv-dkms-mkdeb/debian/copyright b/px4_drv-dkms-mkdeb/debian/copyright new file mode 100644 index 0000000..ad983f3 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/copyright @@ -0,0 +1,2 @@ + +This copyright has not been completed by the author of this package. diff --git a/px4_drv-dkms-mkdeb/debian/dirs b/px4_drv-dkms-mkdeb/debian/dirs new file mode 100644 index 0000000..b601f22 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/dirs @@ -0,0 +1 @@ +usr/src diff --git a/px4_drv-dkms-mkdeb/debian/postinst b/px4_drv-dkms-mkdeb/debian/postinst new file mode 100755 index 0000000..e87022f --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/postinst @@ -0,0 +1,49 @@ +#!/bin/sh +# Copyright (C) 2002-2005 Flavio Stanchina +# Copyright (C) 2005-2006 Aric Cyr +# Copyright (C) 2007 Mario Limonciello +# Copyright (C) 2009 Alberto Milone + +set -e + +NAME=MODULE_NAME +PACKAGE_NAME=$NAME-dkms +DEB_NAME=$(echo $PACKAGE_NAME | sed 's,_,-,') +CVERSION=`dpkg-query -W -f='${Version}' $DEB_NAME | awk -F "-" '{print $1}' | cut -d\: -f2` +ARCH=`dpkg-architecture -qDEB_BUILD_GNU_CPU` + +dkms_configure () { + for POSTINST in /usr/lib/dkms/common.postinst "/usr/share/$PACKAGE_NAME/postinst"; do + if [ -f "$POSTINST" ]; then + "$POSTINST" "$NAME" "$CVERSION" "/usr/share/$PACKAGE_NAME" "$ARCH" "$2" + return $? + fi + echo "WARNING: $POSTINST does not exist." >&2 + done + echo "ERROR: DKMS version is too old and $PACKAGE_NAME was not" >&2 + echo "built with legacy DKMS support." >&2 + echo "You must either rebuild $PACKAGE_NAME with legacy postinst" >&2 + echo "support or upgrade DKMS to a more current version." >&2 + return 1 +} + +case "$1" in + configure) + dkms_configure + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/px4_drv-dkms-mkdeb/debian/prerm b/px4_drv-dkms-mkdeb/debian/prerm new file mode 100755 index 0000000..f42d293 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/prerm @@ -0,0 +1,28 @@ +#!/bin/sh + +NAME=MODULE_NAME +VERSION=MODULE_VERSION + +set -e + +case "$1" in + remove|upgrade|deconfigure) + if [ "`dkms status -m $NAME`" ]; then + dkms remove -m $NAME -v $VERSION --all + fi + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 + + diff --git a/px4_drv-dkms-mkdeb/debian/rules b/px4_drv-dkms-mkdeb/debian/rules new file mode 100755 index 0000000..7426e58 --- /dev/null +++ b/px4_drv-dkms-mkdeb/debian/rules @@ -0,0 +1,54 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DEB_NAME=DEBIAN_PACKAGE +NAME=MODULE_NAME +VERSION=MODULE_VERSION + +configure: configure-stamp +configure-stamp: + dh_testdir + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + $(MAKE) + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + -$(MAKE) clean + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + $(MAKE) DESTDIR=$(CURDIR)/debian/$(DEB_NAME)-dkms NAME=$(NAME) VERSION=$(VERSION) install + +binary-arch: build install + +binary-indep: build install + dh_testdir + dh_testroot + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure