ブックマーク / blog.kmckk.com (15)

  • KMC Staff Blog:GCCの最適化による予期せぬ無限ループの発生

    2019年09月13日 GCCの最適化による予期せぬ無限ループの発生 コンパクトな独自の libc を実装していて、GCC のテストを通したところ、WARNING: program timed out. が原因による FAIL が多発しました。調べた結果、非常に意外な結果だったのでメモします。 問題は、calloc の実装でした。以下のように、全く問題無さそうな簡単なコードです。 #include <stdlib.h> #include <string.h> void *calloc(size_t n, size_t size) { size_t bytes = n * size; void *p = malloc(bytes); if (p) { memset(p, 0, bytes); } return p; } これが、GCC 6.4.0 の arm-eabi で O2 でコンパイル

    eggman
    eggman 2020/01/25
  • KMC Staff Blog:Androidのrepo syncのTips

    2010年12月28日 Androidのrepo syncのTips Androidのソースコードをダウンロードするにはrepo sync を行いますが、 これには相当時間がかかります。 その時間を節約するためのちょっとしたTipsを紹介します。 (English version of this page) 既存のリポジトリからコピーすることでダウンロード量を減らす もし既存のソース(例えばandroid-2.2_r1.1)をダウンロードしていたならば、そのリポジトリを利用することでダウンロードする量を減らすことができます。 $ mkdir android-2.3.1_r1 $ cd android-2.3.1_r1/ $ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.1_r1

    eggman
    eggman 2017/03/09
  • KMC Staff Blog: Linux2.6.33を載せたKZM-CA9-01ボードでSDメモリカードがマウントできない(その2)

    2010年07月22日 Linux2.6.33を載せたKZM-CA9-01ボードでSDメモリカードがマウントできない(その2) 前回の続き。 対症療法ですが問題は解決しました。同じ修正で2.6.35-rc3でも動くようになりました。 DMA転送の手順 MMCホストドライバのレベルでのDMA転送は以下のような手順です。 dma_map_sg *** DMA転送 *** dma_unmap_sg dma_unmap_sgはデータ転送完了の割り込みの中で呼ばれます。 dma_map_sg, dma_unmap_sgは arch/arm/mm/dma-mapping.c にありますが、この実装は2.6.32と2.6.33で違いがあります。 キャッシュの操作の振る舞いを調べる 具体的なキャッシュの制御の実装は arch/arm/mm/cache-v7.S です。アセンブラで書かれています。 この中で

    eggman
    eggman 2016/05/25
  • KMC Staff Blog:Linux2.6.33を載せたKZM-CA9-01ボードでSDメモリカードがマウントできない(その1)

    eggman
    eggman 2016/05/25
  • KMC Staff Blog:GCC でコンパイルした時のオプションをバイナリファイルから取得する

    2013年06月26日 GCC でコンパイルした時のオプションをバイナリファイルから取得する GCC 4.7 のリリースノートに、新しく追加された -grecord-gcc-switches オプションを付けると、DWARF デバッグ情報の DW_AT_producer 属性文字列にコンパイラのコマンドライン文字列が追加されるよ、と書いてあることに気付いたので、さっそく試してみました。 試した環境は Ubuntu 12.04 64bit です。 gcc のバージョンを確認してみたところ、4.6.3 だったので、まずは 4.6 の出力を確認してみます。コンパイルする C ファイルは何でも良いのですが、ここでは test.c というファイルをコンパイルしています。 $ cat test.c int f() { return 0; } $ gcc -O2 -c -g test.c $ reade

    eggman
    eggman 2013/06/27
  • KMC Staff Blog:U-Bootのデバッグ

    2013年03月07日 U-Bootのデバッグ 先日のKMCセミナーでU-Bootの話をしました。その中から一部をピックアップして紹介します。 U-Bootのブートシーケンス まずは古典的でシンプルなブートシーケンスです。電源投入するとCPUはNORフラッシュ上のU-Bootを実行します。U-BootはDRAMなど必要なハードウェアの初期化を行った後に、なんらかの方法でLinuxカーネルをDRAM上にロードし、制御を移します。Linuxカーネルをロードする元としては、NORフラッシュや、NANDフラッシュ、SDカード、あるいはtftp等のプロトコルでネットワーク経由でロードしたりします。 U-Bootのデバッグを行うには、まずはこの方法で試すのがよいでしょう。KZM-A9-GTボードにはこれが可能なようにNORフラッシュメモリを搭載しています。 最近のブートシーケンスはもっと複雑になってい

    eggman
    eggman 2013/03/29
  • KMC Staff Blog:Androidのadbのメモ(11) adbdのsecureモード

    2012年02月09日 Androidのadbのメモ(11) adbdのsecureモード KZM-A9-Dualボードなどの評価ボードに自分でビルドしたAndroidを載せるときにはadbdがroot権限で実行できるようになっていますが、市販のAndorid端末ではそうなっていません。この違いについて調べました。 secureモードのadbd system/core/adb/adb.c: adb_mainを見ると secure == 1 のとき groupの追加 /* add extra groups: ** AID_ADB to access the USB driver ** AID_LOG to read system logs (adb logcat) ** AID_INPUT to diagnose input issues (getevent) ** AID_INET to

    eggman
    eggman 2012/11/06
    ro.debuggable
  • KMC Staff Blog:Androidのログのしくみ

    2010年08月31日 Androidのログのしくみ 先日日Androidの会 関西支部 マニアック勉強会でAndroidのログの話をさせていただきました。そのときの発表資料をここに貼っておきます。 2010.9.2追記 発表資料をアップデートしました。 Logging system of AndroidView more presentations from Tetsuyuki Kobayashi. このスライドの中で最も言いたかったことはほぼこの一枚に集約されています。 (クリックで拡大) 9月3日のCELFテクニカルジャンボリーでも時間をいただいたのでこのスライドをさらに増強して話をします。 2010.9.9 追記 CELFテクニカルジャンボリーでのビデオが公開されたのでここに貼ります。 関連するページ AndroidJavaアプリからスタックトレースをログに出す簡単な方法 An

    eggman
    eggman 2012/06/12
  • KMC Staff Blog:AndroidのBinderによるプロセス間のメソッド呼び出し(メモ)

    2011年03月17日 AndroidのBinderによるプロセス間のメソッド呼び出し(メモ) Androidのシステムでは同時にたくさんのプロセスでJava言語で書かれたプログラムがDalvikVMによって動いています。intentを発行して別のプロセスで処理を実行できることがAndroidでのプログラミングの大きな強みです。 このようなプロセスをまたがったメソッド呼び出しは下位レベルではBinderという技術が使われているのですが、私はいままでそれがぼんやりとしか理解できていませんでした。 ソースコードを無理やり追いかけたら、わかりかけてきたのでメモを残します。 Androidのアプリケーションプログラムから別のアプリケーションを起動するにはIntentを発行すればよいのですが、それには android.app.Activity#startActivity メソッドを使用します。 その

    eggman
    eggman 2012/02/25
  • KMC Staff Blog:Android 4.0で利用されているLLVM

    2011年12月05日 Android 4.0で利用されているLLVM Android4.0(Ice Cream Sandwich)のソースコードを見て、RenderScriptにLLVMの技術が使われているのがわかりました。(正確には3.xからですが、ソースが公開されていなかったので詳細を確認できませんでした。) 技術的な興味で少し調べたのでここにメモを残します。 Android RenderScript on LLVM この資料から図を拝借して。 ホスト側で .rsファイルから.bc(bitcode: LLVMの中間言語フォーマット)にコンパイルするとともに、関数の呼び出しのためのラッパーメソッドや変数のgetter/setterメソッドのJavaソースコードが自動生成される。このためJavaとRenderscript間でのやりとりは簡単。JNIは不要。 ターゲット側で (図中ではJa

    eggman
    eggman 2011/12/06
  • KMC Staff Blog:vmlinuxとzImageの関係

    2010年02月05日 vmlinuxとzImageの関係 Linuxカーネルを起動する時に使うzImageってvmlinuxzipで圧縮したものなの? zImageを伸長するのはブートローダーの仕事? 改めて調べてみたので、ここでそれを紹介します。 (以下の話はアーキテクチャによって詳細が異なるかもしれません。今回はarmのlinuxを題材にします。) これってどんなファイル?と思ったときはまず file コマンドで調べます。 $ file vmlinux vmlinux: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped $ file arch/arm/boot/zImage arch/arm/boot/zImage: data vmlinuxがELFのオブジェクトファイ

    eggman
    eggman 2010/10/13
  • KMC Staff Blog:Linuxカーネルを別のディレクトリでビルドする

    2010年10月12日 Linuxカーネルを別のディレクトリでビルドする 今日はLinuxカーネルをビルドするときにちょっとしたTipsを紹介します。 カーネルをいじっていると、時々、同一のソースからコンフィグを少しだけ変えたものを複数作って、切り替えて交互に動作を試したいということがよくあります。 そのたびにコンフィグファイルを差し替えて再ビルドしてもよいのですが、そのコンフィグファイルごとに別々のディレクトリでビルドできると便利です。 そのためにはmakeの時に O=dir をつけます。 $ mkdir test1 $ make xxxx_defconfig O=test1 $ make menuconfig O=test1 $ make -j4 O=test1 これで、test1/.config の内容でtest1/vmlinux がビルドされます。 ただし、O=dir をつけずにビ

    eggman
    eggman 2010/10/13
  • KMC Staff Blog:AndroidのNDKのツールを使って実行ファイルをビルドする簡単な方法

    2010年08月24日 AndroidのNDKのツールを使って実行ファイルをビルドする簡単な方法 AndroidのNDKはJavaからJNIを経由して呼び出すダイナミックリンクライブラリを作るためのツールですが、ここに含まれるコンパイラとインクルードヘッダ、ライブラリを使って普通にmainから始まる実行ファイルをビルドすることもできます。ここではその簡単な方法を紹介します。 Makefileの記述 Makefile NDK_TOPにはNDKをインストールしたディレクトリを指定します。 NDK_TOP=/path/to/your/android-ndk-r4b CC = $(NDK_TOP)/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc LIBS = -llog TARGET_ARCH_CFLAGS = -march=arm

    eggman
    eggman 2010/08/25
  • KMC Staff Blog:講演資料: Using QEMU for Cross Development

    2010年03月05日 講演資料: Using QEMU for Cross Development CELFテクニカルジャンボリーでQEMUの話をさせていただきます。 組み込みシステムのクロス開発で実ボードの他にQEMUを活用しましょうという話です。 こちらにその発表資料を掲載します。 Using QEMU for cross developmentView more presentations from tetsu.koba. 2010.3.8追記。ビデオを貼り付けます。 プレゼンテーション デモ 字が小さくて見えませんでした。次のデモの機会ではもっと大きなフォントで表示するようにします。 「qemu」カテゴリの最新記事 タグ : qemu ARM Debian kernel CELF

    eggman
    eggman 2010/03/05
  • KMC Staff Blog:ARM Linux の移植

    2009年12月21日 ARM Linux の移植 新しいターゲットボードに ARM Linux を移植するとき、何をすれば良いのか、各ファイルにはどのような役割があるのか、なかなかわかりにくいと思います。 自分の経験を元に、以下にまとめてみます。内容は無保証です。 ROM 化の部分は扱いません。make vmlinux できるところまでです。とりあえず vmlinux (圧縮前の ELF 形式) さえできれば、PARTNER から直接実行できます。 > l /path/to/vmlinux,/offs=xxxxxxxx # ロードしたい DRAM 物理アドレス位置へのオフセットを指定 > _pc=xxxxxxxx # pc をロードした位置に合わせてセット。 > _r1=xxxx # machine number を正しくセットしておかないとブートできません。 > g # 実行 (それ以

    eggman
    eggman 2010/01/08
  • 1