明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

Java の synchronized ブロックのようなことを C で実現する

職業柄、組込みをやっているので、 C で排他制御を行う機会は多い。 でも、毎回 ***_lock, ***_unlock で囲むのも面倒だし、解放漏れなどによるデッドロックとかわかりにくい割に初歩的なバグに悩まされることも多く、 Java の synchronized ブロックが羨ま…

clang と gcc の両方でラムダ式のようなことをする

Web アプリ開発の方は、牛歩ながら janus-webrtc-gateway のデモ画面を Django+Vue.js with Bootstrap に移植していっている。 echotest, videocall, audiobridge となんとか動作するものが移植できたが、 videoroom での複数リモートフィードをシンプルに扱…

Web アプリをつくろう

ついこの間まで Qemu でブートまわりを見ていたが、それが終わったら、と思っていたのが Web アプリ作成だ。 いきなり上層まで吹っ飛んだが、興味がある分野を順に並べたらこうなってしまった。 とりあえず目標がないと手が進まないので、 Janus WebRTC Gate…

Linux (aarch64) on Qemu を動作させたい (3)

github.com いろいろ変更を加え、 LS1046ARDB 向けの u-boot と kernel でシステムを立ち上げることができるようになった。 U-Boot 2017.07-00001-g62e8baa7b2-dirty (Jan 01 2018 - 08:37:01 +0000) SoC: LS1046AE Rev1.0 (0x87070010) Clock Configuration…

initramfs を再構築する

Qemu 上での Kernel デバッグにおいて、 init が正常に動作しないという問題 (こちらは Qemu の UART デバイスに対する割り込み線の設定ミスだった) を調査するため、 initramfs をいじっていたので、 cpio の展開 / 再圧縮手順をまとめておく。 cpio の展開…

Linux (aarch64) on Qemu を動作させたい (2)

Qemu への SEV 対応は、以下のような情報があり、 "パフォーマンスが悪いから nop にしているよ" みたいな感じに読めたけど、今回はパフォーマンスよりも動作の再現性を優先したいので、実装してみる。 Re: [Qemu-devel] implemetation of wfe and sev instr…

Linux (aarch64) on Qemu を動作させたい (1)

U-Boot をひと通り動かすことができるようになったので、引き続き Linux を動作させていく。 Linux も、 NXP-SDK 付属のものを使用して、ターゲット向けのバイナリをそのまま動作させることを目指す。 FIT ファイルの作成 ビルドしたあと、 U-Boot からよみ…

U-Boot (aarch64) on Qemu を動作させたい (10)

github.com ほそぼそと開発を続けていたのですが、ようやく eMMC (実態は SDHC デバイス) の実装がある程度まともに動作するようになり、 U-Boot から ext2 パーティションをマウントできるようになりました。 仕事で使用しているカスタムボードは eMMC から…

SDIO におけるコマンドの CRC について

Qemu の MMC / SDエミュレーションのコードを見ると、すべてのデバイスで CRC が crc = 0 /* FIXME */ とかになっているので、真面目に実装しようかなと思って調べた情報を記載しておく。 全体の仕様は、 https://www.sdcard.org/cht/developers/overview/sd…

docker コンテナ内で byobu (tmux) を利用する

Tmux and Screen | Intuitive documentation for using Docker containerization 最近は docker exec で直接コンテナ内に入っているけど、 ssh 経由の場合などと対処を混同しちゃうので、まとめておく。 $ docker exec -ti YOUR_CONTAINER_NAME script -q -c…

U-Boot (aarch64) on Qemu を動作させたい (9)

github.com 結論からいうと、公式の U-Boot をターゲット向けビルドのモジュールのまま Qemu 上で起動することができるようになった。 ここでの公式は、オリジナル U-Boot に NXP のカスタマイズが入った今回のターゲットボードである LS1046A RDB 向け U-Bo…

U-Boot (aarch64) on Qemu を動作させたい (8)

