Moved

Takumi Sueda 2021-12-05 18:18:14 +09:00
parent 67e2dbd8da
commit d67022ea0b
36 changed files with 2 additions and 1203 deletions

24
Home.md

@ -1,25 +1,5 @@
<!-- This file is generated by gen.py. DO NOT EDIT MANUALLY! -->
<img src="images/top.jpg">
**Wiki は [wiki.brainux.org](https://wiki.brainux.org/) に移転しました。**
&nbsp;
**We've moved the wiki to [wiki.brainux.org](https://wiki.brainux.org/).**
- [とりあえず試す](%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E8%A9%A6%E3%81%99)
- [ロードマップ](%E3%83%AD%E3%83%BC%E3%83%89%E3%83%9E%E3%83%83%E3%83%97)
# Linux
- [SDカードにコピー](Linux%EF%BC%9ESD%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AB%E3%82%B3%E3%83%94%E3%83%BC)
- [ビルド](Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)
- [開発](Linux%EF%BC%9E%E9%96%8B%E7%99%BA)
# Tips
- [OTG ケーブル](Tips%EF%BC%9EOTG-%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB)
- [Swap](Tips%EF%BC%9ESwap)
- [USB Ethernet Gadget](Tips%EF%BC%9EUSB-Ethernet-Gadget)
- [Xorg](Tips%EF%BC%9EXorg)
- [タッチパネル補正](Tips%EF%BC%9E%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB%E8%A3%9C%E6%AD%A3)
- [ブラウザ](Tips%EF%BC%9E%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6)
# UBoot
- [ビルド](U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)
- [起動 (EBOOT)](U%E2%80%90Boot%EF%BC%9E%E8%B5%B7%E5%8B%95-%28EBOOT%29)
- [起動 (USB Recovery)](U%E2%80%90Boot%EF%BC%9E%E8%B5%B7%E5%8B%95-%28USB-Recovery%29)
# その他
- [Wikiの編集方法](%E3%81%9D%E3%81%AE%E4%BB%96%EF%BC%9EWiki%E3%81%AE%E7%B7%A8%E9%9B%86%E6%96%B9%E6%B3%95)

@ -1,92 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [注意!](#%E6%B3%A8%E6%84%8F)
- [前提](#%E5%89%8D%E6%8F%90)
- [パーティションを区切る](#%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%8C%BA%E5%88%87%E3%82%8B)
- [GPartedのインストール](#gparted%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [パーティションを作成する](#%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)
- [GPartedの起動](#gparted%E3%81%AE%E8%B5%B7%E5%8B%95)
- [パーティションの削除](#%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%89%8A%E9%99%A4)
- [パーティションの作成](#%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90)
- [必要なファイルをコピーする](#%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 注意!
***この手順を実行すると、SDカードの内容が消去されます。必ずバックアップをしてから実行しましょう。***
# 前提
- [Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)にてLinuxをビルドしていること
- [U-Bootビルドbuildbrain](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9Ebuildbrain)または[UBootビルド手動](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9E%E6%89%8B%E5%8B%95)にてU-Bootをビルドしていること(現在執筆中)
# パーティションを区切る
先頭に100MBくらいのFAT32のパーティションを作り、残りをext4のパーティションにします。
## GPartedのインストール
以下のコマンドで GParted をインストールします。
```sh
sudo apt install gparted
```
## パーティションを作成する
LinuxをインストールするSDカードをPCに挿入してGPartedを起動します。
### GPartedの起動
![GParted起動画面](https://github.com/brain-hackers/README/wiki/images/Launch-GParted.png)
GPartedの右上のメニューからSDカードを選びます。容量で選ぶとわかりやすいです。
### パーティションの削除
![パーティションの削除](https://github.com/brain-hackers/README/wiki/images/partition-delete.png)
***この手順を実行すると、SDカードの内容が消去されます。必ずバックアップをしてから実行しましょう。***
パーティションを右クリックしたあと "削除" をクリックしてパーティションを削除します。
### パーティションの作成
まず、FAT32のパーティションを作成します。 "未割り当て" のパーティションを右クリックして "新規" をクリックします。
![新規パーティションの作成のダイアログ](https://github.com/brain-hackers/README/wiki/images/create-partition-fat32.png)
上図のようなダイアログが表示されたら
- 新しいサイズ: 100MiB 程度
- ファイルシステム: fat32
に設定して "追加" をクリックし、パーティションを作成します。
次に、ext4のパーティションを作成します。
- 新しいサイズ: 残りの容量いっぱいまで
- ファイルシステム: ext4
に設定して "追加" をクリックし、パーティションを作成します。
# 必要なファイルをコピーする
1. `buildbrain`ディレクトリの中からファイルをコピーします
- `linux-brain/arch/arm/boot/zImage`
- `linux-brain/arch/arm/boot/dts/imx28-[機種名].dts`
これらをSDカードのFAT32のパーティションへコピーします。
2. ターミナルを起動して `cd buildbrain``buildbrain` ディレクトリに入ります
以下のコマンドを実行します。
```sh
sudo cp -ar ./brainux/* /SDカードの/2つ目の/パーティション/
```
`/SDカードの/2つ目の/パーティション/` は適宜読み替えてください。

@ -1,79 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [動作環境](#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83)
- [依存関係のインストール](#%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Gitリポジトリのクローン](#git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3)
- [Linuxのビルド](#linux%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89)
- [Brainuxのビルド](#brainux%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89)
- [パッケージの追加方法 (任意)](#%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E8%BF%BD%E5%8A%A0%E6%96%B9%E6%B3%95-%E4%BB%BB%E6%84%8F)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 動作環境
- Debian 10 (Buster)
- Ubuntu 20.04 LTS
本項では上記のいずれかを使用していることを前提で記述します。
#前提
この頁の内容を実行する前に[UBootビルドbuildbrain](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9Ebuildbrain)の内容を実行してください。
# 依存関係のインストール
以下のコマンドで依存関係をインストールします。
```sh
sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi debootstrap qemu-user-static
```
# Gitリポジトリのクローン
以下のコマンドでGitリポジトリをクローンして、必要なファイルをダウンロードします。長い時間がかかるので、時間のあるときに行いましょう。
```
git clone --recursive https://github.com/brain-hackers/buildbrain.git
```
# Linuxのビルド
1. `cd buildbrain``buildbrain` ディレクトリに入ります。
2. `make ldefconfig` を実行して、 `.config` ファイルを作成します。
3. `make lbuild` を実行してLinuxをビルドします。
# Brainuxのビルド
Linuxのカーネルの準備ができたら、カーネルの上で動くアプリケーションを用意して、Linuxディストリビューションを完成させます。
1. バックグラウンドで `make aptcache` を実行します。
- 新しいウィンドウでターミナルを開き、 `make aptcache` を実行してそのままにしておきます。
2. `make brainux` を実行します。長い時間がかかるので、時間のあるときに行いましょう。
## パッケージの追加方法 (任意)
追加で欲しいパッケージを `./tools/setup_debian.sh` の51行目あたりに追記します。
実際に追記した例を以下に示します。
```diff
42 apt install -y dialog sudo \
43 libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev \
44 xserver-xorg xserver-xorg-video-fbdev xserver-xorg-dev xorg-dev x11-apps \
45 openbox obconf obmenu \
46 weston xwayland \
47 bash tmux vim htop \
48 midori pcmanfm lxterminal xterm gnome-terminal fonts-noto-cjk \
49 dbus udev build-essential flex bison pkg-config autotools-dev libtool autoconf automake \
50 python3 python3-dev python3-setuptools python3-wheel python3-pip python3-smbus \
51 resolvconf net-tools ssh openssh-client avahi-daemon
+ 52 apt install -y fbterm uim-fep uim-mozc
```
[SDカードにコピー](https://github.com/brain-hackers/README/wiki/LinuxSDカードにコピー)に続く…

@ -1,62 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [足りないドライバを追加する](#%E8%B6%B3%E3%82%8A%E3%81%AA%E3%81%84%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)
- [実機上で開発する](#%E5%AE%9F%E6%A9%9F%E4%B8%8A%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B)
- [ヘッダーパッケージを用意しインストールする](#%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)
- [実機上でモジュールを書いて Hello World する](#%E5%AE%9F%E6%A9%9F%E4%B8%8A%E3%81%A7%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6-hello-world-%E3%81%99%E3%82%8B)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 足りないドライバを追加する
WIP
# 実機上で開発する
バージョン 2021-04-19-195555 現在、配布されている Brainux の SD イメージにはフルセットの GCC その他が含まれるため、そのまま実機上で Linux kernel の開発をすることができます。実機では主にデバイスドライバの開発を想定しています。非常に時間がかかると思われますが、 brain-hackers/linux-brain を pull すればカーネル全体のビルドも理論的には可能です。
実機上でのカーネルモジュールの開発には、今動いているカーネルへの API のほか必要な定義が記載されたヘッダーファイルが必要です。ヘッダーファイルはヘッダーパッケージをインストールすることで利用可能になります。2021年4月21日現在ではまだヘッダーパッケージは配布されていないため、手で用意する必要があります。
## ヘッダーパッケージを用意しインストールする
先に必要なものとして、[Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)のページに従って buildbrain をクローンしておいてください。
1. buildbrain のディレクトリに入ります
2. 最新のリリースを取得するため `git pull` を実行します
3. お手元の Brain で動かしている Brainux のバージョンと合う buildbrain の状態へ巻き戻します
たとえば、Brainux のバージョンが 2021-04-19-195555 だった場合:
```
$ git tag -n1
...
2021-04-19-195555 Merge pull request #16 from brain-hackers/ci-next
$ git checkout --recurse-submodules 2021-04-19-195555
```
4. パッケージをビルドします
```
$ make ldebpkg
```
5. できたパッケージを何らかの方法で実機にコピーし、インストールします
注意!以下のコマンドは実機上で実行するものです。お使いのパソコン上では実行しないでください。
```
$ dpkg -i linux-headers-*.deb
```
## 実機上でモジュールを書いて Hello World する
WIP

@ -1,15 +0,0 @@
.PHONY:
finalize: doctoc generate
.PHONY:
doctoc:
doctoc --title "### 目次" .
.PHONY:
generate:
python3 gen.py
.PHONY:
preview:
python3 -m grip . 0.0.0.0

@ -1,23 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [使える USB OTG ケーブル一覧](#%E4%BD%BF%E3%81%88%E3%82%8B-usb-otg-%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB%E4%B8%80%E8%A6%A7)
- [使えない USB OTG ケーブル一覧](#%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84-usb-otg-%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB%E4%B8%80%E8%A6%A7)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 使える USB OTG ケーブル一覧
Brainux の初期状態では、USB コントローラーはホストとして動作するようになっています。OTG ケーブルを使用すると好きなデバイスを接続することができます。Brain 自身は VBUS (5V) を供給する能力はないので、電源が別途供給可能な OTG ケーブルを使用する必要があります。
- [RouteR RUH-OTGU4](https://amz.run/4Kue)
- [AINEX USB-120R](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5EHA)
- [CY 90度左右角度付きMicro USB 2.0 OTGホストアダプター](https://amz.run/4LXg)
# 使えない USB OTG ケーブル一覧
- [Easi-Cable](https://amz.run/4KqD)

@ -1,39 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [スワップの作成を推奨します](#%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97%E3%81%AE%E4%BD%9C%E6%88%90%E3%82%92%E6%8E%A8%E5%A5%A8%E3%81%97%E3%81%BE%E3%81%99)
- [作成方法](#%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# スワップの作成を推奨します
Brain の DRAM は 128MB しかないので、簡単にメモリが食いつぶされます。この時、スワップがないと OOM Killer により重要なプロセスが終了される危険性があるため、スワップを作成することをおすすめします。
2021年2月23日現在のリリースではまだスワップ領域を標準で設定していません。Brain Hackers では将来のリリースで標準でスワップを設定することを検討しています。
# 作成方法
1. 以下のコマンドを実行して、スワップのための領域を確保します
今回の例では、256MBこれ以上を推奨の領域を確保しています。他の容量にしたい場合は適宜 `bs``count` の値を変えてください。
```
dd if=/dev/zero of=/swapfile bs=1M count=256
chmod 0600 /swapfile
```
2. スワップ領域を初期化します
```
mkswap /swapfile
```
3. スワップ領域を有効にします
```
swapon /swapfile
```

@ -1,79 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [USB Gadget とは?](#usb-gadget-%E3%81%A8%E3%81%AF)
- [Why USB Gadget?](#why-usb-gadget)
- [USB コントローラーの動作モードを変更する](#usb-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B)
- [Brain に Ethernet Gadget を喋らせる](#brain-%E3%81%AB-ethernet-gadget-%E3%82%92%E5%96%8B%E3%82%89%E3%81%9B%E3%82%8B)
- [パソコン側の対応作業](#%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E5%81%B4%E3%81%AE%E5%AF%BE%E5%BF%9C%E4%BD%9C%E6%A5%AD)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# USB Gadget とは?
コンピューターがあたかも USB デバイスであるかのように振る舞う仕組みです。
# Why USB Gadget?
インターネットに接続可能なパソコンに USB で Brain を接続するだけで Brain からインターネットに出たり、パソコンと Brain で双方向に SSH したりできるようになります。電池切れの心配もありません。
# USB コントローラーの動作モードを変更する
初期状態では Brain の USB コントローラーはホストとして動作するため、このままではデバイスになることができません。
2021年2月23日現在ではまだありませんが、コントローラーの動作モードを簡単に切り替えるスクリプトを用意する予定です。
手動で変更するには、Device Tree Compiler を使用します。
# Brain に Ethernet Gadget を喋らせる
1. 以下のスクリプトを vi や nano でホームディレクトリに保存します
```
#!/bin/sh
g=/sys/kernel/config/usb_gadget/eth
mkdir ${g}
mkdir ${g}/functions/rndis.rn0
echo "8a:15:8b:44:3a:02" > ${g}/functions/rndis.rn0/dev_addr
echo "8a:15:8b:44:3a:01" > ${g}/functions/rndis.rn0/host_addr
mkdir ${g}/configs/c.1
ln -s ${g}/functions/rndis.rn0 ${g}/configs/c.1/
echo "ci_hdrc.0" > ${g}/UDC
sleep 1
ifconfig usb0 up
sleep 1
dhclient
```
2. スクリプトに実行属性を付けます
ここではスクリプト名を `gadget.sh` としています。1. で保存した名前に置き換えてください。
```
$ chmod +x gadget.sh
```
3. 実行します
次回起動時からはこのスクリプトを都度実行します。
```
$ ./gadget.sh
```
# パソコン側の対応作業
Windows / Mac / Linux すべてで利用可能です。(注: 2021年2月23日現在、上記スクリプトでは Windows と macOS で認識しないことを確認しており、修正予定です)
パソコンを通してインターネットに出るために、ネットワーク接続の共有設定が必要になります。OS ごとに設定方法は異なりますので、別途設定してください。

@ -1,42 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [Brain 特有の Xorg の設定について](#brain-%E7%89%B9%E6%9C%89%E3%81%AE-xorg-%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
- [xorg.conf](#xorgconf)
- [起こし方](#%E8%B5%B7%E3%81%93%E3%81%97%E6%96%B9)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Brain 特有の Xorg の設定について
PW-Sx7 までは SoC に GPU が載っておらず、framebuffer (fbdev) のみが利用可能です。つまり、お手元の Linux マシンで Xorg が GPU と通信するときに使う仕組み (DRM, DRI) は利用できません。設定ファイルに fbdev を使用するように明示的に書くことで Xorg が動かせます。
# xorg.conf
設定ファイル xorg.conf の内容を以下に示します。vi か nano を使って以下の内容を `/etc/X11/xorg.conf` に書き込んでください。
```
Section "Device"
Identifier "device"
Driver "fbdev"
EndSection
Section "Screen"
Identifier "screen"
Device "device"
EndSection
```
# 起こし方
2021年2月23日現在では、Xorg はブートシークエンスと結合されていません。つまり、手で起動します。
```sh
$ Xorg &
$ openbox-session &
```
以上を実行した後にお好みのソフトを起動してください。

@ -1,97 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [事前に](#%E4%BA%8B%E5%89%8D%E3%81%AB)
- [必要なパッケージのインストール](#%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Xorgとopenboxの起動](#xorg%E3%81%A8openbox%E3%81%AE%E8%B5%B7%E5%8B%95)
- [タッチパネル補正ツールの起動](#%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB%E8%A3%9C%E6%AD%A3%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E8%B5%B7%E5%8B%95)
- [補正する](#%E8%A3%9C%E6%AD%A3%E3%81%99%E3%82%8B)
- [設定ファイルを作成・保存する](#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%83%BB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B)
- [Xorgの再起動](#xorg%E3%81%AE%E5%86%8D%E8%B5%B7%E5%8B%95)
- [完成](#%E5%AE%8C%E6%88%90)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 事前に
Xorgの設定ファイル ( xorg.conf )を設定していない場合は、下記のWikiを参照して設定してください。
[TipsXorg](https://github.com/brain-hackers/README/wiki/Tips%EF%BC%9EXorg#xorgconf)
# 必要なパッケージのインストール
```
apt install xserver-xorg-input-evdev xinput-calibrator
```
を実行して、必要なパッケージをインストールします。
# Xorgとopenboxの起動
```
Xorg &
```
```
openbox-session &
```
を実行して、Xorgとopenboxを起動します。
# タッチパネル補正ツールの起動
```
xinput_calibrator
```
画面上に補正画面が表示されます。
![xinput-calibratorの画面](https://github.com/brain-hackers/README/wiki/images/xinput-calibrator.png)
# 補正する
画面上の 赤い十字 を**丁寧に** 4回タッチすると、補正用の設定項目が端末に出力されます。
```
Setting calibration data: 0, 4095, 0, 4095
Calibrating EVDEV driver for "mxs-lradc-ts" id=6
current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095
Doing dynamic recalibration:
Setting calibration data: 147, 3618, 3826, 350
--> Making the calibration permanent <--
copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
Identifier "calibration"
MatchProduct "mxs-lradc-ts"
Option "Calibration" "147 3618 3826 350"
Option "SwapAxes" "0"
EndSection
```
# 設定ファイルを作成・保存する
`/etc/X11/xorg.conf.d`を作成します。
```
mkdir /etx/X11/xorg.conf/d
```
xinput_calibratorの出力に従って、`/etc/X11/xorg.conf.d/99-calibration.conf`に
`Section "InputClass"` から `EndSection`までの行を nano や vi を用いて書き出します。
```
Section "InputClass"
Identifier "calibration"
MatchProduct "mxs-lradc-ts"
Option "Calibration" "147 3618 3826 350"
Option "SwapAxes" "0"
EndSection
```
# Xorgの再起動
```
pkill Xorg
```
```
Xorg &
```
```
openbox-session &
```
でXorgを再起動します。
# 完成
![ちゃんとタッチした場所にカーソルが来ています](https://github.com/brain-hackers/README/wiki/images/calibrator-done.gif)

@ -1,33 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [グラフィカルブラウザ](#%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6)
- [Midori](#midori)
- [Surf](#surf)
- [テキストブラウザ](#%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# グラフィカルブラウザ
**グラフィカルブラウザを使うのは困難です!** PW-Sx7 までの Brain が搭載している SoC は初代 Raspberry Pi のクロック周波数の約半分の速度で動作し、メモリ容量も半分以下の 128MB しかありません。つまり、インターネットブラウジングは現実的ではありません。例えば、[極めて高速に表示されることで有名な著名人のサイト](http://abehiroshi.la.coocan.jp/)の表示に実測15秒ほどかかります。また、Twitter は表示不可能です。
## Midori
代表的な軽量なブラウザの選択肢に Midori があります。Brainux にはプリインストールされています。Xorg が起動している状態で、以下のコマンドを実行すると Midori が起動します。
```
$ DISPLAY=:0 midori
```
## Surf
[`surf`](https://surf.suckless.org/) も動作することを確認していますが、Midori と速度はほとんど変わりません。
# テキストブラウザ
Lynx や w3m は非常にスムーズに動作します。現実的なスピードで Web サイトを閲覧するにはこれらをおすすめします。

@ -1,56 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [動作環境](#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83)
- [環境の構築](#%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89)
- [依存関係のインストール](#%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Gitリポジトリのクローン](#git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3)
- [U-Bootのビルドとnk.binの作成](#u-boot%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%81%A8nkbin%E3%81%AE%E4%BD%9C%E6%88%90)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 動作環境
- Debian 10 (Buster)
- Ubuntu 20.04 LTS
本項では上記のいずれかを使用していることを前提で記述します。
# 環境の構築
[Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)の頁で既に構築している場合は飛ばします。
## 依存関係のインストール
以下のコマンドで依存関係をインストールしてください。
```sh
sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi debootstrap qemu-user-static
```
## Gitリポジトリのクローン
Gitリポジトリをクローンして、必要なファイルをダウンロードします。長い時間がかかるので、時間のある時に実いましょう。
```
git clone --recursive https://github.com/brain-hackers/buildbrain.git
```
# U-Bootのビルドとnk.binの作成
1. `cd buildbrain``buildbrain` ディレクトリに入ります
2. `make udefconfig-sh*` を実行して、 `.config` ファイルを作成します
- PW-Sx1のとき `make udefconfig-sh1`
- PW-Sx5のとき `make udefconfig-sh5`
3. `make ubuild` を実行して `u-boot.sb` を生成します
4. `make nkbin_maker` を実行します
5. `make nk.bin` を実行します
[Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)に続く…

@ -1 +0,0 @@
Under Construction

@ -1 +0,0 @@
Under Construction

@ -1,23 +0,0 @@
<!-- This file is generated by gen.py. DO NOT EDIT MANUALLY! -->
[Home](Home)
- [とりあえず試す](%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E8%A9%A6%E3%81%99)
- [ロードマップ](%E3%83%AD%E3%83%BC%E3%83%89%E3%83%9E%E3%83%83%E3%83%97)
# Linux
- [SDカードにコピー](Linux%EF%BC%9ESD%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AB%E3%82%B3%E3%83%94%E3%83%BC)
- [ビルド](Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)
- [開発](Linux%EF%BC%9E%E9%96%8B%E7%99%BA)
# Tips
- [OTG ケーブル](Tips%EF%BC%9EOTG-%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB)
- [Swap](Tips%EF%BC%9ESwap)
- [USB Ethernet Gadget](Tips%EF%BC%9EUSB-Ethernet-Gadget)
- [Xorg](Tips%EF%BC%9EXorg)
- [タッチパネル補正](Tips%EF%BC%9E%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB%E8%A3%9C%E6%AD%A3)
- [ブラウザ](Tips%EF%BC%9E%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6)
# UBoot
- [ビルド](U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)
- [起動 (EBOOT)](U%E2%80%90Boot%EF%BC%9E%E8%B5%B7%E5%8B%95-%28EBOOT%29)
- [起動 (USB Recovery)](U%E2%80%90Boot%EF%BC%9E%E8%B5%B7%E5%8B%95-%28USB-Recovery%29)
# その他
- [Wikiの編集方法](%E3%81%9D%E3%81%AE%E4%BB%96%EF%BC%9EWiki%E3%81%AE%E7%B7%A8%E9%9B%86%E6%96%B9%E6%B3%95)

56
gen.py

@ -1,56 +0,0 @@
from pathlib import Path
from unicodedata import normalize
from urllib.parse import quote
import markdown
def main():
fn_tree = dict()
idfn = dict()
for fn in sorted(Path('.').glob("*.md")):
if fn.name in {'Home.md', '_Sidebar.md', '_Footer.md'}:
continue
fn_tokens = fn.name[:-3].replace('-', ' ').split('')
ptr = fn_tree
for t in fn_tokens:
ptr[t] = ptr.get(t, dict())
ptr = ptr[t]
normalized = normalize('NFC', fn.name[:-3])
idfn[id(ptr)] = quote(normalized.replace(' ', '-'), encoding='utf-8')
md = markdown.Markdown(extensions=['toc'])
with open(str(fn)) as f:
raw = f.read()
md.convert(raw)
with open('_Sidebar.md', 'w') as f:
f.write('<!-- This file is generated by gen.py. DO NOT EDIT MANUALLY! -->\n\n')
f.write('[Home](Home)\n\n')
recurse(f, fn_tree, idfn)
with open('Home.md', 'w') as f:
f.write('<!-- This file is generated by gen.py. DO NOT EDIT MANUALLY! -->\n\n')
f.write('<img src="images/top.jpg">\n\n')
f.write('&nbsp;\n\n')
recurse(f, fn_tree, idfn)
def recurse(f, d, idfn, level=1):
for k, child_dict in d.items():
if child_dict:
continue
f.write(f' - [{k}]({idfn[id(child_dict)]})\n')
for k, child_dict in d.items():
if not child_dict:
continue
f.write('#' + '##' * (level-1) + f' {k}\n')
recurse(f, child_dict, idfn, level=level+1)
main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 925 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 934 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

@ -1,2 +0,0 @@
markdown
grip

@ -1,203 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [準備](#%E6%BA%96%E5%82%99)
- [各種操作](#%E5%90%84%E7%A8%AE%E6%93%8D%E4%BD%9C)
- [ページを追加・削除する](#%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E8%BF%BD%E5%8A%A0%E3%83%BB%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B)
- [ページを編集する](#%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%99%E3%82%8B)
- [各文章内の目次生成](#%E5%90%84%E6%96%87%E7%AB%A0%E5%86%85%E3%81%AE%E7%9B%AE%E6%AC%A1%E7%94%9F%E6%88%90)
- [ファイル名とサイドバーの関係](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%A8%E3%82%B5%E3%82%A4%E3%83%89%E3%83%90%E3%83%BC%E3%81%AE%E9%96%A2%E4%BF%82)
- [記述ルール](#%E8%A8%98%E8%BF%B0%E3%83%AB%E3%83%BC%E3%83%AB)
- [文体](#%E6%96%87%E4%BD%93)
- [「ですます」と「だ・である」は統一する](#%E3%81%A7%E3%81%99%E3%81%BE%E3%81%99%E3%81%A8%E3%81%A0%E3%83%BB%E3%81%A7%E3%81%82%E3%82%8B%E3%81%AF%E7%B5%B1%E4%B8%80%E3%81%99%E3%82%8B)
- [依頼する時はできるだけ「します」で締める](#%E4%BE%9D%E9%A0%BC%E3%81%99%E3%82%8B%E6%99%82%E3%81%AF%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%A0%E3%81%91%E3%81%97%E3%81%BE%E3%81%99%E3%81%A7%E7%B7%A0%E3%82%81%E3%82%8B)
- [繰り返しや冗長な表現をなくす](#%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E3%82%84%E5%86%97%E9%95%B7%E3%81%AA%E8%A1%A8%E7%8F%BE%E3%82%92%E3%81%AA%E3%81%8F%E3%81%99)
- [カッコは基本的に使わない](#%E3%82%AB%E3%83%83%E3%82%B3%E3%81%AF%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AB%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84)
- [箇条書きには句読点を入れない](#%E7%AE%87%E6%9D%A1%E6%9B%B8%E3%81%8D%E3%81%AB%E3%81%AF%E5%8F%A5%E8%AA%AD%E7%82%B9%E3%82%92%E5%85%A5%E3%82%8C%E3%81%AA%E3%81%84)
- [感情を排除する](#%E6%84%9F%E6%83%85%E3%82%92%E6%8E%92%E9%99%A4%E3%81%99%E3%82%8B)
- [コードブロックや画像と文章の関わりを示す](#%E3%82%B3%E3%83%BC%E3%83%89%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%84%E7%94%BB%E5%83%8F%E3%81%A8%E6%96%87%E7%AB%A0%E3%81%AE%E9%96%A2%E3%82%8F%E3%82%8A%E3%82%92%E7%A4%BA%E3%81%99)
- [Markdown](#markdown)
- [必ずプレビューして確認する](#%E5%BF%85%E3%81%9A%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B)
- [改行コードは LF に統一する](#%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF-lf-%E3%81%AB%E7%B5%B1%E4%B8%80%E3%81%99%E3%82%8B)
- [適切な空行を入れる](#%E9%81%A9%E5%88%87%E3%81%AA%E7%A9%BA%E8%A1%8C%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B)
- [適切な空白を入れる](#%E9%81%A9%E5%88%87%E3%81%AA%E7%A9%BA%E7%99%BD%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B)
- [コードスパンとコードブロックを使い分ける](#%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B9%E3%83%91%E3%83%B3%E3%81%A8%E3%82%B3%E3%83%BC%E3%83%89%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%8B)
- [明示的改行はバックスラッシュで行う](#%E6%98%8E%E7%A4%BA%E7%9A%84%E6%94%B9%E8%A1%8C%E3%81%AF%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%A7%E8%A1%8C%E3%81%86)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# 準備
依存ライブラリをインストールします。
```sh
$ npm install -g doctoc
$ pip3 install markdown
```
WikiをCloneします。
```sh
$ git clone https://github.com/brain-hackers/README.wiki.git
```
# 各種操作
注意: ページの編集後はサイドバーと各ページの目次の更新が必要です。ページの追加や編集をWebで行うことも可能プレビューもあって便利ですが、編集後は必ずWikiをCloneして `make finalize` してください。
## ページを追加・削除する
- [ファイル名とサイドバーの関係](#ファイル名とサイドバーの関係)のルールに従ったファイル名でmdファイルを追加
- 例: `大見出し 小見出し 項目.md`
- 記事内容を記述します
- ひととおり追加と削除が終わったら pull, `make finalize`, commit, push します
## ページを編集する
- 記事内容を記述します
- ひととおり編集が終わったら pull, `make finalize`, commit, push します
# 各文章内の目次生成
各文章内の目次は、[doctoc](https://github.com/thlorenz/doctoc)で生成しています。 `make finalize` もしくは `make doctoc` で呼ぶことができます。
`_Sidebar.md` はページではないため目次生成の対象外ですが、「指定されたファイル名にスペースが入ると正しくエスケープできない」という doctoc のバグにより、 `_Sidebar.md` 以外だけ指定するということができませんPRも出ているが、2020年10月現在Mergeされていない。よって、目次生成を走らせた後は `_Sidebar.md` をコミットしないよう注意する必要があります。
# ファイル名とサイドバーの関係
サイドバーの目次は、Wikiに含まれるMarkdown文書のファイル名から `gen.py` で自動生成しています。 `make finalize` もしくは `make generate` で呼ぶことができます。Wiki に文書を追加するか、ファイル名を変更するたびに実行する必要があります。
ファイル名に `` **(不等号は全角)** が含まれていると、その左側はセクション名と解釈されます。
例えば、ページ `あ>い.md` は大見出し `あ` の中の `い` というページとして認識されます。
`あ>い.md``あ>い>う.md` は同時に存在できません。 `い` が単一のページなのかセクション名なのか区別できないからです。
サイドバーの制約から、 `` はファイル名の中で2回まで使えます。 `あ.md``あ>い>う.md` は valid ですが、 `あ>い>う>え.md` は invalid です。
ページ名にハイフン `-` (Hyphen-Minus, U+002D) を使いたい場合、GitHub Wiki はハイフンを空白文字と同等に扱うため、そのままファイル名に入れると空白に置き換わって表示されてしまいます。これを回避するために、よく似た別なUnicode文字 `` (Hyphen, U+2010) を使ってください(左からコピペして使うと楽)。`UBoot` をタイトルに含む記事が実際の例です。
# 記述ルール
Wiki の体裁について以下にルールを列挙します。コミットの前にこれらに従っているかチェックしてください。Textlint はまだありません。
## 文体
基本的には、技術文書のルールと同一です。
### 「ですます」と「だ・である」は統一する
Wiki 全体で「ですます」の形で統一します。
### 依頼する時はできるだけ「します」で締める
「〇〇してください」は長いので、「します」で極力統一します。不自然に映る場合は「してください」や「しましょう」を使っても OK です。この文書でも実際にどちらも使用しています。
### 繰り返しや冗長な表現をなくす
冗長な表現を組み込んでしまうことは多いので、極限まで削ります。
「など」「いろいろ」「といった」「〇〇することができます」は使いがちですので特に気をつけましょう。
:x: 悪い例: このコマンドを使えば、Linux を起動することなどが可能です。
:o: 良い例: このコマンドで、Linux を起動できます。
### カッコは基本的に使わない
どうしても必要な場合は、名詞の別名や補足といった1〜2単語で済む体言を入れるだけにします。
:x: 悪い例: Linux マシンUbuntu か Debian が入っていることが望ましい)を用意します。
:o: 良い例: Ubuntu か Debian がインストールされた Linux マシンを用意します。
### 箇条書きには句読点を入れない
箇条書きは段落を表現する道具ではありません。よって、内容が極力短くなるようにしつつ、句読点を置かないようにします。
### 感情を排除する
極力スムーズに読める文章になるには、感情的表現を取り除く事が必須です。
文章は技術文書(レポート)のような無味乾燥なものにし、感情は Discord で共有しましょう。
### コードブロックや画像と文章の関わりを示す
「以下にコマンド例を示します」などのように、文章と以下に連なる要素を関連付けます。
## Markdown
Markdown はリッチなレンダリングがなくとも読めるシンタックスが特徴です。これを念頭に置いて、以下のルールに従ってください。
### 必ずプレビューして確認する
ブラウザで文書を編集すると、コミット前に文書を HTML にレンダーするプレビューが利用可能です。ミスがないか確認してからコミットしましょう。
ローカルのコンソールやエディタで書く場合も、Markdown をプレビューできる環境を用意して確認してからコミットしましょう。例えば [Grip](https://github.com/joeyespo/grip) が便利です。
### 改行コードは LF に統一する
Windows で特に気をつけましょう。Git は[コミット時に改行コードを LF のみに強制](https://qiita.com/uggds/items/00a1974ec4f115616580)できます。
`git config`
```
git config --global core.autocrlf input
```
と設定すると、コミット時に Unix style でコミットできます。
### 適切な空行を入れる
以下の箇所には1行空行を入れます。
- 段落と段落の間
- プレーンテキストとプレーンテキスト以外の要素の間
- 箇条書き
- テーブル
- 図
- コードブロック
- 引用
以下の箇所には2行空行を入れます。
- 節と節の間
### 適切な空白を入れる
プレーンテキスト以外の要素の前後に適切な空白がないと表示がおかしくなるケースがあります。この文書は GitHub での表示に限られるため空白がなくても大丈夫ですが、エディタでのシンタックスハイライトが上手くいかなくなることがありますので気をつけましょう。
:x: 悪い例1: `1.あいうえお`
:o: 良い例1: `1. あいうえお`
:x: 悪い例2: `` このコマンドには`-a`という引数を渡します。 ``
:o: 良い例2: `` このコマンドには `-a` という引数を渡します。 ``
### コードスパンとコードブロックを使い分ける
コードスパンとは、`` `ident` ``のように行の中に等幅で文字を入れるスパン要素を指します。
コードブロックとは
```
echo foo
```
のように新しい段落で等幅に文字を入れるブロック要素を指します。
コードスパンはコードの識別子や短いコマンドの例示に使い、コードブロックは複数行のプログラムや長いコマンドの例示に使用します。
例1: `ls` コマンドには `-l` というオプションがあります。
例2: `ls` コマンドでファイルの詳細情報を表示するには、以下のように実行します。
```sh
ls -l
```
### 明示的改行はバックスラッシュで行う
この節でいう明示的改行とは [Hard line breaks](https://github.github.com/gfm/#hard-line-breaks) のことで、空行による段落区切りや単一の LF による Soft line break ではなく確実に改行を入れることを指します。必要でない限りは使わないことが望ましいです。
明示的な改行の入れ方には行末にスペース2つを入れる方法とバックスラッシュを入れる方法がありまず。前者は通常不可視な上に意味合いがわかりづらいため、バックスラッシュを使用します。

@ -1,174 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [はじめに](#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
- [対応している機種](#%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E6%A9%9F%E7%A8%AE)
- [SD カードのイメージをダウンロードする](#sd-%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B)
- [SD カードに書き込む](#sd-%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80)
- [balenaEtcher を使う場合](#balenaetcher-%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88)
- [dd を使う場合](#dd-%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88)
- [macOS の場合](#macos-%E3%81%AE%E5%A0%B4%E5%90%88)
- [Linux の場合](#linux-%E3%81%AE%E5%A0%B4%E5%90%88)
- [実機で起動する](#%E5%AE%9F%E6%A9%9F%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B)
- [タッチパネル](#%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB)
- [キーボード (Sx1, Sx2)](#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-sx1-sx2)
- [日本語入力する](#%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%85%A5%E5%8A%9B%E3%81%99%E3%82%8B)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<img src="images/happy.png">
# はじめに
このページでは、SHARP Brain で Linux を動かす試みから生まれた Linux ディストリビューション **Brainux** を手軽に起動する方法をご紹介します。
Linux ディストリビューションは、2つの大きな要素としてカーネルとそれ以外のソフトウェアの組み合わせでできています。Brain の場合はカーネルを起動するブートローダーも SD カード上に必要なため、正確にはカーネル・ソフトウェア・ブートローダーのセットが必要になります。
リポジトリ [buildbrain](https://github.com/brain-hackers/buildbrain) では、Raspberry Pi と同様に SD カードに書き込むだけで起動可能にした SD イメージを公開しています。ちなみにカーネル・ソフトウェア・ブートローダーはどれも自力で準備することもできます。くわしくは本 Wiki の対応するページを参照してください。
質問がある場合や開発に参加したい場合は、まず [Brain Hackers の Discord](https://github.com/brain-hackers/README) に参加して頂き、「雑談」チャンネルでお気軽にご質問ください。
# 対応している機種
2021年3月23日現在、対応している機種とハードウェアは以下の通りです。省略のため、PW-SH1 や PW-SJ1 のような同世代の機種は特記すべき差がない限りは "Sx1" のように省略形で記載します。
内蔵ハードウェアの対応状況や使い方については[内蔵ハードウェア](#内蔵ハードウェア)をご覧ください。キーマップもそちらに掲載しています。
|機種 |Linux 起動 |キーボード |タッチパネル|注釈|
|:-----|:----------------:|:----------------:|:----------:|:---|
|PW-Sx1 より前||||PW-GC610, PW-G5300 のような数字が3桁もしくは4桁の機種|
|PW-Sx1|:white_check_mark:|:white_check_mark:|:white_check_mark:||
|PW-Sx2|:white_check_mark:|:white_check_mark:|:white_check_mark:||
|PW-Sx3|:white_check_mark:| |:white_check_mark:||
|PW-Sx4|:white_check_mark:| |:white_check_mark:||
|PW-Sx5|:white_check_mark:| |:white_check_mark:||
|PW-Sx6|:white_check_mark:| |:white_check_mark:||
|PW-Sx7|:white_check_mark:| |:white_check_mark:||
|PW-x1 以降||||
# SD カードのイメージをダウンロードする
[brain-hackers/buildbrain のリリースページ](https://github.com/brain-hackers/buildbrain/releases)にアクセスし、最新リリースの配布物の中から `sdimage-*.zip` と名のついた ZIP ファイルをダウンロードします。`*` には最新リリースのバージョン名が入ります。
# SD カードに書き込む
書き込むソフトは Windows / macOS / Linux のどれをお使いの場合でも利用可能な balenaEtcher がおすすめです。[公式サイト](https://www.balena.io/etcher/)にアクセスしてダウンロードしてください。
macOS もしくは Linux をお使いの場合は、ZIP を展開して取り出した .img ファイルを `dd` コマンドでそのまま書くことも可能です。
## balenaEtcher を使う場合
今回は macOS で balenaEtcher を使用した際の画像で説明します。どの OS でも同様にして書き込めます。
1. balenaEtcher を起動します
2. "Flash from file" をクリックし、ダウンロードした ZIP ファイルを選択します
- 展開する必要はありません
<img src="images/etcher1.png" width=500px>
<img src="images/etcher2.png" width=500px>
3. "Select target" をクリックして書き込み先を選択します
- 正しい SD カードを選択しているか慎重に確認してください
- 4GB 以上の SD カードであればなんでも使用可能です
- SD カードの性能がシステムの使用感に直結するため高速な SD カードを使用することをおすすめします
- 画像では 8GB の SD カードを選択しています
<img src="images/etcher3.png" width=500px>
<img src="images/etcher4.png" width=500px>
4. "Flash!" をクリックして書き込みます
- 改めて正しい SD カードが選択されているか確認した上で書き込んでください
- 書き込みには管理者権限が必要なため管理者パスワードを入力します
<img src="images/etcher5.png" width=500px>
<img src="images/etcher6.png" width=500px>
<img src="images/etcher7.png" width=500px>
5. 完成!
<img src="images/etcher8.png" width=500px>
## dd を使う場合
macOS もしくは Linux をお使いの場合は、`dd` コマンドでも書き込むことができます。以下にコマンド例を示します。
### macOS の場合
- macOS では `/dev/disk*` に書き込むと非常に遅いため `/dev/rdisk*` を使用します
- どのディスクが SD カードかはディスクユーティリティを使用して確認します
以下に実行例を示します。バージョン番号は適宜読み替えてください。
```sh
cd ~/Downloads
unzip sdimage-2021-02-21-162410.zip
sudo dd if=~/Downloads/sdimage-2021-02-21-162410.img of=/dev/rdisk4 bs=10M
```
### Linux の場合
以下に実行例を示します。バージョン番号は適宜読み替えてください。
```sh
cd ~/Downloads
unzip sdimage-2021-02-21-162410.zip
sudo dd if=~/Downloads/sdimage-2021-02-21-162410.img of=/dev/sdc bs=10M
```
# 実機で起動する
書き込み終わった SD カードを Brain に挿入し、リセットボタンを押します。Brain のロゴが表示されたあと U-Boot が起動し、すぐ後に Linux が起動します。
ログイン画面が表示されたらユーザー名 `user` パスワード `brain` でログインできます。内蔵キーボードに非対応の機種では、電源供給が可能なタイプの OTG ケーブルを使用してキーボードを繋ぐと操作できます。
標準では jwm がウィンドウマネージャーとして起動します。他に Openbox を選択したり、`shell` を選択して X なしでコンソールを操作することも可能です。
## タッチパネル
初回起動時にタッチパネルのキャリブレーションを求められます。赤く示された十字の中心を正確にゆっくりと押してください。
## キーボード (Sx1, Sx2)
キーが非常に少ない Brain のキーボードで必要な記号を打つため、キーボードの使用方法は特殊になっています。キートップに記載されたキー以外の文字は、すべて「記号」キーと「シフト」キーを組み合わせて入力します。
Shift キー・Ctrl キー・Alt キーは現実のキーボードに近い配置として以下のように対応させています。
- Shift → 「シフト」
- Ctrl → ページアップキー(《 を横に倒した記号のキー)
- Alt → 「文字切り替え」キー
キーと入力される文字のマップを以下に示します。
<img src="images/keymap.png" width=640px>
## 日本語入力する
バージョン 2021-04-19-195555 より Anthy が標準でインストールされています。`~/.xprofile` の該当行のコメントを外すことで自動で起動するようになります。
```diff
# Uncomment the following line to enable fcitx-mozc
- # fcitx-autostart &
+ fcitx-autostart &
```

@ -1,104 +0,0 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
### 目次
- [Linux のブート](#linux-%E3%81%AE%E3%83%96%E3%83%BC%E3%83%88)
- [キーボード](#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89)
- [画面開閉検知](#%E7%94%BB%E9%9D%A2%E9%96%8B%E9%96%89%E6%A4%9C%E7%9F%A5)
- [](#%E9%9F%B3)
- [タッチパネル](#%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB)
- [電源コントローラー](#%E9%9B%BB%E6%BA%90%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC)
- [cpufreq](#cpufreq)
- [eMMC への Linux インストール](#emmc-%E3%81%B8%E3%81%AE-linux-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Wi-Fi](#wi-fi)
- [LCD](#lcd)
- [Brainux のリリース](#brainux-%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
このページでは、Linux kernel の [Brain Hackers fork](https://github.com/brain-hackers/linux-brain) における Brain のハードウェアへの対応状況と、今後のロードマップを説明します。
# Linux のブート
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代, G4000, G5000, G5100, A7000, A9000||TOSHIBA TMPA910CRAXBG|
|4桁世代, Sx1 〜 Sx7|:white_check_mark:|NXP i.MX283|
|x1||NXP i.MX7|
# キーボード
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代||SoC が直接キーマトリクスを読む|
|4桁世代, Sx1 〜 Sx2|:white_check_mark:|MPU がキーマトリクスを読み SoC に I²C で送信|
|Sx3 〜 Sx7||SoC が直接キーマトリクスを読む|
|x1|詳細不明||
# 画面開閉検知
- 開閉イベントの伝達はキーイベントと同じ経路を辿る
- キーボードの実装に依存する
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代||SoC が直接キーマトリクスを読む|
|4桁世代, Sx1 〜 Sx2||MPU がキーマトリクスを読み SoC に I²C で送信|
|Sx3 〜 Sx7||SoC が直接キーマトリクスを読む|
|x1||詳細不明||
# 音
- Brain に内蔵されているスマートアンプには大きく分けて Yamaha 系と Rohm 系がある
- 録音も再生も2021年2月23日現在解析中で非対応
# タッチパネル
- バージョン 2021-03-22-233911 より PW-Sx1 〜 PW-Sx7 で対応
- 初回起動時にキャリブレーションを自動実行
# 電源コントローラー
- 2021年2月23日現在未対応のため充電状態の表示などは一切不可
# cpufreq
- CPU のクロック制御は2021年2月23日現在なし
# eMMC への Linux インストール
- 研究中
# Wi-Fi
Wi-Fi の接続は複数の手法が提案されていて、現在検証中。
- SDIO Wi-Fi チップ
- USB ドングル
# LCD
一部については実装が完了。ただし、DMA を使用しない非効率な実装になっているため、改善が必要。
|世代|対応済み|
|:--|:-:|
|3桁世代||
|4桁世代||
|Sx1 〜 Sx7|:white_check_mark:|
|x1||
# Brainux のリリース
当面は Development リリースや Stable リリースのような区分は設けず、[brain-hackers/buildbrain](https://github.com/brain-hackers/buildbrain) リポジトリのタグを直接バージョンとする。リリース間隔やスケジューリングも行わない。