VAIO S11をUbuntu 18.04とWin10のデュアルブートにした話

突如謎のモチベーションにより、VAIO S11にLinuxを入れることにした。
最近18.04リリースされたばっかだし、LTSだしUbuntuにしようそうしよう。

というわけで、以下の通りデュアルブートをやってみた記録。
本当に記録に残したいのはこのあとの話だから、デュアルブートの話は簡単にする。
(というか、デュアルブートなんてそこら中に記事あるから面白みもないよなぁ。)

■環境
HW:VAIO S11 (2017年モデル)  指紋認証LTE modem付き
#指紋認証に加え、SIM挿せばモバイル通信できるハイスペックモバイルPC。何気にすごいやつ。
OS1 : Windows 10
OS2:Ubuntu 18.04 LTS

 

やり方は大体ここ見ればいい。

hirune-ai.hatenablog.jp


 Win10での作業

3つ。

1. ubuntuパーティションの作成

コントロールパネル→システム→パーティションの管理→減らす領域を右クリック→縮小

 

2. ubuntuインストール用のUSBメディア作成

ここからUbuntu 18.04のisoイメージをDL。

www.ubuntu.com

UNetbootinをDL

USBからbootできるような形で、isoをUSBメモリに焼いてくれるやつ

ディスクイメージを選択し、DLしたUbuntuのisoファイルを指定。

事前に中身が消えていいUSBメモリを挿しておき、書き込み先に指定。

UNetbootin - Homepage and Downloads

 

3.(高速スタートアップモード OFF)

やりかた:

http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=018214

後ほどUbuntu側からCドライブをmountしたい人用。

これがONだとmountにfailするらしい。

ちなみに、デフォ値はONで、シャットダウン後の起動時間をOFF時に比べ1/3に縮める機能。

俺はいつもSleepにする人なのでいらない。Cドライブアクセスできるほうが遥かに便利。

BIOS設定

VAIOBIOS(ダジャレじゃないぞ)は「USBから起動」を選べるので特に設定変更の必要なかった。

BIOSによっては、起動時読み込みメディアのPriority変更してUSBメディアを最優先で読み込むようにする必要ありかと。

インストール

作成したBoot用USB挿して起動させる。

さっきとは違うBootloaderが立ち上がるので、ubuntuを選択。

お試し版のUbuntuデスクトップまでいったら、デスクトップ上のinstallアイコンを選んでインストーラーを起動。

お試し版でいじくってみて、微妙ならここでやめるのもあり。


インストーラーを後述の設定で進めていく。

「インストールの種類」では「それ以外」を選ぶこと!!!

インストーラー側も割と親切に注意書き書いてくれてあるけど、間違えてWin10を消さないように。

必ず「それ以外」を選ぶこと。

細々した項目は以下。(上述の参考ベージから引用)

------------------------------------------------------------------------------------------------------------

swap領域の設定

[空き領域]を選んで[+]をクリックします。

[サイズ]:4000
[新しいパーティションのタイプ]:論理パーティション 
[新しいパーティションの場所]:この領域の終点 
[利用方法]:スワップ領域

として[OK]を選択。

swap領域のサイズは諸説ありすぎて何が良いのかよく分かりません。

Ubuntuの領域の設定

[空き領域]を選んで[+]をクリックします。

[サイズ]:残り全て
[新しいパーティションのタイプ]:基本パーティション 
[新しいパーティションの場所]:この領域の始点 
[利用方法]:ex4ジャーナリングファイルシステム

[マウントポイント]:/

として[OK]を選択。

ブートローダをインストールするデバイス

/dev/sda を選んでおけば良いと思う。

 

------------------------------------------------------------------------------------------------------------ 

おしまい

 

が、指紋認証LTEモデムが動かない!!!

次回以降これの対策。むしろそっちを書きたい。

 

おまけ

ubuntuは初期設定だと電池持ち悪いので以下のコマンドで最適化してやったほうがいい。
二倍以上持つようになる。

$ sudo powertop --auto-tune

#起動度に必要なのでスタートアップscriptとかに仕込んだほうが良い

 

raspberrypiで学ぶ電子工作 第3~5章 

第1,2章は割愛。

第3章
ラズパイの3.3V pinとGNDつかってLED点けるだけ。
もはやラズパイ要らない。

