qshinoの日記

Powershell関係と徒然なこと

Linux Kconfig

Kconfig

kernelにリンクされるモジュールを見つける方法。

基本的には.configにconfigが保存されており、configの内容を元にリンクされるモジュールが決まる。

.config から対象のモジュールがリンクされているかを知る方法は、.configを読むしかない?

Device Tree

config通りにカーネルにリンクされたかを知る方法は?

リンクされても実際にアクティブなドライバを知る方法は?

dmesgコマンドの出力を見るのが一番早い。但し、未搭載デバイスのドライバ起動もあり、詳細はドライバを確認する。

あるいは、デバイスツリーを使って、

strings /proc/device-tree/compatible

cat /proc/device-tree/axi@0/compatible

等により、ツリー上のデバイスドライバを確認。

ref

device tree

https://qiita.com/koara-local/items/ed99a7b96a0ca252fc4e#_reference-7fb61179985d53e7a181

https://qiita.com/iwatake2222/items/0d13142863d9ed064e41

http://nahitafu.cocolog-nifty.com/nahitafu/2017/12/menuconfig-2062.html

https://tnishinaga.hatenablog.com/entry/2016/04/11/035548

https://www.anarg.jp/personal/t-tugawa/note/linux/kernel_restruct.html

Jetson nano kernel compile

kernel self compile

全体の流れ

  1. swap拡大&max perf
  2. Download and expand kernel sources
  3. .config 取り出し & 編集
  4. build & install

全体で4ステップ。

configやソースを変更したら、4. build&installを繰り返す。

作業一覧

# 1.  swap拡大 & max perf

wget http://github.com/JetsonHacksNano/installSwapfile 
cd installSwapfile 
 ./installSwapfile.sh

sudo jetson_clocks

# 2. Download & Expand

top=~/nano
dl=$top/dl

srclink=https://developer.nvidia.com/embedded/dlc/l4t-sources-32-1-jetson-nano

srcpkg=l4t-sources-32-1-jetson-nano.tar.gz

#srcpkg related
ksrc=public_sources/kernel_src.tbz2

mkdir -p $dl
cd $top

wget $srclink -O $dl/$srcpkg
tar jxvf $dl/$srcpkg 
tar jxvf $ksrc

# 3. get config & edit

cd kernel/kernel-4.9 
zcat /proc/config.gz > .config

# config 編集

# as you like

# 4. build & install

## now in $top/kernel/kernel-4.9

make oldconfig
make prepare 
make modules_prepare 

## build に1時間程度かかる

make -j4 Image && make -j4 modules

## install

sudo make modules_install
sudo cp arch/arm64/boot/Image /boot/Image 

# 最後にリブート

sudo reboot

ref

https://qiita.com/karaage0703/items/9bef6aeec9ad24f647c6

Jetson and Tegra names

tegra

Jetson Tegra Devkit rule note
K1 132/K1-64 ... 28nm Denver,nexus 9 tablet
TX1 210 X1/erista p2597-2180 20nm nintendo switch, CortexA57x4/53x4
TX2 186 X2/Parker p3310-1000 16nm Denver2
Xavier 194 12nm carmel
Nano 210 p3448-0000 TX1base

ref

https://www.rt-shop.jp/blog/archives/11277

https://en.wikichip.org/wiki/nvidia/tegra/xavier

note

Jetson TX1/TX2 devkitのCarrier Boardは同じ。

tx2

hardware/nvidia/platform/t18x/quill/kernel-dts/tegra186-quill-p3310-1000-c00-00-auo-1080p-edp.dts 

DTS name

board-som-ver-xxx.dts

shのステップ制御

shのステップ制御

インストールスクリプトや、試験スクリプト作成時、エラーが起きた行を修正し、エラーの行から再実行したい場合がないだろうか。

そんな時、一部をコメントアウトしたり、コピペしたりしていませんか。

そんな時に役立つshのステップ実行用関数。

作り方

shスクリプトファイルをfooとする。

sh スクリプト

  • s && 試験コード1
  • s && 試験コード2
  • ...

実行方法

  • foo -s 23

ステップ23 から実行。

先頭にs && を追加するのが大変とは言え、個別にコメントを入れるよりはマシ。

コマンド全体を文字列として受け取り、行単位に実行する方法もあるが、大掛かりになり過ぎるかもしれない。

s関数

_start=0
_end=0
_to=0

s (){
  _step=$(( $_step + 1))
  echo "step  $_step"
  [ $_step -lt $_start ] && return 0
  [ $_step -gt $_end ] && return 0
  
  return 1
}

# 引数処理

handleopts (){
  while getopts hs:e: OPT ; do
    case $OPT in
      h) usage ; exit 0;;
      s) _start=$OPTARG
        ;;
      e) _end=$OPTARG
        ;;
      *) usage
        ;;
    esac
  done
  shift $(( $OPTIND - 1 ))
}

usage(){
  echo "usage: cmd [options] params..."
}

Jetson nano usb boot

usb boot

Jetson Nano のUSB bootには、usb3 firmware とxusbドライバをカーネルに盛り込む必要がある。

全体の流れ。

  1. kernel source download
  2. get kernel config
  3. get usb firmware
  4. make menuconfig & build & install
  5. create ext4 and copy on usb
  6. edit extlinux.conf

