TOP
«
»

FreeBSD/armv6z/clang on Raspberry Pi 512MB (with U-Boot + ubldr)

今年最初のプリビルドイメージを公開しました。
昨年末に不安定の原因が特定できたので、一番有効そうなタイマー処理と
SDカードの転送処理の部分を手動最適化したアセンブラコードで置き換えてみました。
およそ80%の性能向上です(当社比)

それ以外にも修正してありますが、アセンブラコードに比べたら些細な事です。
興味あればMLの方をどうぞ。

追記:
2013/01/30 ↓新しいページはこちらになります。
http://shell.peach.ne.jp/aoyama/archives/2545

追記:
まだ実験的ですがVFPサポートを開始しました。(test12以降)
VFP部分に問題が発生したためテストカーネルをアップしました。
SDカードのDMA転送モードをサポート開始しました。(test13以降)
デフォルトはDMA転送モードなのでPIOに戻したい場合はsysctlなどで
変更する必要があります。
DMA転送部分に問題が発生した為テストカーネルをアップしました。
シングルモード時にDMA読込転送で問題を起こすのでさらにパッチ版をアップしました。
さらに問題が発生したので最終修正版をしました。(20130112)
無線LANとquotaを有効にしたカーネルでイメージを再生成しました(test14以降)
無線デバイスドライバはdevdで自動的に読み込まれます。

※PIO最終版は freebsd-pi-clang-20130105.img.gz と kernel-vfp-p1-20130106.gz になります。

http://www.peach.ne.jp/archives/rpi/kernel/kernel-vfp-p1-20130106.gz
http://www.peach.ne.jp/archives/rpi/kernel/kernel-20130110.gz
http://www.peach.ne.jp/archives/rpi/kernel/kernel-p1-20130110.gz

http://www.peach.ne.jp/archives/rpi/kernel/kernel-20130112.gz

FreeBSD armv6z/clang/RPI-B-test11:
http://www.peach.ne.jp/archives/rpi/freebsd-pi-clang-20130101.img.gz

FreeBSD armv6z/clang/RPI-B-test12:
http://www.peach.ne.jp/archives/rpi/freebsd-pi-clang-20130105.img.gz

FreeBSD armv6z/clang/RPI-B-test13:
http://www.peach.ne.jp/archives/rpi/freebsd-pi-clang-20130108.img.gz

FreeBSD armv6z/clang/RPI-B-test14:
http://www.peach.ne.jp/archives/rpi/freebsd-pi-clang-20130115.img.gz

ダウンロードしたらGZIP圧縮されているので解凍して4GB以上のSDカードに展開してください。
追加用にaxe(ASIX AX88x7x/760)のUSB LANドライバを入れてあります。

デフォルトコンパイラは clang になります。
セルフコンパイルすると警告が出て止まる事があるので、NO_WERROR= と
WERROR= を /etc/make.conf に追加するのを忘れないようにしてください。

※HDMIにも出力しますがシリアル優先なのでHDMI優先したい場合は、
set console=comconsole の行を /boot/loader.rc から削除してください。

使用コンフィグ:
http://www.peach.ne.jp/archives/rpi/config/RPI-B-test11
http://www.peach.ne.jp/archives/rpi/config/RPI-B-test13
http://www.peach.ne.jp/archives/rpi/config/RPI-B-test14

新カーネルのみ:
http://www.peach.ne.jp/archives/rpi/kernel/

ソースとパッチ:
http://www.peach.ne.jp/archives/rpi/patch/

参考用 MLのアーカイブ等:
http://lists.freebsd.org/pipermail/freebsd-arm/2013-January/004555.html
http://lists.freebsd.org/pipermail/freebsd-arm/2013-January/004541.html
http://lists.freebsd.org/pipermail/freebsd-arm/2013-January/004507.html
http://lists.freebsd.org/pipermail/freebsd-arm/2012-December/004421.html
http://lists.freebsd.org/pipermail/freebsd-arm/2012-December/004331.html

過去の情報はこちらに:
http://shell.peach.ne.jp/aoyama/archives/2357

初期設定:
MEM 496MB/GPU 16MB/SWAP 512MB
I/O: マルチコンソール(シリアル優先)
IP アドレス: 192.168.1.240
デフォルトルータ: 192.168.1.1
DNS: 192.168.1.1
sshd: 有効
ntpdate: 有効 (0.freebsd.pool.ntp.org)

ユーザ: pi
パスワード: raspberry
パスワード(root): raspberry

初期設定のため変更されたファイル:
/boot/loader.rc
/etc/fstab
/etc/rc.conf
/etc/hosts
/etc/resolv.conf
/etc/master.passwd
/etc/group

参考用 /etc/make.conf:

WITHOUT_X11=yes
WITH_CLANG=yes
WITH_CLANG_IS_CC=yes

# For clang
NO_WERROR=
WERROR=

CFLAGS=-O2 -fno-strict-aliasing -pipe -march=armv6z -mtune=arm1176jzf-s -mfloat-abi=soft
COPTFLAGS=-O1 -fno-strict-aliasing -pipe -march=armv6z -mtune=arm1176jzf-s -mfloat-abi=soft

カーネルのセルフビルドのやりかた:

# fetch -o /usr http://www.peach.ne.jp/archives/rpi/patch/src-244906-20130101.patch.gz
# fetch -o /usr/src/sys/arm/conf http://www.peach.ne.jp/archives/rpi/config/RPI-B-test11
# cd /usr/src
# gzcat /usr/src-244906-20130101.patch.gz | patch
# make buildkernel KERNCONF=RPI-B-test11 WITH_FDT=yes

(wait about 50 minutes)

Don't forget to add NO_WERROR= and WERROR= to /etc/make.conf if you use clang.
If you already applied previous patch, you can remove it by like this:

# cd /usr/src
# gzcat /usr/src-XXXXXX-YYYYMMDD.patch.gz | patch -R

If you want re-compile without cleaning, you can try to use like this:

# make buildkernel KERNCONF=RPI-B-test11 WITH_FDT=yes -DNO_CLEAN -DNO_CLEANDIR

GPTパーティションのUSBメモリの作り方とか:

(if you use something, delete/destory it before doing)
# gpart delete -i N da0 (where N is number of a partition)
# gpart destroy -F da0

(create new partition and format)
# gpart create -s gpt da0
# gpart add -t freebsd-ufs da0
# gpart show
# newfs -U -j /dev/da0p1

(mount it)
# mount /dev/da0p1 /mnt

起動パーティション(MSDOS)のマウント方法:

# mount -t msdosfs /dev/mmcsd0s1 /mnt

After this, you can edit the files such as config.txt in the boot partition.

VFPの使い方:

add "-mfloat-abi=softfp -mfpu=vfp" to your CFLAGS
for example:

CFLAGS=-O2 -fno-strict-aliasing -pipe -march=armv6z -mtune=arm1176jzf-s -mfloat-abi=softfp -mfpu=vfp

HSモード(SDカードのハイスピードモード)の有効化方法:

add to /boot/loader.rc:

set hw.bcm2835.sdhci.hs=1

DMAモード(pio=0)とPIOモード(pio=1)の切り替え方法:

# sysctl hw.bcm2835.sdhci.pio=1

or add to /boot/loader.rc:

set hw.bcm2835.sdhci.pio=1

タグ: , , ,

コメント / トラックバック3件

  1. Pernat1y より:

    Thank you for the build, keep it up.
    And happy New Year :)

  2. aoyama より:

    Happy New Year!

    Thanks.

  3. zetxx より:

    however, can you point me how to compile linux.ko?

コメントをどうぞ