LED点ける際の抵抗値の計算の説明部分でもやっとしたので調べた内容メモ。
・発光LEDは電流量で光る程度が決まる。(電流駆動型デバイス)
・LEDのV-I特性的には、ある程度の順電圧までI=0mA、ある電圧を超えると指数関数ぐらいの速さで電流量は増加する
・流したい電流量とV-I特性グラフから印加すべき電圧を出し、抵抗でLEDへの印加電圧を調整するのが基本の考え方。
・実際には電気特性情報なかったりするから、定格のVf値になるように電圧調整してとりあえず光らせてる。
・定格Vf値=部品の個体差を考慮したうえでの「ちょうどよい明るさで光る電圧」
 これより低電圧だと暗い or 光らない
 これより高電圧だと明るい or 電流流れすぎて電源 or LEDが死ぬ。
#今まで思考停止してVfから計算してたので面白し。
#このページがちゃんと書いてある。
https://tool-lab.com/make/raspberrypi-startup-20/

第4章
python使ってGPIOを出力として使ってLチカするだけ。
IDE前提の説明。

pythonのメモ。
python文法一回見た程度だからかなり怪しい。。。
■as
import A as B
AをBという名前で置き換えられる。
例えばAに属する関数呼ぶとき、B.xxxってできる。

■try:
エラー名に合わせた処理を別ブロックで作っておく。
そうすると、try内でエラー起きた際に、該当するエラーのブロックに処理が移る。
Javaのtry,catchみたいな感じ。

第5章
タクトスイッチをGPIOを入力として使う話。
主にPullup Pulldownの必要性について説明が主。
特筆すべき点は特になし。
お手軽にスイッチでカメラ撮影までできて感動。

GPIO設定するにあたってdevicetreeいじったりするのを期待してたけど、python上で初期化しただけだった。
どういう時Device Treeいじるんだろ

思った以上に簡単にできちゃうんだな。
こういうアプリケーションの作成と下回り勉強しつつ実装ってのは分けてやった方が良さそう。
下回りに時間かかってアプリに至る前に力尽きてしまう笑

「raspberrypiで学ぶ電子工作」読み始めてみる

割り込みベクタ、 アセンブラでのスタートアップ処理、 リンカスクリプトの記述、 elfファイルのデコード、 初期値あり変数の書き換えのためOSのコードをROMからRAMに転写、 等々起動からBootloaderの基本的な仕組みを知れて満足したので組み込みOSの本は一旦放置。 そっちのモチベ再熱したらまたやる。

今回はラズパイ使った電子工作の基礎勉強。 I2CとかSPI使って周辺機器を制御する経験したかったし、業務だと解析ばっかで実装経験あんまりできないし、アナログ回路の断片的な知識の整理、スマホとかの連携の仕方も含めて面白くやれそう。

この本。

秋月で必要な部品のセットも売ってておすすめ。 ラズパイ本体は別売りだから注意。

akizukidenshi.com

文字表示用のLCDとカメラは別売り

akizukidenshi.com

akizukidenshi.com

家以外でも遊べるように、有線でPCに直つなぎでsshするようにした。 気が向いたらそれについても書く。

gccで自作のライブラリ作る方法

自作のライブラリを作る方法
$ar -r

コンパイル時の指定の仕方 -lfile :リンクするファイルの指定 -Ldir :ライブラリを探すディレクトリの追加 -Idir : headerを探すディレクトリの追加

例:../../libhogehoge.aをリンクするとき $gcc main.c -Idir -L../../ -lhogehoge.a

12Stepで作る組み込みOS自作入門 5th Step

■「セクション」と「セグメント」 実行形式ファイルとは、コンパイルして作成した複数のオブジェクトファイルを結合することで生成される。←リンク リンクするためには、機械語コードは、機械語コード、変数などのデータはデータで同じ領域にまとめる必要がある。←セクション オブジェクトファイルもELF形式になっていて、セクションをもつ。 セグメントはもたない。←リンク後に生成されるものだから。 リンクはセクション単位で行われる。

セグメントはローダーが実行ファイルイメージをメモリに展開するときに使われる。 セグメント単位で展開される。 つまり、 セクション:リンカのため。リンクはセクション単位で行われる。 セグメント:ローダーのため。実メモリへの展開はセグメント単位で行われる。

■ELF形式の構造 先頭にELFヘッダがある。 セクション・ヘッダ:各セクションの情報。ファイルの終端にある。 プログラム・ヘッダ;各セグメントの情報。ELFヘッダの直後にある。 両方とも各セクション(セグメント)がどの位置からどの位置かまでの情報を持つ。 それぞれ、セクション(セグメント)の数だけ必要なので、配列上にあるので、 セクション・ヘッダ・テーブル、セグメント・ヘッダ・テーブルと呼ばれる。 セグメントの目的はローダにメモリへの展開の仕方を指示することなので、似た役割のセクションをまとめてセグメントとして、メモリ上に展開されていることが多い。

