simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

PINE64をベアメタルで遊んでみる。

随分前にPine64+ 2GBというボードを買っていたのですが積み基板になっていました。
ちょっとARMで遊びたくなったのでベアメタルからのLチカしてみました。

ソース

とりあえずGithubで管理することにします。
github.com

ツールチェインについて

ロスコンパイラとイメージ作成用のツールが必要になります。


sudo apt install gcc-arm-none-eabi u-boot-tools

調べたこと

Pine64のブートについて

パワーオンリセットにより、BROM 内のプログラムから動き始めます。
Pine64はいくつかのブート方法に対応しています。
SDカードからブートする場合はセクタ16(オフセット8KB)の位置から32KB分読み込み、実行します。
この時点ではARM32bit命令で動作するそうです。

※要するに、BROMがBIOSとして機能し、SDカードのセクタ16がブートセクタになります。
注意点として、BROMはブートセクタの内容が適切かどうか、マジックナンバーとかチェックサムによって識別しているようです。

なので単純にARMの機械語のイメージがブートセクタに配置されていても正常に起動しません。
このため、コンパイル後、バイナリファイルに対してmksunxiboot コマンドによりブートセクタ用の変換を書ける必要があります。

LEDについて

いろいろ探してみたのですが、PINE64+には、ユーザーが制御できるオンボードのLEDは実装されていないようです。
回路図やネットの情報を見ると、PL7がLEDに割り当てられているようですが、このPL7は基板上ではホールになっており、ユーザによるオプション用のようです。

Lチカを試すにあたって、最初PL7をトグルさせてLチカを試そうとしたのですが、どうもうまく動きませんでした。
単純にIOアドレスとON/OFFの書き込みが間違っている可能性がありますが、何回か試してみてうまくいかなかったので
出力ポートをPB2にしてみて、トグル出力で無事Lチカできることを確認しました。


続き

BROMのコードが気になったのでダンプして逆アセンブルしてみました。まぁ、ただそれだけですが。
mcommit.hatenadiary.com

小学1年生の娘にC言語を教えてみて気付いた、プログラミング教育を通して子供に伝えるべきたった1つの大切なこと

意識高そうなタイトルをつけてみましたが、単純に自分の子供にプログラミングを教えてみました。

実際に教えてみると、子供にプログラミングを教えるという体験を通して逆に教えられたことがあったので書いておきたいと思います。

目次

  • 目次
  • 動機
  • 教育方針
    • 具体的な方法
    • 工夫した点
    • 土台となるタイピング・パソコンスキルについて
  • 結果
  • 良かったこと
  • 補足・ポエム
    • 反省
    • 報酬(お金)と教育
    • 子供に伝えたいこと

動機

昨年の年末(12/24頃)に誰かが我が家に任天堂Switchを置いて行ったのですが、それ以来うちの娘はSwitchにはまってしまい次から次へゲームソフトをねだってくるようになりました。

かわいい娘に頼まれると断りきれず、

を立て続けに購入し気がつくと家計はパンクしかかっておりました。

しかもどういうわけか、クレジットカード会社から

¥39,390 Nintendo Switch

という請求がきているのです。

おかしい。いやおかしくはない・・・


いや、そんなことよりもこのままでは家計がやばい・・・


そんな私の混乱をよそに娘は、

「ねぇパパァ、友達がね、みんなマリオカート8デラックス持ってるの。あたしも欲しい!」

マリオカート8 デラックス - Switch

マリオカート8 デラックス - Switch

とまた新しいゲームソフトをねだってきました。

続きを読む

gdbを使って386アセンブラの復習をする

結構前に買っていたセキュリティコンテストチャレンジブックという本を最近になって読んで、脆弱性のあるコードを動かしたりして遊んでいました。

スタックオーバーフローとかSEGVの結果が本で書いていた通りにはならなかったのでとりあえずgdbを使ってアセンブラとかスタックの状態を見て386の動作を思い出すための復習をしてみました。

復習がてらメモを取りたかったので、どうせならと思いブログに書いておきたいと思います。

だらだらとながくなりそうですので TL;DR;
※ちゃんとまとめれていないと思うので後から整理したいと思います。

続きを読む

TranscendのJDM820を買ってMacBookProのSSDを交換した

普段使っているMacBookPro(Late 2013)でS.M.A.R.Tエラーが出ていたため、タイトルの通り
MacBookProで使えるSSDであるJDM820を買ってSSDを交換してみました。

SSDの交換から復旧して使えるようになるまで比較的簡単でしたのでまとめておきたいと思います。

購入のきっかけ・S.M.A.R.Tエラーについて

ここ数か月前からSSDがS.M.A.R.Tエラーが発生する状態になっておりました。

Mac OS で S.M.A.R.Tエラーが発生するとOSの更新ができなくなります。
実はこのJDM820を購入する前にVMWare Fusionを購入していたのですが、OSのバージョンが古いためインストールができませんでした。しかもOSを更新しようとするとS.M.A.R.Tエラーで更新を拒絶されるというどつもにはまった状態でした。

抜け出すには、SSDを更新するしか手はありません。
ということで、この商品を購入することにしました。

商品内容

SSD本体。高いですが240GBでは少し心もとないのと、長く使うものだからということで思い切って480GBの商品を買いました。痛い出費ですがまぁ必要なものだし元は取れるはず・・・
※私が使っているのはMacBookPro late2013(latina)です。SSDは使っているMacBookによって異なるのでご注意を。

f:id:simotin13:20180113134949j:plain



