原典
https://opensource-robotics.tokyo.jp/?p=4294
https://opensource-robotics.tokyo.jp/?p=4362
Windowsを設定
- ubuntuに200GBを割り当てる
ドライブCのボリュームの縮小、204800MBをubuntu用のボリュームとする - Win11でローカルアカウント作成の場合
ネットワークに接続しない状態で起動
「国または地域はこれでよろしいですか?」の画面で「Shift+F10」
C:\Windows\System32>cd oobe
C:\Windows\System32>bypassnro.cmd
PCのBIOSを設定
Lenovo Yoga
[Security]-[Secure Boot]=[Disabled]
EPSON Endeavor
Main --------------------------------
Port Configuration
Configure Port As [AHCI]
Security --------------------------------
Hard Disk Protection [Disabled]
Secure Boot [Disabled]
Boot --------------------------------
Boot Setting Configuration ----------------
Screen Logo [Enabled]
Beep Sound [Disabled]
UEFI Boot [Enabled]
UEFI IPv4 PXE [Enabled]
UEFI IPv6 PXE [Enabled]
Boot Option Priority ----------------
Boot Option #1 [UEFI CD/DVD]
#2 [UEFI Removable Device]
#3 [UEFI USB Hard Drive]
#4 [UEFI Hard Drive:ubuntu (P1:Micron_1300_MTFDDAK512TDL)]
#5 [UEFI Network:UEFI:PXE IPv4 Intel(R) Ethernet Connection (11) I219-V]
#6 [CD/DVD: HL-DT-ST DVDROM GHCON]
#7 [Removable Device]
#8 [USB Hard Drive]
#9 [Hard Drive:Micron_1300_MTFDDAK512TDL]
#10 [Network]
UEFI Hard Drive Priorities ----------------
Boot Option #1 [ubuntu (P1:Micron_1300_MTFDDAK512TDL)]
#2 [Windows Boot Manager (P1:Micron_1300_MTFDDAK512TDL)]
UEFI Network Device BBS Priorities ----------------
Boot Option #1 [UEFI: PXE IPv4 Intel(R) Ethernet Connection (11) I219-V]
#2 [UEFI: PXE IPv6 Intel(R) Ethernet Connection (11) I219-V]
CD/DVD ROM Drive Priorities ----------------
Boot Option #1 [P5: HL-DT-ST DVDROM GHCON]
Hard Drive Priorities ----------------
Boot Option #1 [P1: Micron_1300_MTFDDAK512TDL]
MOUSE Computer
[Security]-[Secure Boot]=[Disabled]
[Boot]-[UEFI NVME Drive BBS Priorities]=[Boot option #1]=[ubuntu]
DELL Vostro 3020 Small Desktop
Windowsの起動ディスクを作成しておく。後でWindowsをクリーンインストールする。
[Boot Configuration]-[Enable Secure Boot]=[OFF]
[Storage]-[SATA/NVMe Operation]=[AHCI/NVMe]
StorageをRAIDからAHCIにするとWindowsが起動できなくなるので、起動ディスクで再インストールする。
その他BIOS設定
link
https://qiita.com/carpenders/items/f86b783061a84a28a92a
ハードウェア構成
EPSON Endeavor
内蔵Ethernet Intel I219-V
https://www.intel.com/content/www/us/en/download/14611/15817/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html
ビルドとインストール
$ tar xf e1000e-3.8.4.tar.gz
$ cd e1000e-3.8.4/src/
$ vi nvm.c
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
return 0; /* この関数を無処理にする */
}
$ sudo make install
$ sudo modprobe -r e1000e
$ sudo modprobe e1000e
$ dmesg | grep -i e1000
[ 470.573246] e1000e: loading out-of-tree module taints kernel.
[ 470.573502] e1000e: module verification failed: signature and/or required key missing - tainting kernel
[ 470.577509] e1000e: Intel(R) PRO/1000 Network Driver - 3.8.4-NAPI
[ 470.577510] e1000e: Copyright(c) 1999 - 2020 Intel Corporation.
[ 470.577996] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[ 471.023527] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[ 471.114089] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) d8:97:ba:39:15:e2
[ 471.114091] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[ 471.114280] e1000e 0000:00:1f.6 eth0: MAC: 13, PHY: 12, PBA No: FFFFFF-0FF
[ 471.117633] e1000e 0000:00:1f.6 eno1: renamed from eth0
[ 556.332827] e1000e 0000:00:1f.6 eno1: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
$ sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200 | grep rtt
rtt min/avg/max/mdev = 0.099/0.131/0.219/0.015 ms
DELL Vostro 3020 Small Desktop
内蔵Ethernet RTL8111KD
$ dmesg | grep eth[0-9]
[ 2.681181] r8169 0000:02:00.0 eth0: RTL8168h/8111h, cc:96:e5:42:8d:f4, XID 541, IRQ 137
[ 2.681183] r8169 0000:02:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 2.681774] r8169 0000:02:00.0 enp2s0: renamed from eth0
$ lspci
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 1b)
内蔵WLAN PCIe Realtek 8821CE
sudo apt -y install dkms
git clone https://github.com/tomaspinho/rtl8821ce.git
cd rtl8821ce
インストール
sudo ./install-driver.sh
ドライバ削除
sudo ./remove-driver.sh
$ dmesg | grep 8821
[ 5.747323] 8821ce: loading out-of-tree module taints kernel.
[ 5.747841] 8821ce: module verification failed: signature and/or required key missing - tainting kernel
[ 5.810238] rtl8821ce 0000:03:00.0: enabling device (0000 -> 0003)
[ 6.691129] rtl8821ce 0000:03:00.0 wlp3s0: renamed from wlan0
$ lspci
03:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter
PCIe拡張カード
TP-LINK TG-3468 RTL8168
$ dmesg|grep eth[0-9]
[ 2.681268] r8169 0000:01:00.0 eth0: RTL8168h/8111h, 6c:5a:b0:5a:9e:a3, XID 541, IRQ 128
[ 2.681270] r8169 0000:01:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 2.737331] r8169 0000:01:00.0 enp1s0: renamed from eth0
$ lspci
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8161 (rev 15)
TOPTEK Intel82576
$ dmesg | grep eth[0-9]
[ 2.882133] igb 0000:01:00.0: added PHC on eth0
[ 2.882135] igb 0000:01:00.0: eth0: (PCIe:2.5Gb/s:Width x1) 1c:fd:08:7c:63:fc
[ 2.882138] igb 0000:01:00.0: eth0: PBA No: Unknown
[ 3.138194] igb 0000:01:00.1: added PHC on eth1
[ 3.138195] igb 0000:01:00.1: eth1: (PCIe:2.5Gb/s:Width x1) 1c:fd:08:7c:63:fd
[ 3.138205] igb 0000:01:00.1: eth1: PBA No: Unknown
[ 3.139880] igb 0000:01:00.1 enp1s0f1: renamed from eth1
[ 3.168087] igb 0000:01:00.0 enp1s0f0: renamed from eth0
$ lspci
01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
USB-WLAN
TP-LINK AC600 Archer T2U Plus
ラズベリーパイの場合はインストールの前にREADME.mdを読み「For Raspberry (RPI)」の項目に対応する
sudo apt -y install dkms
git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au
インストール
sudo make dkms_install
ドライバ削除
sudo make dkms_remove
[ 277.392532] usb 1-1: new high-speed USB device number 6 using xhci_hcd
[ 277.413864] usb 1-1: New USB device found, idVendor=2357, idProduct=0120, bcdDevice= 2.00
[ 277.413871] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 277.413873] usb 1-1: Product: 802.11ac WLAN Adapter
[ 277.413876] usb 1-1: Manufacturer: Realtek
[ 277.413877] usb 1-1: SerialNumber: 00e04c000001
[ 277.884240] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 277.885797] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 277.900780] 88XXau: loading out-of-tree module taints kernel.
[ 277.901231] 88XXau: module verification failed: signature and/or required key missing - tainting kernel
[ 277.967845] usb 1-1: 88XXau 78:8c:b5:f7:3f:1a hw_info[107]
[ 277.969690] usbcore: registered new interface driver rtl88XXau
[ 278.000958] rtl88XXau 1-1:1.0 wlx788cb5f73f1a: renamed from wlan0
[ 278.353419] IPv6: ADDRCONF(NETDEV_CHANGE): wlx788cb5f73f1a: link becomes ready
[ 281.964070] IPv6: ADDRCONF(NETDEV_CHANGE): wlx788cb5f73f1a: link becomes ready
TP-LINK AC1300 Archer T3U Plus
sudo apt -y install dkms
git clone https://github.com/morrownr/88x2bu-20210702.git
cd 88x2bu-20210702
インストール
sudo ./install-driver.sh
ドライバ削除
sudo ./remove-driver.sh
[ 371.241337] usb 1-1: new high-speed USB device number 7 using xhci_hcd
[ 371.262524] usb 1-1: New USB device found, idVendor=2357, idProduct=0138, bcdDevice= 2.10
[ 371.262530] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 371.262533] usb 1-1: Product: 802.11ac NIC
[ 371.262535] usb 1-1: Manufacturer: Realtek
[ 371.262537] usb 1-1: SerialNumber: 123456
[ 371.968815] usbcore: registered new interface driver rtl88x2bu
[ 371.991344] rtl88x2bu 1-1:1.0 wlxf0a7318d2eca: renamed from wlan0
[ 372.697255] IPv6: ADDRCONF(NETDEV_CHANGE): wlxf0a7318d2eca: link becomes ready
[ 377.495440] IPv6: ADDRCONF(NETDEV_CHANGE): wlxf0a7318d2eca: link becomes ready
Ubuntuをインストール
必要なファイルを収集
en https://ftp.kddilabs.jp/Linux/packages/ubuntu/releases-cd/
ja https://ftp.kddilabs.jp/Linux/packages/ubuntu-jp/release-cd/releases/
Rufus 3.14 https://rufus.ie/ja/
Ubuntuインストーラで画面が切れたら
ALT + F7
https://qiita.com/baggio/items/06e4132e5e0693c4b7ce
PC共通
- キーボードレイアウト
[日本語]-[日本語] サフィックス無しの選択肢 - アップデートと他のソフトウェア
あらかじめどのアプリケーションをインストールしますか?
[通常のインストール]
その他のオプション
[Ubuntuのインストール中にアップデートをダウンロードする] - インストールの種類
コンピュータにはWindowsBootManagerがインストールされています。どのようにしますか?
[それ以外]
Lenovo Yoga
- [インストールの種類]=[それ以外]
/dev/nvme0n1p4 ext4 / フォーマットする 209715MB
EPSON Endeavor
- [インストールの種類]=[それ以外]
/dev/sda4 ext4 / フォーマットする 209715MB - ホスト名命名規則
frankaepson1,frankaepson2,...
Ubuntuを設定
Ubuntuコマンドインストール
sudo apt update
sudo apt -y upgrade
sudo apt -y install vim openssh-server
# LD_LIBRARY_PATHにros-melodic,ros-noetic用ライブラリを追加するために
$ sudo vi /etc/ld.so.conf # 以下を追加
/opt/ros/melodic/lib
/opt/ros/noetic/lib/x86_64-linux-gnu
$ sudo ldconfig
他のコマンド
https://qiita.com/carpenders/items/69dd6b37a29dd36547ca
Ubuntuを削除
link
https://qiita.com/carpenders/items/966e9e1c5780377e4590
Hyper-V WSL2
link
https://qiita.com/carpenders/items/b4af879718946d7dd102
リアルタイムカーネルを作成
手順は以下
https://frankaemika.github.io/docs/installation_linux.html#setting-up-the-real-time-kernel
sudo apt-get -y install build-essential bc curl ca-certificates gnupg2 libssl-dev
sudo apt-get -y install lsb-release libelf-dev bison flex dwarves zstd libncurses-dev
# For Ubuntu 18.04 tested with the kernel version 5.4.19:
# ubuntu-ja-18.04.3-desktop-amd64.iso : 5.4.0-150-generic
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.19.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.19-rt10.patch.xz
# For Ubuntu 20.04 tested with the kernel version 5.9.1:
# ubuntu-ja-20.04.1-desktop-amd64.iso : 5.4.0-42-generic 5.15.0-89-generic
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.9/patch-5.9.1-rt20.patch.xz
# 22.04以降は公式には未対応の様子
# ubuntu-ja-22.04-desktop-amd64.iso : 6.2.0-36-generic Minisforumで起動不可
# ubuntu-ja-22.04-desktop-amd64.iso : 5.15.0-25-generic Minisforumで起動可能
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.15.2.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patch-5.15.2-rt18.patch.xz
xz -d *.xz
tar xf linux-*.tar
cd linux-*/
patch -p1 < ../patch-*.patch
cp -v /boot/config-$(uname -r) .config
make olddefconfig
make menuconfig
# General Setup > Preemption Model > Fully Preemptible Kernel (Real-Time)
# Cryptographic API > Certificates for signature checking > Provide system-wide ring of trusted keys > Additional X.509 keys for default system keyring で「空欄」を設定
# 変更したらSAVEを忘れずに
make -j$(nproc) deb-pkg
sudo dpkg -i ../linux-headers-*.deb ../linux-image-*.deb
5.9.1-rt20の場合
「残念ながら、Ubuntu20.04で内部エラーが発生しました。」を表示
grubを設定
起動カーネル切り替え
$ grep Ubuntu /boot/grub/grub.cfg
$ sudo vi /etc/default/grub
GRUB_DEFAULT=0
$ sudo update-grub
$ sudo reboot
Ubuntu18.04の例
# 標準カーネル起動なら
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-213-generic"
# リアルタイムカーネル起動なら
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.19-rt10"
Ubuntu20.04の例
# 標準カーネル起動なら
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-89-generic"
# リアルタイムカーネル起動なら
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.9.1-rt20"
Windowsの例
GRUB_DEFAULT="Windows Boot Manager (on /dev/nvme0n1p1)"
起動コンソールメッセージを表示
GRUB_CMDLINE_LINUX_DEFAULT=""
前回起動したOS既定にする場合
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
link
https://blog.masu-mi.me/post/2020/12/05/switch-kernel-with-grub2/
https://qiita.com/saito_now/items/acacf3f5830fdfb90283
https://shinespark.hatenablog.com/entry/2020/03/30/090000
画面サイズ設定
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
$ sudo update-grub
$ sudo reboot
1600x900の例
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1600x900"
リアルタイムカーネルを起動
Ubuntu18.04の例
$ uname -a
Linux frankaepson1 5.4.19-rt10 #1 SMP PREEMPT_RT Mon Nov 1 18:08:49 JST 2021 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu20.04の例
$ uname -a
Linux franka-dell1 5.9.1-rt20 #1 SMP PREEMPT_RT Fri Nov 24 17:01:39 JST 2023 x86_64 x86_64 x86_64 GNU/Linux
ROSバイナリをインストール
https://wiki.ros.org/Distributions
https://en.wikipedia.org/wiki/Ubuntu_version_history
Melodicの場合 Ubuntu18.04 (Bionic)
http://wiki.ros.org/melodic/Installation/Ubuntu
Desktop-Full Install: (Recommended) これを選択
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt -y install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt -y install ros-melodic-desktop-full
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt -y install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo rosdep init
rosdep update
Noeticの場合 Ubuntu 20.04 (Focal)
https://wiki.ros.org/noetic/Installation/Ubuntu
Desktop-Full Install: (Recommended) これを選択
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt -y install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt -y install ros-noetic-desktop-full
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt -y install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update
参照
https://robot.isc.chubu.ac.jp/?p=1447
http://joe.ash.jp/program/ros/setup/install_ros_melodic.htm
https://choreonoid.org/ja/manuals/latest/ros/install-ros.html
Franka Control Interfaceをインストール
原典
https://frankaemika.github.io/docs/installation_linux.html
Melodicの場合
sudo apt -y install ros-melodic-libfranka ros-melodic-franka-ros
Noeticの場合
sudo apt -y install ros-noetic-libfranka ros-noetic-franka-ros
libfrankaをソースファイルからビルドする場合
sudo apt -y install git gcc g++ make
sudo apt -y install build-essential cmake git libpoco-dev libeigen3-dev
git clone --recursive https://github.com/frankaemika/libfranka
cd libfranka
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ..
cmake --build .
グループ名を設定
$ sudo addgroup franka_grp
グループ 'franka_grp' (GID 1001) を追加しています...
完了。
$ sudo usermod -a -G franka_grp $(whoami)
$ sudo vi /etc/security/limits.conf
@franka_grp soft rtprio 99
@franka_grp soft priority 99
@franka_grp soft memlock 102400
@franka_grp hard rtprio 99
@franka_grp hard priority 99
@franka_grp hard memlock 102400
ロボットコントローラと通信して動作
通信性能を確認
$ sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200
[1631854233.491256] 1208 bytes from 172.16.0.2: icmp_seq=9997 ttl=64 time=0.130 ms
[1631854233.492258] 1208 bytes from 172.16.0.2: icmp_seq=9998 ttl=64 time=0.128 ms
[1631854233.493251] 1208 bytes from 172.16.0.2: icmp_seq=9999 ttl=64 time=0.128 ms
[1631854233.494248] 1208 bytes from 172.16.0.2: icmp_seq=10000 ttl=64 time=0.126 ms
--- 172.16.0.2 ping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 9999ms
rtt min/avg/max/mdev = 0.083/0.133/0.527/0.016 ms
$ sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200 | grep rtt
rtt min/avg/max/mdev = 0.078/0.133/0.201/0.012 ms
$ sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200 | grep rtt
rtt min/avg/max/mdev = 0.092/0.133/0.290/0.010 ms
$ sudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200 | grep rtt
rtt min/avg/max/mdev = 0.091/0.133/0.210/0.015 ms
参考資料
Ubuntuメモ
Ubuntu SoftEtherVPNクライアント
https://qiita.com/carpenders/items/fb572c908e83cf1004b0
franka link
全体構成図
https://world.franka.de/resources/img/systemoverview.f74fb8f1.png
FCI全般 Linuxインストール libfranka franka_ros
https://frankaemika.github.io/docs/index.html
その中のlibfranka
https://frankaemika.github.io/docs/libfranka.html
libfrankaクラス仕様
https://frankaemika.github.io/libfranka
frankaリポジトリ
franka_ros libfranka docs icra18-fci-tutorial the_reference_platform external_gripper_example
https://github.com/frankaemika
ros.org link
franka_hwクラス仕様
http://docs.ros.org/en/melodic/api/franka_hw/html/
MoveItチュートリアル
http://docs.ros.org/en/melodic/api/moveit_tutorials/html/index.html
Franka調査
Franka 操作あれこれ
https://qiita.com/carpenders/items/b8909442b71b2ce48761
Franka libfrankaネットワーク性能不足
https://qiita.com/carpenders/items/78338a6a5c9bdda06372
Franka libfranka実行性能
https://qiita.com/carpenders/items/dd2d27804e3e0b385501
Franka ネットにあるアプリケーション実装
https://qiita.com/carpenders/items/f930e0d31bea7ffe2161
Franka自作実装
Franka ローカルでexamplesをビルド・CMakeLists.txt的
https://qiita.com/carpenders/items/e000e011a6aa5164b3a8
Franka ローカルでexamplesをビルド・Makefile的
https://qiita.com/carpenders/items/a35dc63f88d8774f2cc4
Franka 動作性能測定
https://qiita.com/carpenders/items/90bbc992cad570aa7a14
Franka 制御プロトコル
https://qiita.com/carpenders/items/fa554349ebd6540d71d0
Franka BilateralController.exe
https://qiita.com/carpenders/items/6e9d7d54630d484c7cac
ネット情報
C++ラムダ式解説
https://cpprefjp.github.io/lang/cpp11/lambda_expressions.html
https://qiita.com/YukiMiyatake/items/8d10bca26246f4f7a9c8
https://kaworu.jpn.org/cpp/%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8F
ROSの歴史
http://lab3.kuis.kyoto-u.ac.jp/~takase/ros/1intro.pdf
Linux Thread
https://www.tenkaiken.com/short-articles/linux%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89-pthread/
https://docs.oracle.com/cd/E19253-01/819-0390/tlib-12926/index.html
https://region-sys.com/c-4/#t2
https://ja.linux-console.net/?p=12393
http://onishi-lab.jp/programming/thread_linux.html