/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

gnu-efiを使ってAARCH64/ARM64のUEFIサンプルアプリを動かしてみる

UEFIアプリを作るためのツールキットとしてはEDK2とgnu-efiの2つが有名ですが、後者のgnu-efiについて書いているところが少なかった気がしたので、サンプルビルドの方法とQEMU上で実行する手順について書いておくことにしました。 対象はx86_64ではなく、AAR…

先日U-Bootに投稿したARMv7MのLinux起動時にデータキャッシュを無効にするパッチについての備忘録

先日、以下のパッチをU-Bootに投稿し、マージされました。 [U-Boot] [PATCH] armv7m: Disable D-cache when booting nommu(ARMv7M) Linux kernel 忘れないように、なぜこのパッチを投稿したかを残しておこうと思います。 前回のあらすじ ARM Cortex-M7マイコ…

ARM命令はなぜ先頭に0xEが並ぶのかについて調べてみた

目grep入門 +解説 from murachue www.slideshare.net こちらのスライドでご存知の方も多いと思いますが、ARMの実行バイナリをバイナリエディタのビットマップビューで見るとゴマ粒のようなものが縦に並んでいるのが見えます。 これはほとんどの命令の先頭4bi…

Arch LinuxのAndroid StudioでAndroidエミュレータが立ち上がらなかった件

数年ぶりに簡単なAndroidアプリを作ってみたくなったので、AndroidStudioをインストールしてとりあえずHelloWorldアプリを動かそうとしたのですが、AVDマネージャーからAndroidエミュレータの起動ボタンを押しても一向に端末の画面が出てきてくれる気配があ…

QEMUでARM64(AARCH644)のUEFIコンソールを実行する

UEFIといえばパソコンのBIOSに変わるファームウェアが真っ先に思い浮かびますが、最近ではHiKey boardなどARM64(AARCH64)の乗ったボードのファームウェアにもUEFIが使われ始めています。 UEFIを採用したボード上で動作するUEFIアプリケーションや、UEFIから…

2017年版おすすめ本のご紹介

蔵書の写真をTwitterにあげたところ思いの他反響があったので,おすすめの書籍を紹介したいと思います. これから紹介する本は,私が今まで一部でも良いので読んだ本の内,所有しているもの,または記憶に残っているものになります. UNIX, Linux系学習用 は…

QEMUでCortex-M3/M4マイコンボードをエミュレーションしてLチカする話

GNU ARM Eclipse QEMUを用いるとCortex-Mマイコンのプログラムをエミュレータを使ってパソコンの上で行うことができました。

proc-v7m.Sに定義されているnop_cache_fnsはどこにあるのか

ARM Cortex-M7マイコンでキャッシュを使えるようにするためにいろいろ頑張っています。 現在のLinux Kernelでは、アーキテクチャとしてARMv7Mが選択されると同時にCPU_CACHE_NOPが選択*1され、キャッシュを制御するコードとしてarch/arm/mm/cache-nop.S内の…

of_property_match_stringを使ってみたメモ

あらすじ Google Summer of Code(GSoC)でやることの一つとして、STM32F7マイコンでUART(シリアル)を使うためのLinuxドライバを書いています。 STM32F7とSTM32F4のシリアルペリフェラルはほとんど同じ*1なので、STM32F4のものをベースにSTM32F7向けのコード…

Raspberry Pi 3を64-bitモードで扱うための現状について調べてみた

これまでのあらすじ 2016年の2月の終わり頃,Raspberry Pi 3(以下,RasPi3)が発売されました. 日本では技適のいろいろがありまして,その1ヶ月後の3月終わり頃から秋月やマルツなどで購入できるようになりました. RasPi3の特徴は,Raspberry Pi 2まで採…

Linux Kernelコードを.configの内容に応じてコードを切り替える方法メモ

一連のツイート @tnishinaga そのデバイスのことは分からないのですが、アップストリームに投げる前提ですか?手元で切り替えるだけだったたらconfigシンボルでifdefiしてしまえばいいと思います。https://t.co/FCpxTh1M9y— nekomatu@名古屋 (@nekomatu) Mar…

Failed to find path for dmidecode binaryと言ってlibvirtが起動しなくなった件

問題 いつの間にかlibvirtを使っていた仮想マシンが起動も設定もできなくなっていた. 以下のコマンドでlibvirtを再起動しても,長時間待たされた後にタイムアウトする. $ sudo systemctl restart libvirtd.service journalctlでログを見てみると,dmidecod…

ArchLinuxのアップデートで署名エラーが出た場合についてメモ

