iPad Air

以前、ある程度雑誌を自炊して、結構増えてきた。

前々からリーダーとしてタブレットが欲しくて、iPad Proを狙っていたころに、急にairが発表されて保留してた。

 

でも、iPad OSのニュースが出てきて、安定しつつあるので、このへんで買ってみる。

 

買ったのは、iPad Airセルラー版256G版。つまり全部入り。

 

使った感想は、控えめにいっても最高。

いままでKindleの操作がもっさりだったけど、サクサク動く。

雑誌なんかも見開きで見えるので、言うことなし。

 

 

www.apple.com

SDカードリーダ

いままで使っていたエレコムのカードリーダ(CF対応)のものが、SDカードを認識しなくなったので、新たに以下を購入。

 

 

 

まじめにベンチを取ったわけではないけど、以前のUSB2.0に比べて速い気がする。

それにしても安くてお買い得。

 

 

BeagleBoneBlackでタッチパネル

BBBにタッチパネルをつけて遊んでみる。購入したのは、これ。

 

 ラズパイ用だけど、HDMI入力で、タッチの制御はUSBで、マルチタッチ。

付属品もケーブル、タッチペン、ACアダプタと豊富。

 

BBBの方は、最新のdebianイメージを使用。

Debian 9.5 2018-10-07 4GB SD LXQT

chromiumを使いたかったからGUI版で。

 

1. USBでの認識

タッチパネルを接続する前は、/dev/input下に対応するファイルができていないが、接続するとデバイスファイルが作成される。

 

接続前

debian@beaglebone:~$ ls /dev/input/
event0

接続後

debian@beaglebone:~$ ls /dev/input/
by-id by-path event0 event1 

 

dmesgで確認すると、TSTP製?らしい。

debian@beaglebone:~$ dmesg | tail
[ 106.428436] remoteproc remoteproc2: 4a338000.pru is available
[ 106.428587] pru-rproc 4a338000.pru: PRU rproc node /ocp/pruss_soc_bus@4a326004/pruss@0/pru@38000 probed successfully
[ 107.998418] usb 1-1.4: new full-speed USB device number 3 using musb-hdrc
[ 108.108822] usb 1-1.4: New USB device found, idVendor=0416, idProduct=c168
[ 108.108846] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 108.108855] usb 1-1.4: Product: MTouch
[ 108.108863] usb 1-1.4: Manufacturer: TSTP
[ 108.137395] hid-generic 0003:0416:C168.0002: hiddev0,hidraw0: USB HID v1.11 Device [TSTP MTouch] on usb-musb-hdrc.1-1.4/input1
[ 109.555257] input: TSTP MTouch as /devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1/usb1/1-1/1-1.4/1-1.4:1.0/0003:0416:C168.0001/input/input1
[ 109.556543] hid-multitouch 0003:0416:C168.0001: input,hidraw1: USB HID v1.11 Device [TSTP MTouch] on usb-musb-hdrc.1-1.4/input0
debian@beaglebone:~$

 

この状態で、evtestコマンドでイベントを取得すると、タッチに反応して、座標がパラパラ表示される。

debian@beaglebone:~$ sudo evtest /dev/input/event1
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x416 product 0xc168 version 0x111
Input device name: "TSTP MTouch"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 330 (BTN_TOUCH)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 1492
Min 0
Max 2048
Resolution 6
Event code 1 (ABS_Y)
Value 786
Min 0
Max 1200
Resolution 5
Event code 47 (ABS_MT_SLOT)
Value 0
Min 0
Max 9
Event code 53 (ABS_MT_POSITION_X)
Value 0
Min 0
Max 2048
Resolution 6
Event code 54 (ABS_MT_POSITION_Y)
Value 0
Min 0
Max 1200
Resolution 5
Event code 57 (ABS_MT_TRACKING_ID)
Value 0
Min 0
Max 65535
Properties:
Property type 1 (INPUT_PROP_DIRECT)
Testing ... (interrupt to exit)

 Event: time 1559055796.779302, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1