セクションはリンクのためなので、セクション・ヘッダ・テーブルを削っても実行に影響はない。 ただし、デバッガなどの利用に影響はでる。

■ELFヘッダ 先頭16バイトはマジックナンバー ELF形式であることや、OSの種別、ELFフォーマットのversionが示される。

■Section ヘッダ・テーブル セクション名は4バイトの数字。実際の名前は.shstrtabに文字列は保存されている。 ELFHeaderのSection header string table indexにセクション番号が入っている。 Flag:注釈の通り、セクションの属性を示す。ROMに割り当られるものはW(書き込み属性)ないし、 TextにのみX(実行可能属性)がついてる。とかとか Addr:そのセクションが配置されているアドレスを指す。VAのほう。つまり、このアドレスでそのセクションは動作する。 OFF:オフセット位置。このELFファイルからxxxバイト先からこのセクションはスタート。 Size:サイズ。OFFの位置から、このサイズバイトのセクションがELFファイルに入っている。

■プログラム・ヘッダ・テーブル FileSiz:ファイル中のサイズ MemSiz:メモリ上のサイズ .bssはファイル上ではサイズが0だが、メモリ上には展開される。 よって、FileSiz≠MemSizとなることがある。

■elfファイルの解析の実装 各Headerのデータの並び方にあった構造体を定義する。 引数でelfファイルの頭のaddressを構造体型にキャストして渡して、 構造体のポインタアクセス(”->”これ)使ってheader各情報にアクセスする。

まず、頭のマジックナンバーみて、これは本当にelfファイルなのか、今回対象としているアーキテクチャ向けか(H8なので、"46","47"以外だとNG)とかとか、チェックしてまずは適切なelfかチェック 次にload。(5章ではRAMへの展開はまだ未実装。解析のみ。) headerから、以下を取得。 ・プログラムヘッダーテーブルがelfファイルの頭から何byte目か ・プログラムヘッダー一つが何byteか取得。 ・プログラムヘッダーは全何個か。 以上を使って、プログラムヘッダーテーブルの頭から、プログラムヘッダーごとに解析してく。 一つ目終わったら、サイズ分頭ずらして次のプログラムヘッダいく。

5章はここまで。 論理回路の話もあるけど、若干話題が違うので割愛。

あれ、4th step・・・ 今更書くのめんどいからカット!

raspberry piにタッチパネルつけてみた

raspberry piにタッチパネルつけて自作携帯ゲーム機作れるんじゃね!?と思い立って秋葉で買ってきました。

とりあえず装着しただけだけど、こんな感じ。

裏面はこんな。
こういう基盤丸出し感、めっちゃ好き

本当はUnityでちょっとしたゲーム作ってみたかったけど、ARMアーキテクチャlinuxでの実行は対応してない模様。
(ちなみに、ARMかつLinuxだけどAndroid上での実行には対応してる。)
SDL2てのも使えるみたいだけど、結構敷居高そうな感じ。

Unity使うために、ラズパイにandroidandroid things焼くって方法もあるけど、スマホと一緒になっちゃうからな。
作るからにはオリジナリティあったほうがおもしろいよね。
それに、最終的には各種センサーも足してくつもりで、それを通してLinuxにおける周辺機器の取り扱いを学びたいっていうのもある。
ある程度モノができたら消費電力の最適化とかもやりたいな。

とりあえずはラズパイ+SDL2でやってみて、辛かったらAndroidに妥協する。

スマホのBootloader, OSはどこに保存されてる?

組み込み機器はROMにブートローダーをFlashしておき、OSのイメージをブートローダーが読み込んでRAM上に展開するのが基本だという。
組み込み機器の一つとして、スマホについて考えていた。
RAMはDDR。ROMに当たるのはなんだ?フラッシュメモリがROMの役割?でも普通に書き換えてるよな。。。

スマホの構造を丁寧に解説している本とかWebページ探すのは大変そうなので、
とりあえずはフラッシュメモリとは何なのかという観点から調べる。

ここがよさそう。

3.メモリの種類と特徴

http://www.cqpub.co.jp/interface/sample/200703/I0703042.pdf

Flash ROM | 東芝 半導体&ストレージ製品

正式名称はFlash Electrically Erasable Programmable Read Only Memoryだとさ。
EEPROMは書き換えのために高電圧が必要で専用のライターが必須だったのに対し、
フラッシュメモリはそういう特別な器具はいらない模様。
PCのBIOSの保存にも用いられるようになったみたい。

フラッシュメモリにBootloader、OS image等保存してるんだろうな。
まだ推測の域はでないけど、なんとなく検討ついたので一旦保留。
気が向いたらまた調べてよう。