本日1週間ぶりくらいに pacman -Syu したところ,以下のエラーが出ました. error: confuse: signature from "Thorsten Töpper <atsutane@freethoughts.de>" is unknown trust 調べてみると以下の記事がヒット. [Solved] confuse 2.7-3 install error: mainatainer gpg key is unknown</atsutane@freethoughts.de>…

黒柴(KURO-SHEEVA)にdebian jessieを入れる

tnishinaga.hatenablog.com この記事の続きです. 前回はLinuxカーネルをビルドして動かしてみるところまでやりました. 今回はdebianのイメージを作って動かしてみたいと思います. debootstrapでdebian環境を作る debootstrapはdebianの基本システムを簡単…

黒柴(KURO-SHEEVA)用にLinux Kernel 4.3をビルドする

先日,セキュリティミニキャンプ沖縄2015にチューターとして参加させていただきました. そこでお手伝いしながら木藤さんの講義「組込みシステム解体新書(入門編)」を聞いていたところ,組み込み機器をいじりたい欲がむくむくと湧き出してきたので,以前とあ…

PyOCDを使ってmbedをデバッグする(2015年末ver)

この記事はmbed Advent Calendar 2015の9日目の記事です. お久しぶりです. 今回の紹介するPyOCDは,mbedのプログラミングやデバッグに使えるPythonのライブラリです. 昨年のmbedアドベントカレンダーではmbedをデバッグするために使用していました. tnis…

UEFIアプリでファイルを任意のメモリアドレスにロードする方法メモ

UEFIアプリケーションでファイルを任意のメモリアドレスにロードする方法についてのメモです. ブートローダーを作ったりするのに役立つと思います. 開発環境はEDK2(28f27af6f007c3794fcc9d098ef91713160f4e5b),OSはArch Linuxを使いました. これを行う…

emacs使い始めましたメモ1

リモート接続してCUI環境で作業することが多くなってきたので,CUIなテキストエディタも使えるように環境を整備し始めました. 基本的に政治と宗教の話はしないのですが,私はemacsを使うことにしました. emacsベテランの方はいろいろ教えていただけると嬉…

VyOSのISOイメージをビルドする

VyOSのISOイメージをビルドする方法のメモです. 最新バージョンのVyOSを用いる場合等は,自分でISOビルドしないと使えないはずです. 基本的な手順は以下のサイトを参照. Howto build an ISO image - VyOS vyos/build-isogithub.com ISOの作り方 1. ビルド…

EdgeRouterLiteでPPPoE IPv6接続ができない件(未解決)

以下の様な設定をEdgeRouterに行ったが,DHCPv6-pdが失敗してIPが降ってこない. set interfaces ethernet eth0 pppoe 1 user-id imhXXXXXXX@bnf6.iij.ad.jp set interfaces ethernet eth0 pppoe 1 password mypass set interfaces ethernet eth0 pppoe 1 mt…

EdgeRouterLiteを使ってiijmioひかりでインターネット接続する方法メモ

家のネット回線が光になりました. プロパイダは iijmioひかり です. キャッシュバック価格などを含めたひと月あたりの回線価格は他のプロパイダのほうが安いのですが,評判を見ると耐えられないほど速度が出ないとあったので,国内老舗ISPであるIIJなら信…

ARM_VMM: KernelVMキャンプの成果報告

3月27-29日にKernelVMキャンプに参加してきました. その成果報告をここに書きます. 知らない方のために説明すると,KernelVMキャンプは東京の山奥に籠もり昼夜問わず黙々とハックし続ける非常に厳しいキャンプで……えっ? 温泉? あいまいみー? 女装ヒルク…

Raspberry Pi2をJTAGデバッグできました

タイトルのとおりです. BareMetalなRaspberry Pi2にJTAGデバッガをつなげて,gdbでレジスタ読んだり実行止めたり出来ました. とりあえず,メモだけ残します. 参考にしたサイト http://www.raspberrypi.org/forums/viewtopic.php?f=72&t=100268 用意するも…

ARMアセンブラの16bit即値代入でコンパイルエラーが出た件

ARM

以下の様な16bit即値をレジスタr0に代入するコードをコンパイルしたところ,エラーとなったので,解決策をメモする. ターゲットはRaspberry Pi 2.コンパイラはgcc 4.7.2 mov r0, #0xffff ARMの公式ドキュメントを読んでみると ARMv6T2 以上のアーキテクチ…

ARM_VMM: Cortex-A7でMMUを有効化する方法メモ