交換するときに必要なドライバーも付属しています。
f:id:simotin13:20180114135812j:plain

SSDの交換の際には、

  1. TimeMachineによるバックアップ作業
  2. SSDの交換作業
  3. OS再インストール・データ復旧

TimeMachineによるバックアップ作業

交換前にデータのバックアップを取っておきます。
TimeMachineでのバックアップはデータ容量によると思いますが、私の場合5分程度で完了しました。

SSDの交換作業

交換作業にあたって、こちらの記事を参考にさせて頂きました。

www.machinist.work
参考にさせて頂き、ありがとうございます。

交換の作業自体はそれほど難しいものではありません。
ネジを外して、元々ついているSSDを外し、購入した新しいSSDに差し替えるだけです。

まずは商品に付属のドライバを使ってMacBookProの裏面にあるネジを外して、SSDを交換します。

カバーを外してみると・・・

なんということでしょう。

f:id:simotin13:20180113135747j:plain

埃まみれになって 時間(とき)の経つのも忘れた

4年程使ってますが、中はこんなに汚くなっているんですね・・・

一歩間違うと閲覧注意のグロ画像になるところでした。ホコリじゃなくてゴキブリの卵とか死体とかが入っていなかったのでよしとしましょう。

ということで交換の前に綺麗に掃除しました。

基板だけでなくカバーの方もかなり汚れていました。交換に関わらず掃除は定期的にした方がよいかもしれません。
f:id:simotin13:20180113140658j:plain

さて、交換作業ですが、この部分がSSDになります。
f:id:simotin13:20180113140445j:plain

左側にネジがついていて、写真はネジを外した状態です。
右側がコネクタになっているので優しく引き抜いて、新しいSSDを差し込み、再びネジを締めます。

後はカバーをもと通りに付け直して交換作業は完了です。時間にして5分程でしょうか。

OS再インストール

交換したSSDはまっさらな状態ですので、当然いままで使っていたMacOSは起動しません。
復旧するには、

  1. インストールDVDから復旧
  2. TimeMachineから復旧
  3. ネットワークリカバリから復旧

という選択肢があるそうですが、ネットワークリカバリからの復旧が簡単そうでしたので試してみました。

手順

ネットワークリカバリのためにはインターネットに接続している必要があります。

まずは、Option+ Command + R キーを押しながらMacBook Proを起動します。
交換前に使用していたWiFiの設定が残っているためか、勝手にネットに接続してくれたようでした。

起動すると、しばらく何かのダウンロードに時間がかかりますが、ダウンロード後はOS Xのユーティリティの画面が表示されます。

ディスクユーティリティで交換したSSDをフォーマットした後、OS Xのインストールを選択すると、OSのインストールが可能です。※OSのイメージはネットから取得しているようです。(私が試した時はOS X MAVERICKSがインストールされました)

無事インストールができればOSのアップデートやデータの復旧などをすればSSDの交換前と同じように使えます。
この間、Option+ Command + R キーを押して起動したから、40分~50分程度でしょうか。

感想

復旧作業は思っていたより簡単だったので大満足です。

SSDフラッシュメモリを長く使うためには

フラッシュメモリはコントローラがウェアラベリングを担当してくれるそうです。
ウェアラベリングは特定のブロックへの書き込みを集中させないように書き込み先を分散する技術になりますが、使用済みの領域が多いとそもそも分散させる先がなくなってしまいます。
このため、一般にSSD等のフラッシュメモリは容量をある程度余裕がある状態で使うと長く使えると言われています。※同じ人に仕事を割り当て続けると疲弊して最後は仕事ができなくなりますがそんなイメージでしょうか・・・負荷を分散できるような余裕があるっていうのは大事なことですね。

私の場合はVMWareをよく使っていたので常に容量は不足がちでした。(あとDropboxで大容量をローカルに同期したりとか・・・)

恐らくこの状態が長く続いた為に、S.M.A.R.Tエラーに陥ったのではないかと思います。

今回買ったJDM820は高かったので、できるだけ長く使えるよう容量は常に意識しながら使いたいと思います。

LLVMのビルドについてまとめてみる

f:id:simotin13:20180105144554p:plain

2018年早々、LLVMのビルドで消耗しておりました。
なんとなくlibToolingを使ってみようとしたらソースのビルドが必要そうな感じだったので始めたのですが、LLVMには複数のプロジェクトがあり、各プロジェクトの役割とかいまいちピンと来ておらず、ビルドにあたっていろいろドキュメント読んだりする必要がありました。

ドキュメントを熟読せずに始めるといろいろと躓くようなので、LLVMのビルドに関する情報をまとめておきたいと思います。

といってもまだまとめ切れていない点が多いので恐らく後から次々と追記・訂正することになりそうな気がします。

目次

  • 目次
  • 必読ページ達
  • LLVM System GettingStarted
    • 読めよ、絶対読めよ。
    • 開発環境のC++のツールチェインについて
  • ツール・プロジェクトについて
    • compiler-rt
    • lld
    • LLDB
  • 結論
    • 注意事項
      • LLVMのビルドは結構ディスク容量食います。
      • LLVMのビルドはすごく時間かかります。
      • LLVMのビルドではすごくメモリ使います。
      • リンクがかえってこない!?
    • やること
      • clangをインストール
      • LLVMのソースの取得と展開
      • コマンド実行例
    • cmakeコマンドのオプションについて
      • オプションの解説
  • 参考書籍
  • 感想
    • libLTO.so というお化けライブラリ
    • C++の現在と未来
  • まとめ
続きを読む