2013-12-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…