ARMの仮想化支援機能を使ってみたかったので, 現在しゅううさん(@syuu1228)と一緒に教育用自作VMMを作成中です. もちろん,BareMetalで. 対象ボードは,とりあえずCortex-A7を積んだRaspberry Pi 2を予定中. (ARM64なボードが届いたらそちらに移るかも…

go言語コンパイラをソースからビルドする

go言語コンパイラのビルド方法が,半年前に触ったときと違ったので,現在の方法をメモっておく. 環境 Fedora 21 x86_64 Golang 1.4.2 ( c62b003eba484d54c2707b379d29240e5367e98f ) インストール方法 ソースのクローン 半年前はmercurialで管理していた気…

Raspberry Pi 2さわってみた

Raspberry Pi 2が届いたので、とりあえず使用感・性能・消費電流について簡単にチェックしてみました。 使用感 かなり快適です。感動しました。 Raspberry Pi 1はCUIですら反応が遅く、デスクトップを起動すると遅すぎてとても使えないレベルでした。 しかし…

WindowsでARMCCを用いてmbedライブラリをビルドする

LPC812をmbedライブラリを用いて開発したかったので、mbedライブラリのビルド方法を調べました。 事前準備 Python2.xのインストールとパスの設定 Keil MDK-ARM v5のインストール インストール方法 基本は高橋さんの記事のとおりですが、少々変更点があります…

mbed LPC1768でWatchDogTimerを扱う

mbed LPC1768でWDTを使う方法を調べたので、備忘録として記す。 リファレンス LPC176x/5x User manual WDTとは Watch Dog Timer、直訳で番犬タイマー。 マイコンの暴走や無限ループに陥った際、強制的にリセットをかける機構。 WDTはカウントダウンタイマー…

Macでmbedをデバッグする方法についてのまとめ

mbed Advent Calendar 2014の11日目です。 まえおき mbedとの関わり 現在私はmbedのプログラムを アセンブリ言語でコードをゴリゴリ実装して、バグを作っては治すを繰り返す日々をおくっています。 デバッガは必須 アセンブリ言語はCに比べて低級な言語なの…

MacにPyOCDをインストールする方法について

先日mbed用のコンパイル環境を作る方法を解説した際、PyOCDのインストール方法については省略した。 mbedのオフラインコンパイル環境を作った - Toshifumi Nishinagaの技術めも その理由はPyOCDがLinuxとWindowsにしか対応しておらず、Linux上でのインストー…

mbedのC++コードからCやアセンブラの関数を呼び出す

GCCを用いてC++のファイルからCやアセンブラで定義した関数が呼び出せない問題に引っかかったので、解決方法を記す。 解決方法 ヘッダなどでの関数定義に、以下のように "C" を入れるだけ。 extern "C" void hoge(void); これだけでCやアセンブラの関数を呼…

Mac上にAVRマイコンの開発&書き込み環境を作った

AVR

AVRマイコンとはお手軽マイコン開発ツール群Arduinoに使われているマイコンである。 今回はATMEGA2560を用いる必要があったので、マイコン基板にはArduino MEGA2560を用いた。 書き込み器はAVRISP mk2を購入した。 開発環境の構築 基本的には、橋本商会さん…

mbedのオフラインコンパイル環境を作った

mbedとは、お手軽マイコン開発ツール群であるArduinoのARM版のようなものである。 オンラインのIDEを用い、mbedライブラリとユーザーの公開しているライブラリを用いてお手軽に開発を行うことができる。 しかし、デバッグはオンラインでは行えない。 デバッ…

Macでcrosstool-ng使ってARMの開発環境をつくろうと奮闘したが力尽きた話

背景 タイトルそのままなので省略。 なお、crosstool-ngのインストールにはhomebrewを用いた。 $ brew install crosstool-ng crosstoo-ng version $ brew info crosstool-ng crosstool-ng: stable 1.19.0 http://crosstool-ng.org /usr/local/Cellar/crossto…

MacBookPro(early2011)のHDDをSSDにした

自宅でメインに使っているMBPの動作が遅すぎて遅すぎて仕事にならないのでこれを機に買い換えたかったのですが、 まるまる買い換えるほどお金の余裕がないので、HDDをSSDに換えることで高速化を図ることにしました。 今回購入したSSDは以下。 SanDisk SSD Ul…

TFTPサーバーから相対パスでファイル取得できない問題について

著書「BareMetalで遊ぶ Raspberry Pi」追記のため、U-Bootを使ってプログラムをネットワークブートさせながら開発しようとしたのですが、RasPiがプログラムを拾ってこれずにこけてしまいました。 試しにログを吐かせてみると、こんなエラーが出ていました。 …

Linuxでcoredumpを吐く

C言語でメモリ関連のバグを作ったときは普通coredumpを読んで調べて行くみたいだけれど、私の環境ではなぜかcoredumpが出ませんでした。 調べて見ると、最近のLinuxではulimitで設定しないとcoredumpを吐いてくれないらしい。 デバッグ/コアダンプ - S.T.K W…

Elecrowの基板発注サービスが安くなってた

以前記事を書いた時は、10cm x 10cmで23ドルしていたはずですが、いつの間にか11.90ドルのプランができていました。 Special Offer For 2 Layer 10*10cm max green PCB - 5/10pcs [SPF11010S] - $11.90 : Elecrow bazaar, Make your making more easy 10枚で…

Raspberry Pi Type B,B+どちらでも使える拡張ボードを製作中

現在、達人出版会で絶賛発売中の著書「BareMetalで遊ぶ Raspberry Pi」の開発に便利な治具を作ってます。 機能はJTAG、SPI、I2C、UARTを引っ張りだして、ついでに使用しているキャラクタ液晶とか温度センサーが載せられるようなかんじで。 モデルはType BとT…

ThinkPad X201のキーボードをUSキーボードに交換した

開発用兼だめげー用に、約2万円とちょっとで購入した中古のThinkPad X201のキーボードがJISで使いづらかったので、ebayで1700円で売ってたUSキーボードを購入して、交換してみました。 交換は公式でドキュメントが出ているので、これを見れば超簡単に交換可…

NOOBS用のイメージを作って、Raspberry Piに自動インストールする

同じ設定のRasPiを作るのに便利そうなので、NOOBSのイメージの作成と、自動インストールの設定方法を調べてみました。 NOOBSイメージの作り方 あっきぃさんの資料がわかりやすいので、こちらを参照。 Raspberry Piの便利なインストーラーNOOBSを活用してみよ…

vyOSでDHCPの静的IPマッピングを設定する方法について

ルーターが立てたかったので、vyOS(旧Vyatta?)を使って立ててみました。 基本はこちらのユーザーガイドを参考にすれば設定は完了です。 後は何だかんだで増え続けるRaspberry Pi(現在5台所持)のIPをいちいち探すのが面倒なので、DHCP鯖を設定して、固定…

CUDA6で実行時間を取得する

最近CUDAを触り始め、現在はプログラミングガイドや、理研の入門テキストを読みながら学習中です。 その中でプログラムの実行時間が知りたくなったので、以下のサイトを参考に実装したのですが……コンパイルエラーが出て動きませんでした。 http://www.gdep.j…

Windows Azureの通知ハブ(notification hub)を使ってAndroid端末から通知を送る

あらすじ 先日、Sony Wearable Hackason 金沢というハッカソンに参加し、土日の2日間Smart WatchとSmartBand を用いたAndroidアプリを作っていました。 ハッカソン中、アプリに他の端末と通信する機能をつけるために何を使えばいいか悩んでいたところ、講師…

MBAのArch Linuxにデスクトップと日本語入力環境を整備する

前回 はCUIな環境しかいれなかったので、次はデスクトップと日本語入力環境を用意して普通に使えるようにしたいと思います。 X関連のインストール なによりもまず、パッケージのアップデートをしましょう。 % sudo pacman -Syu X環境のインストール 次にX関…

rEFIndでおかしくなったMacの電源管理設定を治す

前回のラブハック! KernelVMハッカソンに参加した私はoruminさんにArchのインストールを勧められてデュアルブート環境を作った! そしたらMacのスリープができなくなって、勝手に電源が落るようになってしまった!(ダレカタスケテー!) でも私はあきらめ…

MacBookAir(early 2011) にArch Linuxのデュアルブート環境を作った

2014年7月19日に新潟の山奥で開催された、Kernel/VM探検隊メンバーによるハッカソンに参加していました。 そのなかでふと「Linux実機もほしいのよー」と言ったところ「デュアルブート環境作ろう!」といわれて、@kotatsu_mi 氏全面協力の下、Arch Linux Inst…

Seeeduino ArchでLチカしてみた(Mac編)

CMSIS-DAPとPyOCDというツールを使ってARMマイコンのデバッグがしたかったので、Seeeduino Archというmbedなマイコンボードを購入しました。 http://www.marutsu.co.jp/shohin_238114/ PyOCDに対応してればいいなら、もっといいマイコンがあるのに……と思うか…

「進捗ダメです」ペンダントを作った

FLORAというArduino互換マイコンボードに以前使ったNokia5110液晶をくっつけて、首から下げるペンダント(ネックレス)を作りました。 白黒液晶上にgifアニメ画像を表示することができます。 内部構造? プログラム領域におかれた2値画像データを読みだして…