kernel source

Jetson-Nano-public_sources.tbz2

get config

zcat /proc/config.gz > .config

get firmware

cp /lib/firmware/tegra21x_xusb_firmware ./firmware/

make menuconfig

kernel config

  • sudo apt-get install libncurses5-dev
  • make menuconfig
Device Drivers 
-> Generic Driver Options
-> "External firmware blobs to build into the kernel binary,"
-> "tegra21x_xusb_firmware"

build and install kernel

カーネルのビルドとインストール。

cd ~/kernel/kernel-4.9

make -j5

sudo make modules_install

sudo cp /boot/Image /boot/Image.dist

sudo cp arch/arm64/boot/Image /boot

ここでreboot。

create ext4 and copy on usb

usb flashパーティションを作成し、rootfsをコピー。

# clear usb flash
sudo dd if=/dev/zero of=/dev/sda bs=1M count=1

sudo cfdisk /dev/sda

# root とswapの2つのgptパーティションを作成。

# 24GB/root + 6GB/swapの例

sudo parted /dev/sda print
sudo parted /dev/sda mklabel gpt

sudo parted /dev/sda mkpart root ext4 1MB 24GB
sudo parted /dev/sda mkpart swap linux-swap 24GB 30GB

# copy rootfs

sudo mkfs.ext4 /dev/sda1
sudo mkswap /dev/sda2
sudo mkdir /mnt/root
sudo mount /dev/sda1 /mnt/root
sudo mkdir /mnt/root/proc
sudo apt -y install rsync
sudo rsync -axHAWX --numeric-ids --info=progress2 --exclude=/proc / /mnt/root

edit extlinux.conf

sudo sed -i 's/mmcblk0p1/sda1/' /boot/extlinux/extlinux.conf

# 以下は不要。

sudo sed -i 's/rootwait/rootwait zswap.enabled=1/' /boot/extlinux/extlinux.conf

上記のzswap.enabled=1はドライバを入れた場合だが、本記事では省略しているので不要。

ここでreboot

最後にswap partition

先のrebootで問題なければ、

echo "/dev/sda2            none                  swap           \
defaults                                     0 1" | sudo tee -a /etc/fstab

cd ~
wget https://raw.githubusercontent.com/Syonyk/raspberry_pi_scripts/master/zswap.sh

zswap は、ドライバを入れていれば。

参考元にはzswapドライバを入れる手順があるが省略。

ref

https://syonyk.blogspot.com/2019/04/nvidia-jetson-nano-desktop-use-kernel-builds.html?m=1

機械学習/DL, 推論用モデル、フレームワーク、DNN、データ

推論モデル

  • Tensorflow
  • keras
  • ONNX caffe, pytorch, mxnet, etc

Ftamework

機械学習フレームワーク

  • keras
  • Pytorch

機械学習フレームワーク

  • Tensorflow
  • Caffe
  • chainer
  • Mxnet
  • Therano
  • CNTX

Library

  • cuDNN CUDA用DNNライブラリ
  • cuBLAS CUDA用代数ライブラリ
  • TensorRT nvidiaのDL用ライブラリ

Language

データ、ネットワーク、実装

  • imagenet
  • yolo/darknet 物体検知
  • MNIST 手書き数字認識データセット
  • CIFAR-10 画像データセット
  • mobilenet
  • SSD 物体検知
  • coco Common Object in context データセット
  • styleGAN 画像生成
  • VGGnet : 物体認識
  • googlenet
  • alexnet 2012 ILSVRC Alex Krizhevskyさん作, SuperVisionとも呼ばれる。

学会、コンペ系

ILSVRC : ImageNet Large Scale Visual Recognition Competition

  • 2012 alexnet 5cnv, 3pool, 3fc
  • 2013 ZFnet
  • 2014 Googlenet

補足

時間があれば時間軸で整理したい。

参考

TensorRT

https://developer.nvidia.com/tensorrt

CIFR-10

https://www.cs.toronto.edu/~kriz/cifar.html

http://aidiary.hatenablog.com/entry/20151014/1444827123

Raspberry Pi 4 B

2019/6/24 pi 4B 発表

価格

  • 1GB $35
  • 2GB $45
  • 4GB $55
  • 電源 $8
  • ケース $5
  • kit $120

Pi 3B+との比較

Pi4B Pi3B+ Pi3B
発表 2019/6/24 2018/3/14
wifi 802.11ac
Blutooth 5.0 4.0?
HDMI 2xTypeD/micro HDMI 1xTypeA
LAN 1G 1G/実効300M 100M
usb dev TypeC MicroB
USB Host. 3.0x2,2.0x2 2.0x4
SD MicroSDx1
CSI o o
DSI o o
CPU 1.5Ghz A72x4 1.4GHz A53x4 1.2Gx4
SoC BCM2711 BCM2837B0 BCM2837
mem LPDDR4 1-4GB LPDDR2 1GB
PoE jumper x
Power 5V 3A 5V 2.5A
4kx60fps
GLES3.x

ref

pi4b

https://www.google.com/amp/s/www.gizmodo.jp/amp/2019/06/raspberry-pi4-launch.html

pi3b+

https://www.phileweb.com/sp/review/article/201803/27/2984_3.html