Event: time 1559055796.779302, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 898
Event: time 1559055796.779302, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 616
Event: time 1559055796.779302, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1559055796.779302, type 3 (EV_ABS), code 0 (ABS_X), value 898
Event: time 1559055796.779302, type 3 (EV_ABS), code 1 (ABS_Y), value 616
Event: time 1559055796.779302, -------------- SYN_REPORT ------------
Event: time 1559055796.834278, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1559055796.834278, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 2
Event: time 1559055796.834278, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 1508
Event: time 1559055796.834278, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 390
Event: time 1559055796.834278, -------------- SYN_REPORT ------------
Event: time 1559055796.949172, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1559055796.949172, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055796.949172, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1559055796.949172, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055796.949172, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1559055796.949172, -------------- SYN_REPORT ------------
Event: time 1559055797.439261, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1559055797.439261, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 3
Event: time 1559055797.439261, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 986
Event: time 1559055797.439261, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 682
Event: time 1559055797.439261, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1559055797.439261, type 3 (EV_ABS), code 0 (ABS_X), value 986
Event: time 1559055797.439261, type 3 (EV_ABS), code 1 (ABS_Y), value 682
Event: time 1559055797.439261, -------------- SYN_REPORT ------------
Event: time 1559055797.549158, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055797.549158, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1559055797.549158, -------------- SYN_REPORT ------------

 

ドライバについては、特にインストールしていないが、標準のもので、hid_multitouchがモジュールとしてロードされており、これが使用されている。

 

2. Chromiumの起動

接続した時点で、Xが表示されているので、メニューからChromiumを起動する。

Chromium上では、マルチタッチが有効になっており、ピンチインでズームインができる。

また、javascriptでtouchstartイベントを取得もできる。

ここ(touch, click, pointerの実装 - タッチイベントとマウスイベント | CodeGrid)のサンプルページにアクセスしてみると、イベントの詳細がわかる。

 

touchstart

touchstart

 

Chromiumがタッチで動作可能な理由は、すでに, libinputというライブラリがインストール済みのため。この設定は、/usr/share/X11/xorg.conf.dの中に40-libinput.confがあり、ここに記述される。現状は以下の通り。

debian@beaglebone:/usr/share/X11/xorg.conf.d$ cat 40-libinput.conf
# Match on all types of devices but tablet devices and joysticks
Section "InputClass"
Identifier "libinput pointer catchall"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput keyboard catchall"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput touchscreen catchall"
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput tablet catchall"
MatchIsTablet "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

 

 それにしても、Xの描画が遅い。。。

 

 

 

 

カーネルオブジェクトのビルド

簡単なカーネルモジュールを作ってみる。

 

ソース、Makefile

・hello_module.c

 #include <linux/module.h>


MODULE_LICENSE("GPL v2");

static int hello_init(void)
{
     printk( KERN_ERR "Hello world\n");
     return 0;
}

static void hello_exit(void)
{
     /* none */
}

module_init(hello_init);
module_exit(hello_exit);

 

 

Makefile

obj-m := hello_module.o

all:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C $(KERNEL) M=$(PWD) modules

 

ビルド

 カーネルソースの位置を相対的に指定する。ここでは、../kernel_src/kernel/kernel

make KERNEL=../kernel_src/kernel/kernel/

 ビルドが完了すると、hello_module.koが作成さる。

 

モジュールのインストール

作成されたkoファイルをBBBの起動SDへコピーして、BBBを起動する。

 

BBB起動後、作成されたモジュールをinsmodすると、読み込まれてhello worldが表示される。

insmod hello_module.ko

 

 

 

・参考

https://blukat29.github.io/2017/12/cross-compile-arm-kernel-module/

Linuxのカーネルモジュールを書いてみた - mcommit's message

カーネルモジュールの作成 | 組み込みLinuxのArmadilloサイト

ビルド環境の再構築

最近、mintのバージョンを上げたので、BBBの開発環境を作り直そうと思った。

が、以前と状況が異なり、カーネルビルドでエラーになった。

(compiler-gcc8.hがない。以前はgcc4系で、現状は8系)

 

仕方がないので、VirtualBox上でUbuntu16.04をインストールし、もう一度環境構築した。

 

ツールのインストール

いくつかツールをインストールする。

 ・Git

 インストールされていない場合はインストールする。cloneするために、ユーザー名とメールアドレスを設定しておく。

sudo apt-get install git

git config --global user.email "XXXX@xxxx.co.jp"
git config --global user.name "xxxx"

 

