Sipeed MaixduinoをMaixPyで動かしてみた

フラッシュを書き込むためのコマンドを用意

Maixduino
Sipeed Maixduino

まずはフラッシュを書き込むためのコマンドを用意した。この手の新しいデバイスではファームウェアはまだまだマチュアにはなっていないので、とにかく最新にアップデートしておく。

kflash
https://github.com/kendryte/kflash.py

ちなみにkflash_guiを試してみたが立ち上がってみたものの何かをするとすぐ落ちるので、コマンド版のこちらを使った。コマンド一行で処理できるのでGUI要らない。

ファームウェア

ファームウェアを最新のものにアップデートにする。

ファームウェアの場所
http://dl.sipeed.com/MAIX/MaixPy/release/

ファームウェアのアップデート方法
https://maixpy.sipeed.com/en/get_started/upgrade_firmware.html

今回はmaixpy_v0.3.2_full.binを使った。kflashコマンドを使って書き込んだが問題は発生しなかった。次に顔認識をするためにface_model_at_0x300000.kfpkgをkflashで書き込んだ。fullに含まれているのかも知れないけれど念のため入れておいた。

IDEを用意

IDEから最新のバージョンをダウンロードして使った。

http://dl.sipeed.com/MAIX/MaixPy/ide/

MaixPyIDE

シリアルラインを選択をすると右のモニタがあらわれる。まだ何か足りなくて本来モニタ部分に画像や他の情報が出力されているはずなのに出力されていない。だけれども実行をかけるとMaxiPyは動いて顔もサクサク認識してくれているのでプログラムを試す範囲では困らなかった。

とりあえずメモしておく。

ちなみに動かしたコードはこれ。サンプルコードをほぼそのまま使っている。

import sensor
import image
import lcd
import KPU as kpu

lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(sensor.get_id())
task = kpu.load(0x300000) 
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
	img = sensor.snapshot()
	code = kpu.run_yolo2(task, img)
	if code :
		for i in code :
			a = img.draw_rectangle(i.rect())
	a = lcd.display(img)
a = kpu.deinit(task)

RDRAND命令を使って高速にランダムなバイト列を出力するコマンドを作ってみた

高速にランダムなバイト列を生成するコマンドが欲しかったのでRDRAND命令を使って作ってみた。

https://github.com/SUZUKI-HIRONOBU/rdrand

RDRAND命令に関しての詳しい説明はインテルのサイトにあるので、そちらをじっくり読んで欲しい。

https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide/

日本語訳バージョン

https://www.isus.jp/security/drng-guide/

Ubuntu 16.04 LTS でカーネルが 4.4.0-143 に上がったらVirtualBoxがブートしなくなった

Ubuntu 16.04 LTS でカーネルが 4.4.0-143 になったらVirtualBoxがブートしなくなった。出ているメッセージは次の通り。

Kernel driver not installed (rc=-1908)
The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

/sbin/vboxconfig
as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT. 

しかも/sbin/vboxconfigを動かしても途中でエラーになる。エラーログを見てみるとこんな具合なコンパイルエラーメッセージが出ていた。

/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1113:18: error: too many arguments to function ‘get_user_pages’
             rc = get_user_pages(pTask,                  /* Task for fault accounting. */
                  ^

マジでガチなコンパイルエラーである。ソースコードをみても何をどうしていいかわからない。そこで森羅万象なんでも知っているGoogleにキーワードをぶちこんで検索してみると、こんなページが出てきた。

Kernel 4.4.172 Breaking Some Application
https://slackblogs.blogspot.com/2019/02/kernel-44172-breaking-some-application.html

このページと同じ要領で修正した。もちろん、カーネルバージョンを4.4.143にしている。

修正後、/sbin/vboxconfig を動かすと問題なく終了し、無事、VirtualBoxが立ち上がった。この参考にしたブログエントリーを書いてくれた Willy Sudiarto Raharjo さんに感謝!