タグ

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

  • KMC Staff Blog:Thread Local StorageをOSに頼らず実装する方法

    2022年07月28日 Thread Local StorageをOSに頼らず実装する方法 特定の OS を前提としないベアメタルのツールチェーン(いわゆる aarch64-unknown-elf のようなターゲット)に付属するライブラリは、マルチスレッド関係のライブラリの排他制御などが全て OFF になった状態です。pthread などのスレッドライブラリを前提にすることは当然できませんが、Thread Local Storage(TLS)だけならば OS に依存しない形で実装でき、かつ OS を使う場合は無変更でライブラリ関数のスレッドセーフ化が可能なのではないか?と思いつき、調査した時のメモです。 以下は clang で aarch64-unknown-elf ターゲットで、ダイナミックリンカが無い OS レス環境なので 当然 shared library も無効で、シンプルに TL

    rin51
    rin51 2022/07/28
  • KMC Staff Blog:RustからRTOS APIを使う

    2021年06月14日 RustからRTOS APIを使う 最近Rustという新しいプログラミング言語が多くの分野で注目を浴びています。RustC++のような低レベルなコンパイル型言語であり高い効率で動作する一方、強力な型システムやメモリ安全性を保証するための仕組みを備えており、バグの少ないコードを書くことができます。記事では、TOPPERSカーネルや弊社のSOLID-OS上でRustで書かれたプログラムを動かし、カーネルAPIを使用する方法を紹介します。 ビルド環境を整える Rustコンパイラのインストールは簡単で、 https://rustup.rs/ からダウンロードしたインストーラを実行することでホームディレクトリにインストールできます。rustupはインストールされているコンパイラ、ドキュメント、および標準ライブラリのバージョンを管理するコマンドラインツールです。rustup

    rin51
    rin51 2021/06/29
    > TOPPERS/ASP3カーネルをRustから使う
  • KMC Staff Blog:GNU ldのEXCLUDE_FILEの注意点

    rin51
    rin51 2020/08/26
  • 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のオブジェクトファイ

    rin51
    rin51 2020/06/25
  • KMC Staff Blog:Xilinx QEMU上でToppersを動かしてみる(APU編)

    rin51
    rin51 2020/01/22
  • KMC Staff Blog:QCOW2 形式の仮想ディスクを作成する

    2013年01月08日 QCOW2 形式の仮想ディスクを作成する QEMU のイメージファイル(仮想ディスクとして使用)を配布する際には、実際に使ったぶんだけファイルサイズが大きくなる(あるいは、別ファイルに差分だけを書き出せる)、QCOW2 形式(QEMU Copy-On-Write image file format version 2)が便利です。 buildroot でビルドした rootfs.tar から、QCOW2 形式のイメージファイルを作った時のメモです。 環境は Ubuntu 12.04 64bit です。 追記:kpartx は不要でした。 qemu-img、qemu-nbd、kpartx をインストールして、nbd (Network Block Device) を準備します。 $ sudo apt-get install qemu-utils kpartx $ sud

    rin51
    rin51 2020/01/22
  • KMC Staff Blog:QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせ

    2010年02月25日 QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせ QEMUの上でDebianなどが動いていると、apt-get で簡単にコンパイラなどもインストールすることができます。しかし、そこで実際にビルドを行うととんでもなく時間がかかります。一晩かけても終わらないこともあります。 QEMUには今まで紹介してきたような、システム全体をエミュレートするものの他に、Linuxのユーザーモードのみをエミュレートするものがあります。今回はユーザーモードエミュレーションを紹介します。 ユーザーモードエミュレーションを利用することでビルドにかかる時間を1/10に短縮することができました。 rootstockに隠された技 前回Ubuntuのインストールの時にルートファイルシステムを構築するのにrootstockというコマンドを使いました。

  • 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フラッシュメモリを搭載しています。 最近のブートシーケンスはもっと複雑になってい

  • KMC Staff Blog:GCC(ARM)のunaligned data accessコード生成

    2017年02月01日 GCC(ARM)のunaligned data accessコード生成 手元にあった弊社製の古い評価ボード KZM-ARM11-01(※1) で、musl libc のテストスイートを、開発中のバージョンの exeGCC(※2) でコンパイルして動かしてみた所、最適化オプション Os だと一部テストが FAIL するが、O2 だと PASS するという現象が発生しました。それだけだとよく聞くような話ですが、分割コンパイルしていて、別ファイルのコードを変更すると、アセンブラソースもオブジェクトファイルも全く同じなのにリンクすると期待通り動かなくなるなど、奇妙な挙動にだいぶ悩まされました。 ※1 既にディスコンなので、この URL はそのうち消えるかもしれません。 ※2 サイトの exeGCC に関する記述がだいぶ古くてすみません。昨年全面リニューアルの予定だったのです

  • KMC Staff Blog:LinuxカーネルからI/Oレジスタをたたく時のメモリのマッピングの方法

    2010年11月02日 LinuxカーネルからI/Oレジスタをたたく時のメモリのマッピングの方法 KZM-A9-DualボードにU-bootとLinuxカーネルを移植しています。 ボード屋さんに作ってもらったボードの仕様書とボードの動作確認用のテストプログラムを見ながらデバイスドライバを修正していきます。 Linuxカーネルは仮想メモリ上で動作しているので特定の物理アドレスにあるI/Oレジスタの読み書きをするときにはちょっと工夫必要です。 たとえばボードのテストプログラムでこんなコードがあったとします。 #define LCD_BACKLIGHT 0x22000400 ... void lcd_backlight_on(void) { RegWrite8(LCD_BACKLIGHT, 0x01); } 組み込み開発をしている人はよく目にするコードだと思います。0x22000400番地に8b

  • KMC Staff Blog:UNIX v6 を x86 マルチプロセッサシステムに移植した xv6

    2009年08月17日 UNIX v6 を x86 マルチプロセッサシステムに移植した xv6 MIT教育システムは当にすごいですね。 xv6 という、MIT の OS の講義のために、UNIX v6 を ANSI C で書き直して、x86 マルチプロセッサシステムに移植したものが存在することを、ひらさんの twitter で知りました。 wikipedia がよくまとまっています。Lions のように、読みやすくソースコードが編集された PDF へのリンクもあります。OS のソースコード全部で、たったの 75 ページと、非常にコンパクト。 http://en.wikipedia.org/wiki/Xv6 他にも MIT は、初級計算機科学の講義のために書かれた SICP (日語訳 : 計算機プログラムの構造と解釈)などでも非常に有名です。(こちらは Scheme でプログラムが

    rin51
    rin51 2015/09/26
  • 1