・lzop

 圧縮に使うらしいのでインストールする。

sudo apt-get install lzop

 

・bison, flex, libssl

  u-bootのビルドに必要。

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install libssl-dev

 

・u-boot

  以前のサイトにはなくなっていたため、gitでクローンする。

mkdir u-boot
cd u-boot
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
tar xf u-boot-latest.tar.bz2
cd u-boot-2017.09
make sandbox_defconfig tools-only
sudo install tools/mkimage /usr/local/bin

git clone https://github.com/u-boot/u-boot.git
cd u-boot

make sandbox_defconfig tools-only

sudo install tools/mkimage /usr/local/bin

 

gcc

 使用したカーネルは、GCC4系を想定しているようなので、gcc-4.9のARMコンパイラをインストールする。なぜか、シンボリックリンクが張られなかったので、張っておく。

sudo apt-get install gcc-4.9-arm-linux-gnueabi

cd /usr/bin/
sudo ln -s arm-linux-gnueabi-gcc-4.9 arm-linux-gnueabi-gcc

 

カーネルソース取得&ビルド

gitでソースをcloneして、パッチを適用する。

mkdir kernel_src
cd kernel_src
git clone https://github.com/beagleboard/kernel.git
cd kernel
git checkout origin/3.13 -b 3.13
./patch.sh

コンフィグファイルを書き換える。

cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
wget http://arago-project.org/git/projects/?p=am33x-cm3.git\;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin

カーネルのビルドは、通常のカーネルビルドと同じだが、prefixを常につけて行う。

cd kernel

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- beaglebone_defconfig -j2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage dtbs LOADADDR=0x80008000 -j2
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j2

ビルドが完了すると、kernel_src/kernel/kernel/arch/arm/bootにzImageが作成される。

 

カーネルの更新

事前にビルドしていたカーネルイメージをコピーする。

cd kernel_src/kernel/kernel/arch/arm/boot

sudo cp zImage /media/ubuntu/BOOT/

sudo cp dts/am335x-boneblack.dtb /media/ubuntu/BOOT/dtbs/

 

cd kernel_src/kernel/kernel

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/media/ubuntu/rootfs modules_install

が、VirtualBoxの問題で直接SDカードをマウントできなかったので、ネットワーク経由でSDへコピーした。

 


 

 

 

 

 

intelliJ IDEAのインストール

Scalaの開発環境としてintelliJ IDEAを使えるらしいので使ってみる。

前提条件として、JDKScalaがインストールされていること。

参考にしたのは、以下のページ

IDE(Intellij IDEA) · Scala研修テキスト

 

1. ダウンロード

本家(https://www.jetbrains.com/idea/)からCommunity版をダウンロードして、解凍する。

ファイル名は2019/5/17時点で、ideaIC-2019.1.2.tar.gz

tar xf ideaIC-2019.1.2.tar.gz

 

2. インストール

解凍してできたbinフォルダの中のidea.shを実行する。

 cd bin

./idea.sh

 プライバシーポリシーの確認が表示されるので、チェックをつけてContinue。

プライバシーポリシー

プライバシーポリシー

データ共有設定

データ共有設定

とりあえず、「Don't send」で次へ進む。ロゴが表示されて、ウェルカム画面になる。

ウェルカム画面

ウェルカム画面

3. プラグインのインストール

Scalaプラグインを入れるため、「Configure」→「Plugins」を選ぶ。

plugins

plugins

Scalaがあるのでインストールボタンを押す。インストール後、「Restart IDE」ボタンを押して、再起動する。

 

4. プロジェクトの作成

ウェルカム画面から「Create Neew Project」を選ぶ。プロジェクトのタイプとして、ScalaとIDEAを選ぶ。

プロジェクト作成

プロジェクト作成

 

プロジェクト名は「HelloWorld」、JDKは11(newで/usr/lib/jvm/以下のフォルダを選択する)、Scala SDKscala-sdk-2.11.12(create → browseで/usr/share/scala-2.11を指定)とする。

scala指定

scala指定

 

これで「Finish」するとメイン画面になるので、プログラムを作る。

HelloWorld

HelloWorld

 

「run」すると、「HelloWorld」が出力される。

HelloWorld実行

HelloWorld実行

 

intelliJ IDEAのインストールは以上で終了。