ハングの原因を追いかけると、リロケーション後に特定のメモリ領域 (キャッシュ関連) に値が入っていないため、例外が発行されていることがわかった。 U-Boot 的には final_mmu_setup() > enable_caches() 内の asm volatile ("msr tcr_el3, %0" : : "r" (tc…

U-Boot (aarch64) on Qemu を動作させたい (7)

なんとか、 DDR の SDP も実装し、 board_f.c の init_sequence_f の初期化シーケンスについては抜けられるようになった。 だが、どこかでハングが発生して、プロンプトまでは到達していない。 u-boot の処理では、プログラムのリロケーションが実行されてお…

U-Boot (aarch64) on Qemu を動作させたい (6)

現在は、仕事で触れている freescale の ls1046a Reference Design Board の U-Boot を Qemu で動作させるべく、仮想ボードを作成中。 CPU, RAM, UART と何とか整えてきて、i2c の調整を行っています。 U-Boot 2016.092.0+ga06b20925c (Oct 22 2017 - 21:04:…

U-Boot (aarch64) on Qemu を動作させたい (5)

u-boot.bin をダンプすると、 init_sequence_f のアドレスには関数ポインタが格納されていることを確認した。 0004cb70 1c 07 09 00 00 00 00 00 48 9c 09 00 00 00 00 00 |........H.......| 0004cb80 00 08 09 00 00 00 00 00 38 2d 08 00 00 00 00 00 |..…

U-Boot (aarch64) on Qemu を動作させたい (4)

更に処理を追いかけると、 board_init_f() (common/board_f.c) で static に取られた変数の init_sequence_f のデータが空になっていることがわかった。。 本来は、ボードの初期化メソッドのテーブルなので、関数ポインタが入っているべきところ。 どゆこと…

U-Boot (aarch64) on Qemu を動作させたい (3)

確認していくと、どうやら u-boot の _start (arch/arm/cpu/armv8/start.S:22) がちゃんと処理されていることが確認できた。 確認手順は、 $ qemu-system-aarch64 \ -S -gdb tcp::1234 \ -machine $MACHINE \ -kernel u-boot/u-boot \ -nographic してから、…

U-Boot (aarch64) on Qemu を動作させたい (2)

とりあえず、期待通り U-Boot の entry point である 0x80000 (_start) に制御が移っているのか?ということの確認を目指してみる。 qemu 自体を gdb で解析してみる。 gdb --args qemu-system-aarch64 -machine raspi3 -kernel u-boot/u-boot -nographic 途…

U-Boot (aarch64) on Qemu を動作させたい (1)

なんとか、動作させるまで漕ぎ着けたいな。。 現状は以下のような状態です。 qemu-system-aarch64 -M raspi2 -cpu cortex-a53 -kernel u-boot ... (u-boot with rpi_3_defconfig) は全く(?) 動作していないっぽい。 同じ aarch64 (cortex-a53) の xlinx-zcu1…

Das U-Boot on Qemu (aarch64) を動かしてみる

U-Boot を aarch64 emulated by Qemu な環境で動作させることができるか試してみる。 Qemu のビルド まずは、 Qemu をビルドしてみる。 ### とりあえず、現状最新の v2.10.1 で試してみる。 $ git clone git://git.qemu.org/qemu.git $ cd qemu $ git checko…

node.js の (泥臭い) デバッグ方法 - ログ編 -

github.com 今回、 Let’s Chat のリバースプロキシプラグインを自動ログインに対応させたところ、XMPP のログインで例外が出るようになってしまったので、泥臭くデバッグしました。 そこで、 console.log でオブジェクトを出力すると [object object] としか…

luajit に入門してみた

ことの始まり 仕事で Lua を使うことになりそう (というか、使う方向に持って行こうとしている) ので、 LuaJIT の使い勝手を事前に確認してみた。 C との IF が多くあるっぽいので、個別に binding を実装するととんでもないことになりそうなので、 LuaJIT …

Bitbucket のプルリクエストの差分を patch 形式で取得する

忘れそうなので備忘録として。 Github では、プルリクエストから patch 形式でダウンロードするのは単純に URL の最後に .patch をつければ良いけど、 Bitbucket では単純に同じことはできなかったので調べると、 API を叩けばできることがわかった。 https:…

Kallithea の DB を SQLite から PostgreSQL に移行する戦い

仕事で Kallithea を使用しているのだけれど、標準の SQLite にはプロジェクトの規模が大きすぎるのか、 python がお亡くなりになる現象が多発している。 (Windows 上で動作させていることも原因かも。。) そのため、公式の情報に従い、 SQLite から Postgre…

Hubot から ErrBot に乗り換えたい

Node.js および Coffee Script に関して、あまり詳しくないため、 Hubot では実現したい機能をどのように実装すればよいかわからないことが多い。 そのため Node.js よりは使い慣れている Python で実装されたチャットボットである ErrBot への乗り換えを検…

Trac に JSON-RPC の機能を追加して、curl でチケットを作成してみた

今の仕事では、客先は Redmine を使用している。 だが、客先の Redmine には社内事情をかけないため、必然的に社内的な作業を管理する ITS が必要となるのだが、個人的な事情 (Ruby ×、Python ○ なので) により Trac を使用している。 ちょっとした事情から…

サーバアプリのアップデートに、えらい手間取っている話

会社のサーバ PC が近々新しくなるので、手元環境で開発に導入しているアプリをアップデートの予行演習をしようとしたら、めちゃくちゃ手間取っている。 全然進んでいないけど、本番環境のアップデートの際の備忘録として残しておく。 Let’s Chat の更新 更…

Yahoo が継続的デリバリーシステムの ScrewDriver を OSS として公開した

github.com 米 Yahoo が作成した継続的デリバリーシステムの ScrewDriver を OSS として公開したらしい。 継続的デリバリーと継続的インテグレーションの厳密なカバー範囲はよくわかっていないけど、今プロジェクトで使用している Jenkins を置き換えること…

Linux Mint 17.3 (or Ubuntu 14.04) で輝度を安定して調整する方法

作業用 PC の TOSHIBA R731/37C を Linux Mint 17.3 に入れ替えたのですが、スリープ後にキーボードからの輝度調整ができないという問題が発生していました。 いろいろ調べたところ、既知の問題として存在しているようですが、何故かメインストリームにはマ…

Windows で Ext2 を認識させる

Ext2 IFS For Windows とりあえず、メモだけ。 今度使ってみよう。