Raspberry Pi向けArch Linux ARMインストールの自動化(一部)
はじめに
用途が少し特殊なため、役に立つ人はごく少数かもしれない。
完全に自分が楽するためだけに作ったものなので、有益な情報になるかどうかわからないけど、役に立ってくれる人がいたら、少し嬉しい。
Arch Linux ARM OSインストール用スクリプト
概要
- Raspberry Pi用のOS(Arch Linux ARM)をセットアップするスクリプト
- SDカードを挿す→スクリプト実行→SDカードをRaspberry Piに挿し変えるだけ
- OSイメージは、カレントディレクトリに無ければarchlinuxarm.orgから最新版をダウンロードしてくれる
- SDカード容量の内、100MBをbootパーティションに、残りの容量全てをrootパーティションに割当て
- rootパーティションフォーマットはF2FSを使用
- ネットワーク設定は、systemd-networkdを使用
事前に必要なもの(スクリプト実行環境がArch Linuxの場合)
- bsdtar
- dosfs-tools
- f2fs-tools
ソースコード
https://github.com/morinezumiiii/ArchLinuxARM-installer-for-raspberrypi
使い方
- SDカードをPCに挿す。
- 以下のようにスクリプトを実行
# cd ArchLinuxARM-installer-for-raspberrypi # ./install.sh [SDデバイスパス] [IPアドレス] [ゲートウェイ] [DNS]
例:
# ./install.sh /dev/sdX 192.168.0.100 192.168.0.1 192.168.0.1
- スクリプトが完了したら、SDカードを抜き、Raspberry Piに挿し、電源を投入。
これで、指定したIPアドレス上のRaspberry PiにSSHでログイン出来る。
経緯
Arch Linux(x86/x86_64)とArch Linux ARMのインストールの違い
両者は、動作するプラットフォームや、パッケージリポジトリの場所が異なったりするが、同じArch Linux。
ARM版はARM系プロセッサを積んだマイコンボード向けに、それぞれのARMアーキテクチャ毎にOSイメージの配布を行っている。
Raspberry Pi向けにおいては、ARMv6向け(Raspberry Pi Model A/B/A+/B+)と、ARMv7向け(Raspberry Pi 2 ModelB)に、配布を行っている。
x86版とRaspberry Pi向けARM版では、OSインストールの手順が異なり、ある程度の環境が作られた状態のものをインストールすることになる。
具体的には、archlinuxarm.orgからOSイメージをダウンロードし、bootパーティション/rootパーティションそれぞれをSDカードにコピーして手持ちのRaspberry Piに挿して電源を入れてあげるだけで、SSHで接続できる状態になる。
細かい設定等は、まずそのOSを立ち上げてからの作業となる。
Arch Linux ARMをRaspberry Piにインストール
ARM版公式サイトに、インストール手順がご親切に記載されている。
http://archlinuxarm.org/platforms/armv6/raspberry-pi
個人的な事情
私は、県内で日本Androidの会の茨城支部として、毎月勉強会を主催しています。
その際に、Raspberry Piを使ったワークショップ/ハンズオンを行う場合は、前日までに(現時点で)10台のRaspberry Piをセットアップしておく必要があります。
上記の公式インストール手順を、Raspberry Pi台数分を手作業で行っていると、かなりの時間がかかり、当日トラブルで再セットアップを行う必要があったりした場合も、大きな時間ロスとなり、参加者の方々に迷惑をかけてしまうので、今回自分用にスクリプト化しました。
その他設定
OSインストール後のセットアップ作業は、出来るだけ自動化させたいために、settings/setup.sh内に、スクリプトを用意し、それをRaspberry PiのSDカードのルートディレクトリ直下に配布し、SSHログイン後それを実行することでひと通りの必要なパッケージ類をインストールしたり、設定したりするようにしてあります。
Arch使いなら、arch-chrootとpacmanを使ってマウントデバイス上のArch Linuxにchrootした後、環境構築も出来るので、全部自動化させれるのだけど、その場合、ホスト側のArch LinuxもARMアーキテクチャのものを使って行う必要があるので、断念しました。
ここらへん、もっと改善できるといいのですが。
あと、複数台のSDカードリーダ/ライタを接続して、パラレルでSDカードを焼くというのも考えましたが、接続されたUSBデバイスがどのデバイスで、どのSDカードがどのIPアドレスなのかわからなくなりそうな恐れがあるので、こちらは敢えてやらないようにしました。
おわり
とりあえず、勉強会の準備が、少し、いや、かなり楽になりました。
Node.jsでconfigモジュールの設定ファイル読み込み先を変える
環境
- ラズパイ
- Arch Linux ARM
- Node.js v0.10.36
- config 1.11.0
環境変数 NODE_CONFIG_DIR を設定
-- 環境変数 NODE_CONFIG_DIR 設定前 $ echo $NODE_CONFIG_DIR $ node > var config = require('config'); WARNING: No configurations found in configuration directory: WARNING: /home/morinezumiiii/tmp/node-config-test/config WARNING: See https://www.npmjs.org/package/config for more information. > config {} > config.util.getEnv('NODE_CONFIG_DIR'); '/home/morinezumiiii/tmp/node-config-test/config' > (^C again to quit) > -- 環境変数 NODE_CONFIG_DIR 設定 $ export NODE_CONFIG_DIR=/opt/conf/node-config -- 環境変数 NODE_CONFIG_DIR 設定後 $ echo $NODE_CONFIG_DIR /opt/conf/node-config $ node > var config = require('config'); > config { hoge: 1, fuga: 2, foo: 'bar' } > config.util.getEnv('NODE_CONFIG_DIR'); '/opt/conf/node-config' >
ただのメモ
Arch Linux ARM(というかSystemd)のresolv.confについて
普段ラズパイでArch Linux ARMを使っていると、たまに(というかしょっちゅう)インターネットに繋がらなくなる。
IPアドレス直接指定では問題なく接続できるが、名前解決が出来ない。
環境
/etc/systemd/network/eth0.network
[Match] Name=eth0 Host=test.morinezumiiii.jp [Network] DHCP=none DNS=('192.168.0.1','8.8.8.8','8.8.4.4') [Address] Address=192.168.0.80/24 [Route] Gateway=192.168.0.1/24
原因
原因はなんとなく分かっている。
Archを再起動すると、resolv.confがどこからか勝手に書き換えられているから。
でもそれがどこから書き換えているのかわからないので、解決方法がわからない。
ググってみると、同様にFedoraでresolv.confが勝手に書き換えられてしまって困っている人たちはちらほら見かけたが、Archとはちょっと原因が異なりそう(同じ?)
resolv.conf(つながるとき)
# This file is managed by systemd-resolved(8). Do not edit. # # Third party programs must not access this file directly, but # only through the symlink at /etc/resolv.conf. To manage # resolv.conf(5) in a different way, replace the symlink by a # static file or a different symlink. nameserver 8.8.4.4 nameserver 8.8.8.8
resolv.conf(つながらないとき)
# This file is managed by systemd-resolved(8). Do not edit. # # Third party programs must not access this file directly, but # only through the symlink at /etc/resolv.conf. To manage # resolv.conf(5) in a different way, replace the symlink by a # static file or a different symlink. nameserver 8.8.4.4 nameserver 2001:4860:4860::8844 <-- なんかできた nameserver 8.8.8.8 # Too many DNS servers configured, the following entries may be ignored. <-- なんかできた nameserver 2001:4860:4860::8888 <-- なんかできた
/etc/resolv.conf(シンボリックリンク)
/etc/resolv.confって、シンボリックリンクだったんですね。知らなかったよ。(白目)
$ ls -la /etc/resolv.conf lrwxrwxrwx 1 root root 32 Feb 8 16:52 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
解決方法
まだわかってない。もっとsystemd-networkdを勉強してみる。
こふ
けんこふさんをダラダラ紹介するだけの記事
こふ語 Advent Calendar 2014 - Adventar
こふ語Advent Calendar 2014の9日目(ちょい遅くなったけど)です。 はてなブログにしてから技術系ガン無視な記事書くのこれが初めて。
けんこふとは
ちょっと真面目に紹介すると、Arch Linux使いな人。 最近日本国内でもArch Linux使いが多くなってきた気がするけど、 この人は結構長いイメージある。
不真面目に紹介すると、ド変態。ヤバイ。イッちゃってる。
多分、この人のせいで「Gentoo=こわい」みたいに、 「Arch=変態」というイメージが定着した。
もう一回真面目に書くと、初めてけんこふさんを見つけた時は、Arch関係で調べ物してた時だった。
ただその時は、たまたま記事が古かったので「yaourtか、packerで良いじゃん」「糞の役にも立たねぇな…」「何この六角大王で作ったみたいな自作萌えキャラ…」「キモッ」「キモッ」「きっしょ」と、冷ややかな目で見てた。
いつだったか自分のTLにRTされて流れてきた。
「やばい…kenkovだ…。」
そのけんこふさんがTL上で発する言葉の数々、完全に頭がイッちゃってるんじゃないかと思うほどで、キャラ作りでここまで絶対辿りつけない→かわいそうな人→これがけんこふそのものとして、次第に受け入れるようになってきた。
それがだんだん慣れてきて、ついには、けんこふさんの発言が面白い(ウケる)と思うようになってしまった。
あとアイコン可愛い。
こふ語
けんこふさんが発する言葉として、 「アンッ!アンッ!アンッ!アンッ!」 が、代表的かつ印象的。
そして突如現れた、けんこふさんと相乗効果を生み出す、もへ氏。
もへ氏、彼はすごい。すごいとしか言い様がない。
あのけんこふさんのド変態な発言をド変態な発言で返し会話するという、まさに目には目を。 と、思いきや突如サディストっぷりを発揮してけんこふさんに痛烈なツッコミやむちゃぶり。
このAdvent Calendarでも既に取り上げられているが、けんこふさん×もへ氏のやりとりから、けんこふさんの発言には、だいたいパターンがあることが浮き彫りとなった。
先述した「アンッ!アンッ!アンッ!アンッ!」に加え、「アッ…」、「ア^〜〜〜っ」や、 語尾に"っ"を付けるなど。
どんなバリエーションがあるかは、実際に自分の目でけんこふさんのツイートを見てみると良い。
パターンに慣れてくると、以下のように飲んでもらうことが出来るようになる。
※ただしこれは初歩中の初歩
けんこふさんをべた褒めする気はサラサラ無い。
ただ僕は、けんこふさんは技術力も自分なんかに比べて遥かに高く、尊敬しているし、絵も可愛いし、大好きですマル
おわりに
もうちょっとちゃんとネタ練って面白い記事書こうと思ったけど、皆さん高度で面白い記事書いてるので、めんどくさくてやめた。
We Love Kenkov.
Raspberry Pi Model B+(ArchLinux)でカメラモジュールが使えない件
追記(2018/5/23)
ラズパイ2や3では普通に使えて、I2Cも同時に使えています。
ひょっとしたら今のファームウェアならこの問題は解決してるかも?
モデルB+が悪いわけじゃなさそう
モデルB+を入手してからカメラモジュールを接続してraspstillとか使ってもエラーが出て使えなくて、(・3・)アルェーってなってたんだけど、モデルB+だけじゃなくモデルB、モデルAでもうまく行かなくなってた。
使えなくなってたのは、最近Arch Linuxをインストールしたヤツだけだった。
エラーメッセージは以下の通り。
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM) mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1) mmal: Failed to create camera component mmal: main: Failed to create camera component mmal: Camera is not detected. Please check carefully the camera module is installed correctly
このエラーが出る時って、本当にカメラモジュールが物理的につながってない(カメラモジュールのカメラ本体側の正方形のコネクタがしっかりささってない、FPCケーブルが断線してる)が大半なんだけど、今回問題になったのは、ラズパイ向けLinuxカーネル側の仕様かバグかってところっぽい。
ちなみにカーネルは3.12.26-1-ARCH。
以下の情報を探して右往左往してたところ、コレだっていうのが見つかったんだけど、結局のところよく理解してない。
B+ Camera is not detected (workaround available) - Raspberry Pi Forums
どうやら、spi-bcm2708とi2c-bcm2708モジュールがカーネルにロードされてると、カメラモジュールが競合してるのか、使えなくなってしまうっぽい。
Raspberry Pi + Arch Linuxでカメラモジュールを使う(暫定)
とりあえず、偉大なる先人達のお知恵をお借り(ググってただけ)しながら、使えるようにするまでを、まとめておこうかと思う。 (ただ、恐らくLinuxカーネル側の誤りで、後々修正されて必要なくなるのかもしれない…?)
最新ファームウェア/ツールを入れる
Tutorial for updating R-Pi firmware in ARCH LINUX [obsolete] - Raspberry Pi Forums
ここを頼りに、rpi-updateが使えるようにしておく。
# pacman -Syu # pacman -S git wget # wget http://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && chmod +x /usr/bin/rpi-update # pacman -S ca-certificates # pacman -S binutils # pacman -Sy raspberrypi-firmware-bootloader linux-raspberrypi # rpi-update # sync # reboot
vcgencmdが使えるようになり、ラズパイにカメラモジュールが接続されてるか確認出来るようになる。
$ vcgencmd get_camera supported=1 detected=0 $ vcgencmd get_mem arm arm=384M $ vcgencmd get_mem gpu gpu=128M
ラズパイのカメラモジュールを使う前提として、ArchARM公式Wikiにある通り、GPUへのメモリ割り当てに、最低でも128MBが必要というのと、おまじないがあるそうなので、それを/boot/config.txtに書き込む。
$ sudo vi /boot/config.txt --- 以下を追記 --- gpu_mem_512=128 gpu_mem_256=128 start_x=1 start_file=start_x.elf fixup_file=fixup_x.dat
modprobeのblacklistを作成し、ブート時にロードするモジュールを制御する。
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf --- ファイルを新規作成し、以下を追記 --- blacklist spi-bcm2708 blacklist i2c-bcm2708
$ sudo chmod 644 /etc/modprobe.d/raspi-blacklist.conf
再起動
$ sudo reboot
再度、vcgencmdで、カメラモジュールの接続状態を確認
$ vcgencmd get_camera supported=1 detected=1
認識するはず。これで認識しないとなると、spi-bcm2708、i2c-bcm2708モジュールがまだ読み込まれている状態か(lsmodで確認)、ケーブルが死んでるなどで、本当にカメラモジュールが接続されていないかのどちらか。
detectedが1になっていれば、カメラモジュールが使えるはずなので、
$ raspistill -d
や
$ raspivid -o -t 3000 hoge.h264
などで、確認してみるといい。
SPIやI2Cは使えなくなる
上記手順で、spi/i2c-bcm12708モジュールをロードしなくしているため、SPI接続やI2C接続の周辺機器等は使えなくなります。 SPI/I2Cといえば、今月の日経Linuxに載っていたような、AdafruitだったりSainSmartだったり、ST7735など液晶ディスプレイは使えなくなります。 この記事を書いている現時点では、両方使用することは出来ません。
(というかDSI接続のディスプレイはいつになったら…)
おわりに
ぶっちゃけ、今回の手順、僕自身まだちゃんと理解してません。なんとなくはわかるんだけど、ca-certificatesがなんなのかとか、その辺り後でちゃんと調べて覚えておく。とりあえず動かしたかったので。
あと、今回、何故ラズパイ向けのLinuxカーネルがこんな状態になってしまったのかが、よくわからない。凡ミスでした、バグでした、となれば、「なんだ、いつものことか。そして相変わらず修正早ぇwwwArch最高やwwww」ってなるんだけど、SPI/I2CとCSIコネクタのカメラモジュールが競合するというのが解せない。カメラモジュール自体がCSIコネクタのSPI接続ってこと?I2CではフルHDサイズで30fpsのデータを転送することは無理だよなぁ…。(この辺まだあまり詳しくないので、分かる方いたら教えて下さい…)
でも、よくよく考えてみると、ST7735をラズパイのディスプレイとして使うためにビルドしたカーネルって、確かカメラモジュール使えなかったような気がするけど、元々そういう仕様で、今回modprobeにblacklistとなるものが入ってなかったから、カメラモジュールが使えない(SPI/I2Cは使える)っていう 状態になったのかなぁ…?(うろ覚え)
まとまりの無い記事で申し訳ないです。
Raspberry Pi Model B+にArch Linux ARM(カーネル3.12.26-1-ARCH)をインストール
Raspberry Pi Type B+買いました
連休に入りました。
連休に入って、こっそりシコシコとアレをナニしてるわけなんですが、進捗ダメですと思われないために、ここらで進捗出しておこうかと…。
Raspberry Pi Type B+買いました。
旧TypeBとの違いは、そこら中で取り上げられているのですが、あまり知られていなく、ものすごく地味にムカつく違いだけ、ちょっと紹介しておきます。
穴
Type Bの場合、M3ネジが通るので、PC自作er御用達なマザボに使うネジ類が使えたわけで、Type B+の場合、何故かM3ネジが通らず、恐らく、M2.6になっている。なんでそんな微妙なサイズにしたのか…。
結局、穴をヤスリで広げてM3ネジ通すようにしたんだけど、M3ネジを止めてみると、microUSBコネクタと干渉したり、チップ抵抗に接触したりと、割と地味にファッキンな仕様になっていました。
まぁそれはさておき、、これを機に、Archをインストールすることになって、Arch ARMを覗くと、またセットアップ方法が変わってたので、自分の防備録として、残しておきたいと思った。
毎回恒例、公式リンク。一番確実なので、以下を参考に。(日本語ページは若干古いので注意)
http://archlinuxarm.org/platforms/armv6/raspberry-pi
https://wiki.archlinux.org/index.php/Raspberry_Pi
前提環境
マシン: Macbook Air 2011 Mid
OS: Arch Linux(3.15.7-1-ARCH)
SDカードの作成(PC側)
作業用ディレクトリ作成
$ mkdir raspberrypi $ cd raspberrypi $ mkdir boot $ mkdir root
最新のArchARMを取得
$ wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz
SDカードの場所を確認
$ lsblk
SDカードの準備(以降rootユーザ) bootパーティションは100MBのFAT32形式、rootパーティションは残り容量でLinux File System形式でパーティションを作成。
$ su # fdisk /dev/sdc Welcome to fdisk (util-linux 2.24.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 has been deleted. Command (m for help): p Disk /dev/sdc: 29.2 GiB, 31322013696 bytes, 61175808 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x9686be27 Command (m for help): o Created a new DOS disklabel with disk identifier 0x07befaf8. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-61175807, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-61175807, default 61175807): +100M Created a new partition 1 of type 'Linux' and of size 100 MiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): c If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information. Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'. Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): Using default response p. Partition number (2-4, default 2): First sector (206848-61175807, default 206848): Last sector, +sectors or +size{K,M,G,T,P} (206848-61175807, default 61175807): Created a new partition 2 of type 'Linux' and of size 29.1 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
SDカードのフォーマット bootパーティションは、FAT形式で、rootパーティションは、F2FSでフォーマットした。 ※ mkfs.f2fsは pacman -S f2fs-toolsでインストールすることで使えるようになる。
# mkfs.vfat /dev/sdc1 # mkfs.f2fs /dev/sdc2
SDカードをマウントし、ダウンロードしたArchARMをマウント先に展開
# mount /dev/sdc1 boot # mount /dev/sdc2 root # tar -xf ArchLinuxARM-rpi-latest.tar.gz -C root # sync # mv root/boot/* boot
rootfstypeをF2FSに変更し、Raspberry Piからrootパーティションを読み込めるようにする
# vi boot/cmdline.txt 変更前 elinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=noop rootwait 変更後 elinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=f2fs elevator=noop rootwait
SDカードをマウント解除
# umount boot root
作成したSDカードをRaspberry Piに挿し、電源を入れ、Raspberry PiにSSHでログイン
$ ssh root@192.168.0.6 password: root
rootパスワードを変更
# passwd
なぜか、デフォルトのGeo-IPのミラーが繋がらなかったので、USミラーを選択した
# vi /etc/pacman.d/mirrorlist
毎回恒例
# rm /etc/localtime # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # echo [hostname] > /etc/hostname # vi /etc/hosts
ネットワーク接続を、有線LANで、静的IPを設定
# cd /etc/netctl # cp examples/ethernet-static my_network
# vi my_network Description='A basic static ethernet connection' Interface=eth0 Connection=ethernet IP=static Address=('192.168.0.11/24'') #Routes=('192.168.0.0/24 via 192.168.1.2') Gateway='192.168.0.1' DNS=('192.168.0.1') ## For IPv6 autoconfiguration #IP6=stateless ## For IPv6 static address configuration #IP6=static #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96') #Routes6=('abcd::1234') #Gateway6='1234:0:123::abcd'
※後から分かったことで、本バージョンから、デフォルトのDHCP接続が、netctl-ifplud@eth0.serviceではなくなっている様子。どこで設定してあるか後で調べて切っておく。
# systemctl disable netctl-ifplugd@eth0.service # systemctl enable netctl-ifplugd@my_network.service # netctl enable my_network
設定ミスってて、後から繋がらないってなると泣きそうになるので、一旦ここで再起動
# reboot
設定したIPで、再度接続
$ ssh root@192.168.0.11
Raspberry Pi用に、パッケージを最新化し、必要なパッケージをインストール。
※ここは、任意。とりあえずデスクトップな環境であれば、以下の通り。
# pacman -Syu # pacman -S sudo alsa-utils alsa-firmware alsa-lib alsa-plugins xf86-video-fbdev xf86-input-synaptics raspberrypi-firmware raspberrypi-firmware-tools git
ユーザを作成
# useradd -m -g users -G wheel -s /bin/bash morinezumiiii # passwd morinezumiiii # gpasswd -a morinezumiiii audio # gpasswd -a morinezumiiii video # gpasswd -a morinezumiiii uucp # gpasswd -a morinezumiiii tty
sudoerファイルを編集
# visudo
以降、通常ユーザで。
# exit
$ ssh morinezumiiii@192.168.0.11
Raspberry Piなアプリケーション(raspividとか)のPATHを通す
$ vi ~/.bash_profile export PATH=$PATH:/opt/vc/bin $ source ~/.bash_profile $ vcgencmd version Jul 23 2014 21:12:29 Copyright (c) 2012 Broadcom version 174cdd77563b98023955a94cb8d072d9c7095d6f (clean) (release)
ちなみに、ここ2ヶ月くらいで、ラズパイに使ったSDカード3枚くらいぶっとびました。
そもそも書き込み回数1万回程度って書いてあるSDカードにOS入れて動かすって事自体が、「んー…」な感じなんだけど、とりあえず、ファイルシステムをExt4からF2FSに、スワップ領域を無くし、ログ書き込み先をtmpfsにすることで、ほんの少しでも、延命できるかなと、淡い期待を抱いてる。
ゆくゆくは、ちゃんとramfsにするなり、ストレージは別で用意するなりしたいなぁと思う。
以上、お疲れ様でした。
$ exit
Raspberry PiのSDカード死亡
京都出張
京野菜すげぇうまかった
FDDケーブルで簡易ブレイクアウトケーブル
ホテルに戻ってはんだ付け。
とりあえず、こないだ買った400円のFDDケーブルを切断してRaspberry PiのGPIOに挿せるようにしたい。どうせ400円だし、合うかどうかわからないけど、とりあえず買ってみたら上手く挿さった。
ただ、ラズパイのGPIOが28ピンに対して、FDD用のコネクタは36ピンあるので、8ピン余る。 でも挿せたから良いんだ。
よくよく調べてみると、ラズパイ用GPIOコネクタケーブル、300円くらいだった。 良いんだ良いんだ。
で、挿せるの分かったから適当に手元にあるジャンパケーブルをはんだづけした。
ST7735を接続
ラズパイのGPIOってArduinoと違ってオスなので、ブレイクアウトケーブル作ってブレットボードで簡単に繋げれるようにしたかったのでそうした。
とりあえず、ラズパイでST7735をLinuxで認識させるために、有志で何人かが作ったRaspberry Pi用Linuxカーネルを落としてきてカーネルリビルド。
ラズパイ上でやったら8時間以上かかった。 クロスコンパイルした方が絶対良いと後で後悔した。 ※この作業自体は先週くらいにやった
やり方はいくつかあるので、それを参考に
http://gerfficient.com/2014/02/12/connecting-1-8-tft-lcd-to-raspberry-pi/
カーネルリビルド後、再起動すると/dev/fb1が追加されてる。 で、画像とか動画を表示させるのに出力先を/dev/fb1と指定するとST7735に表示できる。
というかそろそろ本家のRaspberry Pi用Linuxカーネルにマージされて欲しい。
もしくはDSI接続のディスプレイはよ
SDカード死亡
で、何度か触ってたらなんかRaspbianが怪しいメッセージを出すようになってきた。
で、
こうなって、
こうなった。
SDカードが死んだ模様。
エラーメッセージ等をググってみると、割りとそれで苦しんでる人達がチラホラ。
でも、冷静に考えてみたら、SDカードにファイルシステム作ってそこでLinux動かすとか確かにそんなSDカードいじめしたら壊れて当然な気がした。
ましてやExt4とか。
壊してしまったものはしょうがないので、次からはExt4とかじゃなくJFFS2とかF2FSで組んでみたいと思う。
ついでに、ラズパイの扱い方にも慣れてきたので、慣れたArchARMで再度挑戦する。