2013-01-01から1年間の記事一覧

mrubyをdistccでビルドできるようにしてみた

Raspberry Piにmrubyでもと思ったんだけど、distccでビルドするには?ってことで"mruby distcc"でぐぐってみて最初の30件にそれらしいのがなかったので自分でやってみた。 (´-`).。oO(クロスコンパイルではなくdistccを選んだのは気分の問題Raspberry Pi・P…

Arch Linuxでarmのクロスコンパイル環境作るのは割と簡単だったのめも

Arch Linuxでarmのクロスコンパイル環境作るのはどうやるんだろと思ったけどかなり簡単だった。 archlinuxarm.orgにあるこの「Distcc Cross-Compiling」を見ればOKというレベル。crosstool-ngというツールチェインをインストールする必要があるのだけれど、…

lkmlにフレームバッファのメモリーリーク修正パッチを投げたのでそのデバッグ過程メモ

前回のパッチとは別でフレームバッファのドライバでのメモリーリークを修正するパッチを投げたのでデバッグのメモkmemleakのレポートはこのようなもの。 unreferenced object 0xffff880036ca84c0 (size 16): comm "swapper/0", pid 1, jiffies 4294877407 (a…

Mavericksでgemを使ってちょっとハマったのでメモ。

Mac(Mavericks)でrubyでもと思ってみたらこんなエラーが。 $ gem install json Building native extensions. This could take a while... ERROR: Error installing json: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.fra…

Linuxカーネルで見たc言語の小技:BUILD_BUG_ONマクロ

LinuxカーネルにあるBUILD_BUG_ONマクロ。名前からやりたいことは十分に分かるんだけど、これはどういう仕組みなのかというところ。使っている例としてarch/x86/kernel/head64.cにあるx86_64_start_kernel()を見てみるとこんな感じ。 140 asmlinkage void __…

lkmlにメモリーリーク修正のパッチを投げたので修正内容のメモ

どんなことをやったかをメモしておこう。 といっても今回のは比較的簡単に調べられたけど。パッチを作ったカーネルは3.13-rc4です。2013/12/20 追記: (´-`).。oO(Reviewed-byしてもらったのでそのうちメインラインにも入るだろう kmemleakさんから以下のよ…

Xcodeのユニットテスト(ロジックテストの方)でsqliteを使ったロジックのテストをする

Xcodeでユニットテストと言った場合、何気に2個のやり方がありますよね。Appleの単体テストのマニュアルにありますがロジックテストとアプリケーションテストの2個。。。 アプリケーションテストは通常のアプリケーションの実行コンテキストでテストを行い、…

udevでvfatなメディアの自動マウントの挙動をちょっと変更したのでちょっとメモ

/etc/udev/rules.d/11-media-by-label-auto-mount.rulesでUSBメモリスティックとかUSB-HDDの自動マウントさせているんだけど、ファイルシステムがvfatの時にuid:root、gid:usersでマウントされるなーと思ったらこれだったw # Filesystem-specific mount op…

Linuxブート時のcpu数認識の処理を読む

Linuxブート時のcpu数認識の最後の部分のこれ。 [ 0.000000] smpboot: Allowing 8 CPUs, 0 hotplug CPUsこのメッセージはarch/x86/kernel/smpboot.cにあるprefill_possible_map()が出している。 1252 pr_info("Allowing %d CPUs, %d hotplug CPUs\n", 1253 p…

generic_processor_info()によるcpuの処理部分を読む

前回の続きとしてgeneric_processor_info()を読む。まずはgeneric_processor_info()が呼ばれる流れを。これはacpi_register_lapic()から呼ばれていて、acpi_register_lapic()は以下の関数などから呼ばれる。 acpi_parse_x2apic() acpi_parse_lapic() acpi_pa…

Redisのsortコマンドでlimitをつけた場合はどんな感じのソートをしているのか

なんていうことを特に調べるつもりはなくて、なんとなくRedisのsrc/を見てたらpqsort.cというのを見つけたのでファイルを開いて見てみたらNetBSD由来のqsortっぽくて、へ~なんて思っていたけどpqsort(3)なんて有ったっけ?なんて思いつつファイルをよく見た…

Linuxカーネルで「ACPI: LAPIC ~」などを出している辺りを読む

前回の続きとしてacpi_parse_madt_lapic_entries()内で acpi_table_parse_madt()の2番目の引数で渡している関数を見ていこう。 見るのはうちの環境に関係ありそうなところでこの辺を。 acpi_parse_x2apic() acpi_parse_lapic() acpi_parse_x2apic_nmi() acpi…

acpi_parse_madt_lapic_entries()とMultiple APIC Description Table

今日はacpi_parse_madt_lapic_entries()を見ていこう。と言ってもコードよりもACPIの仕様書読むほうがメインかも。。 901 static int __init acpi_parse_madt_lapic_entries(void) 902 { 903 int count; 904 int x2count = 0; 905 906 if (!cpu_has_apic) 90…

「Using ACPI (MADT) for SMP configuration information」のところを読む

昨日の「LinuxカーネルのSMPまわりの処理を調べてみる」の続きでUsing ACPI (MADT) for SMP configuration informationを出している箇所を見てみる。メッセージを検索してみるとarch/x86/kernel/acpi/boot.cにあるacpi_process_madt()がヒット! どこでメッ…

LinuxカーネルのSMPまわりの処理を調べてみる

うちではデスクトップとして使っているPCにIntel® Core™ i7-3770S Processorを使っていて、コア数が4、8スレッドということで/proc/cpuinfoでは8個のcpuがLinuxによって認識されています。では、これがどのような手順で認識されていったのか?というのをちょ…

Linuxカーネルで処理できるEjectプロトコルを作ってみる

Linuxカーネルでinet_add_protocol()という関数を使うとオレオレプロトコルを簡単に追加できるので遊んでみました。 以下が作ったカーネルモジュールです。 #include <linux/module.h> #include <linux/kernel.h> #include <linux/kmod.h> #include <net/protocol.h> MODULE_DESCRIPTION("simple Eject protocol"); MODULE_A</net/protocol.h></linux/kmod.h></linux/kernel.h></linux/module.h>…

ディストリビューション/パッケージマネージャー Advent Calendar 2013 5日目の記事書きました

Qiitaにディストリビューション/パッケージマネージャー Advent Calendar 2013の記事「Fedoraで行っているテスト各種 」を書きました。

clcok_gettime(2)で実時間とかcpu時間を計る

Linuxのclock_gettime(2)を見ると実時間、プロセスのcpu時間、スレッド毎のcpu時間を計測できるらしいので使ってみる。includeするのはtime.h。 #include <unistd.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <assert.h> static inline double timespec2msec(const str</assert.h></pthread.h></stdlib.h></stdio.h></time.h></unistd.h>…

カーネル/VM Advent Calendar 2013 3日目の記事をQiitaに書きました。

カーネル/VM Advent Calendar 2013 3日目の記事「カーネル/VM Advent Calendar 2013 3日目:LinuxカーネルのlockrefというLock機能を試してみよう」をQiitaに書きました。 内容はタイトルそのままですw 3.12から入ったlockrefというロック機能を試してます。…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの7

今回はcpu_init()から。cpu_init()はこのような関数。他の関数を読んでいくだけで、この関数自体は特別なことはしてないですね。 static void cpu_init(struct per_cpu *cpu_data) { int err; printk(" CPU %d... ", cpu_data->cpu_id); err = register_linu…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの6

前回でとりあえずarch_init_early()は大体読んだので次はinit_early()に戻ってcell_init()から。cell_init()はhypervisor/control.cにある。 int cell_init(struct cell *cell, struct jailhouse_cell_desc *config, bool copy_cpu_set) { unsigned long *co…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの5

「φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの3」で残した4つの関数のうち、paging_init() とpage_map_create()は「φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの4」で確認したので まずはhypervisor/arch/x86/setup.carch_init_early()を。この関数…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの4

「φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの3」の続きを。まずはhypervisor/paging.cpaging_init()から。paging_init()を上から順に見ていきます。 int paging_init(void) { unsigned long per_cpu_pages, config_pages, bitmap_pages; unsigned long…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの3

「φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの2」の続きでinit_early()を。 init_early()の呼び出し元はhypervisor/setup.cのentry()。最初に行われるのはGlobal Offset Tableの初期化。 static void init_early(unsigned int cpu_id) { unsigned long …

φ(.. )メモシテオコウ on_cpu_each()はasyncなのか調べてみる

on_cpu_each()がasyncなのかというところのめもです。on_each_cpu()を見ると三番目の引数waitがなんか怪しいのが分かりますね。 これが使われているのはsmp_call_function()なのでこれを見る必要があると。 547 /* 548 * Call a function on all processors.…

φ(.. )メモシテオコウ on_each_cpu()の単なるめも

on_each_cpu()の単なるめも #include <linux/module.h> #include <linux/kernel.h> #include <linux/cpumask.h> #include <linux/smp.h> MODULE_DESCRIPTION("hello module"); MODULE_AUTHOR("masami256"); MODULE_LICENSE("GPL"); static atomic_t count; static void foobar(void *info) { printk(KERN_INFO "CPU[%d] hello</linux/smp.h></linux/cpumask.h></linux/kernel.h></linux/module.h>…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの2

前回の「φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの1」からの続きでjailhouse_enable()から。この関数は以下のようにjailhouseコマンドを実行した時に呼ばれる。 jailhouse enable /path/to/qemu-vm.cell引数に渡しているファイル名はconfigs/の下に有…

φ(・・*)ゞ ウーン jailhouseのコードを読んでみるの1

まあ、なんとなく。。。見ているコードはgitのこのコミットで。jailhouseのツールとしての構成としては以下のようになっているようです。 カーネルモジュールのjailhouse.ko ↑が読み込むファームウェアのjailhouse.bin ユーザーランドのツールのjailhouse ソ…

φ(.. )メモシテオコウ Linux:firmwareの読み込み処理めも

jailhouseのmain.cを見ていてファームウェアの読み込みrequest_firmware()のところでこれってどうやってんだろ?と思ったので調べてみるなど。見たカーネルのバージョンは3.12です。 この関数がどんなことをしているのかというのはLinux Kernel Watchにあり…

φ( ̄ー ̄ )メモメモ iOS:gtm-oauth2でOAuth認証してgoogleのAPIを使う

iOS

OAuthのライブラリとしてgtm-oauth2がありますが、ちょっと使って見たのでめもです。オフィシャルのドキュメントはこちら。 やりたいこととしてはOAuthの部分はgtm-oauth2を使ってAPIへのアクセスは自分でやるという方式です。APIへのアクセスまで含んだGoog…