- 開発プロセスについて Documentation/development-process/ [kernel.org]
- $ make defconfig
は arch//configs/*_defconfig が呼ばれる
- カーネルビルドプロセスについて Documentation/kbuild/ [kernel.org]
- ramzswap
- fio - Flexible IO Tester [kernel.dk]
- カーネルビルドプロセスについて Documentation/kbuild/ [kernel.org]
June 3, 2014
"Linux Kernel HACKS"
『Linux カーネル HACKS』[amazon.co.jp] メモ
June 2, 2014
DraftSight for Fedora installation on CentOS
DraftSight for Fedora (Beta V1R5.1) を CentOS 6.5 x86_64 にインストール。
rpm インストール時に必要と言われる cups-libs.i686、起動時に必要と言われる mesa-libGLU.i686 nas.i686 glib2.i686 をインストールすると起動できたはずが、Segmentation fault。
Draftsight - CAD - installing in 64bits (Page 1) / Applications & Desktop Environments / Arch Linux Forums [archlinux.org] によると、NVIDIA のドライバをインストールするときに NVIDIA's 32-bit compatibility libraries を入れなかったのが問題かもしれない。NVIDIA のドライバインストーラで 32-bit ライブラリをインストールしたら、起動できた。
rpm インストール時に必要と言われる cups-libs.i686、起動時に必要と言われる mesa-libGLU.i686 nas.i686 glib2.i686 をインストールすると起動できたはずが、Segmentation fault。
Draftsight - CAD - installing in 64bits (Page 1) / Applications & Desktop Environments / Arch Linux Forums [archlinux.org] によると、NVIDIA のドライバをインストールするときに NVIDIA's 32-bit compatibility libraries を入れなかったのが問題かもしれない。NVIDIA のドライバインストーラで 32-bit ライブラリをインストールしたら、起動できた。
# yum install cups-libs.i686 # rpm -ivh draftSight.rpm # yum install mesa-libGLU.i686 nas.i686 glib2.i686 # ./NVIDIA-Linux-x86_64-331.67.run $ startx $ /opt/dassault-systemes/DraftSight/Linux/DraftSight &
May 14, 2014
EAGLE PCB 6.5.0 for Linux
EAGLE PCB 6.5.0 を CentOS 6.5 (x86_64) にインストールしようとしたところ、libssl.so.1.0.0 や libcrypto.so.1.0.0 がないと怒られる。OpenSSL のアップデートで libssl.so.1.0.1e になっていたのが問題。アップデートでは古いバージョン名のシンボリックリンクは作ってくれない模様。
Download - Get the latest Version of EAGLE PCB Design Software [cadsoftusa.com] によると 32-bit runtime environment with the libraries libssl.so.1.0.0 and libcrypto.so.1.0.0. とあるので、32-bit 版の openssl をインストールして、lib*.so.1.0.0 というシンボリックリンクを作って解決。
Download - Get the latest Version of EAGLE PCB Design Software [cadsoftusa.com] によると 32-bit runtime environment with the libraries libssl.so.1.0.0 and libcrypto.so.1.0.0. とあるので、32-bit 版の openssl をインストールして、lib*.so.1.0.0 というシンボリックリンクを作って解決。
$ ./eagle-lin-6.5.0.run /tmp/eagle-setup.3131/eagle-6.5.0/bin/eagle: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory # yum install openssl.i686 # cd /usr/lib # ln -s libssl.so.1.0.1e libssl.so.1.0.0 # ln -s libcrypto.so.1.0.1e libcrypto.so.1.0.0
April 22, 2014
eagleUp-4.4 on OS X Mavericks
Eagle から SketchUp に変換する eagleUp [wordpress.com] をセットアップ。基本的に Installation [wordpress.com] と Tutorial [wordpress.com] に従えば動いた。
環境
eagleUp のインストール
eagleUp4.4.zip をダウンロード、中のファイルやディレクトリをインストール。
Eagle で .eup をエクスポート
SketchUp でインポート
環境
- OS X 10.9.2
- SketchUp Make 14.0.4899
- Cadsoft Eagle 6.5.0
- Trimble SketchUp 2014 14.0.4899
- ImageMagick 6.8.8-9
($ brew install imagemagick でインストール)
eagleUp のインストール
eagleUp4.4.zip をダウンロード、中のファイルやディレクトリをインストール。
- Eagle ULP/eagleUp_export.ulp -> /Applications/EAGLE-6.5.0/ulp/
- models -> /Applications/EAGLE-6.5.0/
- eagleUp_import_sketchup2014.rb -> /Users/[user]/Library/Application\ Support/SketchUp\ 2014/SketchUp/Plugins/
Eagle で .eup をエクスポート
- File -> Open "demo files/demo3d.brd"
- File -> Run ULP "/Applications/EAGLE-6.5.0/ulp/eagleUp_export.ulp"
- 初回実行時は初期設定。
- 初期設定後、エクスポート。
- 生成された demo3d.eup のモデルディレクトリのパスに誤りがあったので訂正。
$ vi demo\ files/eagleUp/demo3d.eup $ diff -u demo\ files/eagleUp/demo3d.eup.orig demo\ files/eagleUp/demo3d.eup --- demo files/eagleUp/demo3d.eup.orig 2014-04-22 06:30:25.000000000 +0900 +++ demo files/eagleUp/demo3d.eup 2014-04-22 06:30:36.000000000 +0900 @@ -1,5 +1,5 @@ version;4;4;http://eagleup.wordpress.com/; -settings;/Applications/EAGLE/models/;/usr/local/bin/convert;/usr/local/bin/composite;rm; +settings;/Applications/EAGLE-6.5.0/models/;/usr/local/bin/convert;/usr/local/bin/composite;rm; color;0x98041C;0xE2012D;silver;ivory; images;/Users/a2ya/Downloads/eagleUp4.4/demo files/eagleUp/;eagleUp_demo3d;png;600;png; outline-arc;38.100000;19.050000;5.080000;0.000000;90.000000;1.600000;
SketchUp でインポート
- Preference -> Extension -> Extentions で Ruby Script Examples が有効になっていることを確認。
- Plugins -> Scale -> set units -> Units で Length unit が Decimal と Meters になっていることを確認。
- Plugins -> Import eagle Up v4.4 で demo files/eagleUp/eagleUp/demo3d.eup をインポート。
March 11, 2014
"High Performance Data Processing by Advanced Hardware" in 76th National Convention of IPSJ
情報処理学会 第76回全国大会「先進的ハードウェアによる超高性能データ処理へ向けて」を聴き、引っかかったあるいは調べたキーワード、参考文献など。
- e-trees.Japan [e-trees.jp]
- Fast Handshake Join Implementation on FPGA with Adaptive Merging Network [acm.org]
- Hardware acceleration of Hadoop MapReduce [ieee.org]
- Tilera [tilera.com]
- Supporting Low-Latency CPS using GPUs and Direct I/O Schemes [ertl.jp]
- Data Transfer Matters for GPU Computing [ertl.jp]
- Relational Joins on Graphics Processors [acm.org]
- GPUDirect [nvidia.com]
- Roofline: an insightful visual performance model for multicore architectures [acm.org]
- Computer Organization and Design, 5th Edition [elsevier.com]
- Computer Architecture: A Quantitative Approach, 5th Edition [elsevier.com]
- The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, Second edition [morganclaypool.com]
March 6, 2014
bootargs in .dts for Altera JTAG UART
Nios II Linux、Altera JTAG UART を使っている場合、sopc2dts で .sopcinfo から .dts を自動生成すると、bootargs に
sopc2dts の GUI 画面や、--board オプションで渡す boardinfo ファイルで bootargs の console=ttyAL0,... を console=ttyJ0,... に置き換えることで、early0 が閉じられた後もコンソールが表示される。
Linux の .config は make 3c120_defconfig のデフォルト値で構わなかった。
version: linux-socfpga 3.13 bb0bb0a
debug console=ttyAL0,115200
などと記載される。その場合でも make menuconfig で、Device Drivers -> Character devices -> Serial drivers -> Altera UART console support (CONFIG_SERIAL_ALTERA_UART_CONSOLE) を有効にすると、下記のように途中まではコンソールが表示される。しかし、その後ルートファイルシステムをマウントする辺りで boot console early0 が閉じられ、その後何も表示されなくなる。$ nios2-terminal Linux version 3.13.0-g434d565-dirty ... bootconsole [early0] enabled ... ... ... turn off boot console early0
sopc2dts の GUI 画面や、--board オプションで渡す boardinfo ファイルで bootargs の console=ttyAL0,... を console=ttyJ0,... に置き換えることで、early0 が閉じられた後もコンソールが表示される。
Linux の .config は make 3c120_defconfig のデフォルト値で構わなかった。
version: linux-socfpga 3.13 bb0bb0a
March 5, 2014
Linux kernel config for GPIO-less Nios II Qsys design
Nios II Linux、GPIO が無い Qsys デザインの場合、make menuconfig で Device Drivers -> GPIO Support を未選択にすると、Platform options -> Compile and link device tree into kernel image を有効にした場合でも、コンパイル時にエラーにならない。
version: linux-socfpga 3.13 bb0bb0a
version: linux-socfpga 3.13 bb0bb0a
March 4, 2014
Swap on RAM disk in CentOS 6.5 x86_64
RAM ディスク上にスワップを設定できるかの調査。
環境
swap file on ext4 @/tmp -> PASS
ちなみに、util-linux [wikipedia.org] によると、util-linux-ng は util-linux の後継として開発されたが、また util-linux という名前に戻ったらしい。
swap file on ramfs @/dev/ram0 -> FAIL
swap file on ext2 @/dev/ram0 -> PASS
swap partition @/dev/ram0 -> PASS
swap file on tmpfs -> FAIL
環境
$ uname -r 2.6.32-431.5.1.el6.x86_64 $ grep CONFIG_SWAP /usr/src/kernels/`uname -r`/.config CONFIG_SWAP=y $ grep CONFIG_BLK_DEV_RAM /usr/src/kernels/`uname -r`/.config CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=16384 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 835576 0 -1
swap file on ext4 @/tmp -> PASS
$ mount (近頃(?) /tmp は RAM 扱いではない模様) $ dd if=/dev/zero of=/tmp/swapfile bs=1M count=1 $ mkswap -f /tmp/swapfile Setting up swapspace version 1, size = 1020 KiB no label, UUID=fd6633bd-5d5c-4e6a-99fc-f8ee9741eacc $ file /tmp/swapfile /tmp/swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 255 pages $ chmod 600 /tmp/swapfile # swapon -v /tmp/swapfile swapon on /tmp/swapfile swapon: /tmp/swapfile: found swap signature: version 1, page-size 4, same byte order swapon: /tmp/swapfile: pagesize=4096, swapsize=1048576, devsize=1048576 # swapon -s Filename Type Size Used Priority /dev/dm-1 partition 835576 0 -1 /tmp/swapfile file 1016 0 -2 # swapoff /tmp/swapfileちなみに、swapon -v オプションを有効にしているとスワップファイルの permission が 600 でないと警告されたが、 600 であっても root 以外がオーナになら警告すべきだが警告されなかった。
$ swapon -V swapon: (util-linux-ng 2.17.2)stable/v2.17 の swapon.c は util-linux/util-linux.git [kernel.org] で uid を確認していないが、最新 stable/v2.24 の swapon.c util-linux/util-linux.git [kernel.org] では、uid もチェックしている模様。
ちなみに、util-linux [wikipedia.org] によると、util-linux-ng は util-linux の後継として開発されたが、また util-linux という名前に戻ったらしい。
swap file on ramfs @/dev/ram0 -> FAIL
# mkdir /mnt/ram0 # mount -t ramfs /dev/ram0 /mnt/ram0 # dd if=/dev/zero of=/mnt/ram0/swapfile bs=1M count=1 # mkswap -f /mnt/ram0/swapfile Setting up swapspace version 1, size = 1020 KiB no label, UUID=7a23a073-c7a0-4e13-abfb-a0746abe3afc mkswap: unable to relabel /mnt/ram0/swapfile to system_u:object_r:swapfile_t:s0: Operation not supported # file /mnt/ram0/swapfile /mnt/ram0/swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 255 pages # chmod 600 /mnt/ram0/swapfile # swapon -v swapfile swapon on swapfile swapon: /mnt/ram0/swapfile: found swap signature: version 1, page-size 4, same byte order swapon: /mnt/ram0/swapfile: pagesize=4096, swapsize=1048576, devsize=1048576 swapon: swapfile: swapon failed: Invalid argument # dmesg | tail -1 swapon: swapfile has holes # cp /tmp/swapfile /mnt/ram0/ # chmod 600 /mnt/ram0/swapfile # swapon -v /mnt/ram0/swapfile swapon on /mnt/ram0/swapfile swapon: /mnt/ram0/swapfile: found swap signature: version 1, page-size 4, same byte order swapon: /mnt/ram0/swapfile: pagesize=4096, swapsize=1048576, devsize=1048576 swapon: /mnt/ram0/swapfile: swapon failed: Invalid argument # dmesg | tail -2 swapon: swapfile has holes swapon: swapfile has holes
swap file on ext2 @/dev/ram0 -> PASS
# mkfs /dev/ram0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 4096 inodes, 16384 blocks 819 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=16777216 2 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 23 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # mount -t ext2 /dev/ram0 /mnt/ram0 # dd if=/dev/zero of=/mnt/ram0/swapfile bs=1M count=1 # mkswap -f /mnt/ram0/swapfile Setting up swapspace version 1, size = 1020 KiB no label, UUID=acaff689-a570-43a7-8c97-2c8c80045bbc # chmod 600 /mnt/ram0/swapfile # swapon -v /mnt/ram0/swapfile swapon on /mnt/ram0/swapfile swapon: /mnt/ram0/swapfile: found swap signature: version 1, page-size 4, same byte order swapon: /mnt/ram0/swapfile: pagesize=4096, swapsize=1048576, devsize=1048576 # swapon -s Filename Type Size Used Priority /dev/dm-1 partition 835576 0 -1 /mnt/ram0/swapfile file 1004 0 -2 # dmesg | tail -1 Adding 1004k swap on /mnt/ram0/swapfile. Priority:-2 extents:5 across:1020k # swapoff /mnt/ram0/swapfile
swap partition @/dev/ram0 -> PASS
# mkswap /dev/ram0 Setting up swapspace version 1, size = 16380 KiB no label, UUID=efac3cf3-9d79-4f68-935c-f4da81845dbb # swapon -v /dev/ram0 swapon on /dev/ram0 swapon: /dev/ram0: found swap signature: version 1, page-size 4, same byte order swapon: /dev/ram0: pagesize=4096, swapsize=16777216, devsize=16777216 # swapon -s Filename Type Size Used Priority /dev/dm-1 partition 835576 0 -1 /dev/ram0 partition 16376 0 -2 # dmesg | tail -1 Adding 16376k swap on /dev/ram0. Priority:-2 extents:1 across:16376k # swapoff
swap file on tmpfs -> FAIL
# mkdir /mnt/tmp # mount -t tmpfs tmpfs /mnt/tmp # dd if=/dev/zero of=/mnt/tmp/tmpfsswap bs=1M count=1 # mkswap -f /mnt/tmp/tmpfsswap Setting up swapspace version 1, size = 1020 KiB no label, UUID=ed44d266-47e6-40a2-8ac7-7f925d88fa6e # chmod 600 /mnt/tmp/tmpfsswap # swapon -v /mnt/tmp/tmpfsswap swapon on /mnt/tmp/tmpfsswap swapon: /mnt/tmp/tmpfsswap: found swap signature: version 1, page-size 4, same byte order swapon: /mnt/tmp/tmpfsswap: pagesize=4096, swapsize=1048576, devsize=1048576 swapon: /mnt/tmp/tmpfsswap: swapon failed: Invalid argument # dmesg | tail (no message invoked by this swapon)tmpfs 自体 swap を使うのだから swap を tmpfs 上に作れるとは思えなかったが、念のためやってみた。
March 1, 2014
Linux for Nios II (MMU) on custom design
socfpga-linux カーネルでデフォルトパラメータが設定されている Altera Embedded Systems Development Kit, Cyclone III Edition [altera.com] (3C120) ではない FPGA ボードでオリジナルの Qsys デザインを作成し、MMU を有効にした Nios II で Linux をブートした。
MMU を有効にした Nios II で Linux を動かす場合の最近の流儀はルートファイルシステムは uClinux [uclinux.org] でなく、BuildRoot [buildroot.net] に移行した模様。ビルド方法などの各種情報も Category:Linux - Altera Wiki [alterawiki.com] から Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に一本化されている。流行りは ARM 内蔵の Altera SoC [altera.com] に移ったのか、Nios II (MMU) + Linux で BuildRoot 移行後の情報はとても少ない(日本語では皆無?)。ちなみに、Altera SoC の場合は Yocto になる模様。Altera SoC Yocto Powered Embedded Linux [altera.com]
基本的に Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に従う。以下のセクションは上記文書に合わせる。
ホスト環境
CentOS 6 で OpenJDK ではエラーになったので、Oracle Java を利用。
OpenJDK (CentOS 6) でもコンパイル、実行できた。
linux-socfpga.git [rocketboards.org] レポジトリの socfpga-3.13 [rocketboards.org] head のスナップショットをダウンロード、展開。
利用バージョン: commit: bb0bb0a2a05443edef7af9f7de9fc8c3f36f01cb [rocketboards.org]
MMU を有効にした Nios II で Linux を動かす場合の最近の流儀はルートファイルシステムは uClinux [uclinux.org] でなく、BuildRoot [buildroot.net] に移行した模様。ビルド方法などの各種情報も Category:Linux - Altera Wiki [alterawiki.com] から Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に一本化されている。流行りは ARM 内蔵の Altera SoC [altera.com] に移ったのか、Nios II (MMU) + Linux で BuildRoot 移行後の情報はとても少ない(日本語では皆無?)。ちなみに、Altera SoC の場合は Yocto になる模様。Altera SoC Yocto Powered Embedded Linux [altera.com]
基本的に Nios II Linux User Manual ・ Documentation ・ RocketBoards.org [rocketboards.org] に従う。以下のセクションは上記文書に合わせる。
ホスト環境
- RedHat 5 x86_64
- Quartus II v13.1 (64bit)
1. Setting up toolchain
Sourcery CodeBench Lite Edition - Altera Nios II Processor - GNU/Linux release をダウンロード、インストール。
利用バージョン: Sourcery CodeBench Lite 2013.05-43
$ export PATH=/<your path>/CodeSourcery/Sourcery_CodeBench_Lite_for_Nios_II_GNU_Linux/bin/:$PATH $ export ARCH=nios2 $ export CROSS_COMPILE=nios2-linux-gnu-
2. Building root filesystem
git レポジトリでも良いが、Buildroot - Download [buildroot.net] より、リリース版をダウンロード、展開。
利用バージョン: buildroot-2013.11.tar.(bz2|gz)
$ wget http://www.rocketboards.org/pub/Documentation/NiosIILinuxUserManual/nios2_defconfig $ mv nios2_defconfig configs/ $ make nios2_defconfig $ make menuconfig $ make source (オフラインビルドをしたい場合) $ make
3. Building U-Boot
とりあえず U-Boot は使わず、JTAG (nios2-download) でカーネルとルートファイルシステムをメモリに展開するため、スキップ。
4. Building Nios II Linux kernel
sopc2dts [alterawiki.com] をインストールしておく。
レポジトリ: sopc-tools.git
ブランチは無いので、master の現時点での head をダウンロード、展開、make。
利用バーション: commit 83a62e0e3d8618afeb92bf15f2696fbd0804680a [rocketboards.org]
java がインストールされていなければ、インストールしておく。
# yum install java-1.7.0-oracle-devel
OpenJDK (CentOS 6) でもコンパイル、実行できた。
# yum install java-1.7.0-openjdk-devel
linux-socfpga.git [rocketboards.org] レポジトリの socfpga-3.13 [rocketboards.org] head のスナップショットをダウンロード、展開。
利用バージョン: commit: bb0bb0a2a05443edef7af9f7de9fc8c3f36f01cb [rocketboards.org]
$ make 3c120_defconfig $ java -jar ../sopc-tools-83a62e0/sopc2dts/sopc2dts.jar --board ../hoge.boardinfo --input ../hoge.sopcinfo --output arch/nios2/boot/dts/hoge.dts (.sopcinfo は Qsys で出力。.boardinfo は一度 sopc2dts --gui で起動し生成。) $ make menuconfig General setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support を有効化 General setup -> Initramfs source file(s). に "../buildroot/output/images/rootfs.cpio" など、buildroot で生成したルートファイルシステムの .cpio のパスを指定 Platform options -> Compile and link device tree into kernel image を有効化 Platform options -> Device tree source file. に "arch/nios2/boot/dts/hoge.dts" など上記 .dts のパスを指定 $ make zImage $ nios2-download -g vmlinux && nios2-terminal (nios2-download -g arch/nios2/boot/zImage の方が転送が速い)
February 10, 2014
uClinux-dist (nommu) for Nios II on custom design
自前の FPGA デザインで nommu 版の uClinux for Nios2 を動かそうとすると、Qsys ではなく .ptf を生成する SOPC Builder でないとすんなりいかない模様。Quartus II v12.x まで戻れば SOPC Builder が入っていたが、UniPHY を使うと Are there any issues with using the UniPHY EMIF toolkit with SOPC builder projects? [altera.com] という問題があるらしいので、v10.1 まで戻り(v11.0でもよさそうだが)デザインを作り、まず HAL を使った OS なしのプログラムが動くことを確認。先日の uClinux-dist (nommu) build for Nios II [blogspot.jp] と同様にカーネルとユーザランドをビルドし、JTAG で通常の ELF ファイルをロードするように nios2-download で images/zImage をダウンロード、実行(場合によりリセットも)すると uClinux がブートした。
February 7, 2014
Memory Leak Patch to Homebrew Emacs 24.3 on OS X Mavericks
OS X Mavericks 上の Emacs 24.3 で distnoted が暴走する問題、This is a patch (with commentary) that fixes a memory leak in 24.3 for OSX Mavericks (10.9) users who experience excessive resource consumption by distnoted. [github.com] のパッチを当てるという対策で落ち着いて来た模様(?)。Homebrew では他にも Backport of Emacs master's fullscreen mode to Emacs 24.3 [github.com] パッチや、--japanese オプションを付けてインストールすると File Details: /inline_patch/trunk/emacs-inline.patch (583) - macemacsjp (svn) - MacEmacs JP - SourceForge.JP [sourceforge.jp] パッチがあたる。パッチがあたるファイルが一部重複していたが、Hunk #n succeeded でなんとかパッチが適応でき、順番はあまり気にしなくてもよさそう。
(February 8, 2014 追記)
折角なので今回は Formula Cookbook [github.com] に従い Pull Request してみた。
早速取り込んでいただけた模様。
commit message の英文法が間違ってるのが恥ずかしい。オープンソース活動はスヌープされても問題ないから、英文構成サービス使うべし。
$ brew edit emacs $ brew reinstall emacs参考文献
- distnoted が原因でEmacsが落ちるのを防ぐemacs.rb [qiita.com]
- emacsやdistnotedを安定させるパッチをhomebrewで適用した [n-z.jp]
(February 8, 2014 追記)
折角なので今回は Formula Cookbook [github.com] に従い Pull Request してみた。
- emacs: add patch for memory leaks by geodenx · Pull Request #26516 · Homebrew/homebrew [github.com]
- emacs: add patch for memory leaks · 07ef188 · geodenx/homebrew [github.com]
早速取り込んでいただけた模様。
commit message の英文法が間違ってるのが恥ずかしい。オープンソース活動はスヌープされても問題ないから、英文構成サービス使うべし。
February 5, 2014
uClinux-dist (nommu) build for Nios II
『FPGA ボードで学ぶ組込みシステム開発入門 ~Altera編~』サポートページ [gihyo.jp] の SOPC Builder 版 DE0 のデザインでカーネルとユーザランドをビルドしてみた。
ホスト環境: RedHat 5 x86_64
デザインをダウンロード、展開
ビルドに必要なツールをインストール
クロスコンパイラをダウンロード、展開
uClinux-dist をビルド
Install Nios II Linux [alterawiki.com] や Downloading Linux Distribution [alterawiki.com] によると、nommu の場合は test-nios2 ブランチになっているらしい。
ホスト環境: RedHat 5 x86_64
デザインをダウンロード、展開
$ wget http://image.gihyo.co.jp/assets/files/book/2011/978-4-7741-4839-7/download/DE0.ZIP $ unzip DE0.ZIP
ビルドに必要なツールをインストール
# yum install git-all git-gui make gcc ncurses-devel bison byacc flex \ gawk gettext ccache zlib-devel gtk2-devel lzo-devel pax-utils libglade2-devel uboot-toolsInstall Nios II Linux [alterawiki.com] のパッケージ指定にタイポがあり pax-utils と libglade2-devel の間にスペースが必要
クロスコンパイラをダウンロード、展開
$ wget ftp://ftp.altera.com/outgoing/nios2-linux/nios2gcc-20080203.tar.bz2 $ tar jxvf nios2gcc-20080203.tar.bz2 $ export PATH=$PWD/opt/unios2/bin:$PATH
uClinux-dist をビルド
Install Nios II Linux [alterawiki.com] や Downloading Linux Distribution [alterawiki.com] によると、nommu の場合は test-nios2 ブランチになっているらしい。
$ wget http://sopc.et.ntust.edu.tw/pub/linux/nios2-linux-20100621.tar $ tar xvf nios2-linux-20100621.tar $ cd nios2-linux/linux-2.6 $ git checkout test-nios2 $ cd ../uClinux-dist $ git checkout test-nios2 $ make menuconfig $ make vendor_hwselect SYSPTF=$HOME/DE0/dai9sho/uclinux/uclinux_sopc.ptf $ make $ file images/zImage images/zImage: ELF 32-bit LSB executable, version 1 (embedded), statically linked, not strippedptf ファイルは絶対パスで指定する必要あり。
January 28, 2014
Porting Altera Transciever Toolkit
Transciever Toolkit [altera.com] の移植(データレート、リファレンスクロック、チャンネル数の変更)方法まとめ。
環境: RedHat 5.10 x86_64, Quartus II 13.1.1 Build 166
環境: RedHat 5.10 x86_64, Quartus II 13.1.1 Build 166
- On-chip Debugging Design Examples [altera.com]
より Transceiver Toolkit Example をダウンロードし展開。現時点では Transceiver Toolkit Examples for Stratix V GX, Arria V GX/GT, Cyclone V GX/GT and Stratix IV GX/GT devices (Quartus II software v13.0 SP1) が最新で、これを Quartus II 13.1 で開くと 13.1 用にコンバートされる。
- 各ディレクトリ以下の readme.txt にある通り、*.qar を展開した後 ip ディレクトリを展開したプロジェクトディレクトリ内に移動する。
- Quartus II でプロジェクト (*.qpf) を開き、Qsys を起動、*.qsys を開く。
- System Contents タブで xcvr_low_latency_phy を Edit...。General タブでNumber of lanes と、Data rate、Input clock frequency を編集し、Base data rate を選択。クロックとデータレートの組み合わせは、MegaWizard Plug-in Manager の ALTGX のウィザードで探った。
- System Contents タブで pllclk を Edit...。Clock frequency を編集する。
- System Console タブで元々あったあるレーン用の generater_*, timing_adapter_*, checker_*, timing_adapter_* をそれぞれ右クリック Duplicate し、Connection で元々あったレーンを参考に同様の配線を行う。
- Qsys の Generate メニューより Generate... を選択し、Generation ウィンドウで必要なら各種パラメータを設定し、Generate。
- Quartus II に戻り、Qsys で生成したモジュールを含むトップモジュール(*.v など) とクロックのタイミング制約が書かれている *.sdc を編集し、ピンアサインメント変更など必要があれば行い、Processing メニューから Start Compilation を実行。*.sof ファイルが生成される。
January 22, 2014
Emacs Mew Biff with MacOS X Notification Center
Google Notifier [google.com] がサンセットするらしい。以前は Mew の Biff [mew.org] 機能で新着メールを確認していたが、最近は Emacs が常に最前面に表示されているような生活でもないので、Mew から terminal-notifier [github.com] 経由で、MacOS X の Noficitaion Center (通知センター)に新着メールの到着を表示するようにした。
Homebrew で terminal-notifier をインストール。
Mew 6.5, Emacs 24.3.1, terminal-notifier 1.5.1, OS X 10.9.1 で動作確認。
ちなみに、最近の Emacs は Desktop Notification [gnu.org] がサポートされているらしいが、freedesktop.org Desktop Notifications Specification のみの模様。
(January 23, 2014 追記; Gist Revision 2)
既に新着メールが1個以上あるときに更に新しいメールが来ても通知されないのは、Emacs のモードラインが常に見える状況ならよいかもしれないが、Notification Center の使い方としてはやはり不便なので、若干変更し Gist に置いた。
(January 30, 2014 追記; Gist Revision 3)
新着メールを Mew で取り込みモードラインの "Mail(n)" の表示を消す mew-buff-clear が呼び出されるときに、Notification Center の通知も消すように変更。
Homebrew で terminal-notifier をインストール。
$ brew install terminal-notifier下記を .mew.el に追記し、mew-biff-bark をオーバーライト。
(defun mew-biff-bark (n) "Overwrite mew-biff-bark to invoke terminal-notifier to show a biff alert in MacOS X Notification Center" (if (= n 0) (setq mew-biff-string nil) (if (and mew-use-biff-bell (eq mew-biff-string nil)) (call-process "/bin/bash" nil nil nil "-c" (format "\/usr\/local\/bin\/terminal-notifier -message Mail\\\(%d\\\) -title Mew -sound Default -activate org\.gnu\.Emacs -sender org\.gnu\.Emacs -group Emacs.mew -remove Emacs.mew" n))) (setq mew-biff-string (format "Mail(%d)" n))))オリジナルの mew-biff-bark の beep を terminal-notifier の呼び出しに置き換えたので、既に新着メールが1個以上あるときに更に新しいメールが来ても、通知はされない(五月蝿いからそういう仕様になってる!?)。
Mew 6.5, Emacs 24.3.1, terminal-notifier 1.5.1, OS X 10.9.1 で動作確認。
ちなみに、最近の Emacs は Desktop Notification [gnu.org] がサポートされているらしいが、freedesktop.org Desktop Notifications Specification のみの模様。
(January 23, 2014 追記; Gist Revision 2)
既に新着メールが1個以上あるときに更に新しいメールが来ても通知されないのは、Emacs のモードラインが常に見える状況ならよいかもしれないが、Notification Center の使い方としてはやはり不便なので、若干変更し Gist に置いた。
(January 30, 2014 追記; Gist Revision 3)
新着メールを Mew で取り込みモードラインの "Mail(n)" の表示を消す mew-buff-clear が呼び出されるときに、Notification Center の通知も消すように変更。
January 20, 2014
January 18, 2014
bookmarklet "ehon2calil"
絵本ナビ [ehonnavi.net] で表示している本をカーリル [calil.jp] で検索するブックマークレットを作った。
使い方
Safari 7.0.1 及び Google Chrome 32.0.1700.77 で動作確認。
使い方
- ehon2calil をブックマークバーにドラッグ
Bookmarkitfy.it [bookmarkify.it] からも登録可(簡単なスクリーンショット解説付き)
- 絵本ナビの各絵本の紹介ページを表示
例えば、とかいのネズミといなかのネズミ [ehonnavi.net] など
- 1 で登録したしたブックマークをクリック
- 少し待つと、絵本ナビで表示していた絵本をカーリルで検索した結果が表示される
Safari 7.0.1 及び Google Chrome 32.0.1700.77 で動作確認。
January 11, 2014
Qsys 13.1.1 Build 166 (64 bit)
IP (Avalon ALTPLL v13.1) を追加しようとしたところ、追加しているような画面遷移になりながら結局エラーも出ずに追加されない現象に遭遇。.sopc から変換した .qsys だけでなく、そのバージョンの Qsys で新規に .qsys を作成しても追加できない。
Design Examples [altera.com] の中から比較的新しい Qsys Compliant のデザインを探し、Nios II Ethernet Standard Design Example [altera.com] の niosii-ethernet-standard-4sgx230.zip を Qsys で開いてみると、同じ IP を追加できた。
その後、先ほど IP を追加できなかったデザイン .qsys を開き、同じ IP (Avalon ALTPLL) を追加してみると、今度は追加された。謎。
Device family: Stratix IV
Design Examples [altera.com] の中から比較的新しい Qsys Compliant のデザインを探し、Nios II Ethernet Standard Design Example [altera.com] の niosii-ethernet-standard-4sgx230.zip を Qsys で開いてみると、同じ IP を追加できた。
その後、先ほど IP を追加できなかったデザイン .qsys を開き、同じ IP (Avalon ALTPLL) を追加してみると、今度は追加された。謎。
Device family: Stratix IV
January 10, 2014
Fast Nios II Hardware Design Example
Fast Nios II Hardware Design Example [altera.com] を試してみようとしたが、最新の Quartus II v13.1 では Stratix II が現時点ではサポートされていない。
プロジェクトファイル .qpf を見ると v7.2 で作られたらしい。
CentOS 6.5 x86_64 に v7.2 SP3 をインストールしたものの、プロジェクトを開いたり option ウィンドウを開くと、Segment Violation で落ちる。
KDE は利用していないので関係なさそうだが、念のため Why does the Quartus II software version 7.2 main GUI window disappear or fail to open when running on Linux with a KDE desktop? [altera.com] のパッチを当てるが治らず。
そんな中、Device Support List [altera.com] を発見。直近の 13.0sp1 で Stratix II もサポートされていた。最新ツールは古いデバイスのサポートが後回しになっているだけで、忘れ去れているわけではない模様。
Quartus II v13.0 SP0 をインストールし .sopc を開いたが、SOPC Builder は無くなっているので、Qsys で開いて変換。無事開けた。
結局、v13.1 でも、Stratix II はサポートされていないが Qsys で .sopc を開くと、サポードデバイスへのリプレースを促され、デバイス依存の PLL の再設定をする程度で Stratix IV で Hello World が動いた。
プロジェクトファイル .qpf を見ると v7.2 で作られたらしい。
CentOS 6.5 x86_64 に v7.2 SP3 をインストールしたものの、プロジェクトを開いたり option ウィンドウを開くと、Segment Violation で落ちる。
Opening "option" window in Tool menu causes the following error: *** Fatal Error: Segment Violation at 0x28 Module: quartus 0xFDACD : FontDrawCharset::bInit(tagLOGFONTA*) + 0x22D (gdiuser32) 0xFF0EF : fontcache::GetNewFontDraw(tagLOGFONTA*, tagXFORM*, int, unsigned long, unsigned long) + 0x21F (gdiuser32) 0xFF387 : fontcache::FindOrCreateFontDraw(tagXFORM*, CW_DC*, tagLOGFONTA*) + 0x197 (gdiuser32) ...調べてみると、v7.2 当時に新しめの Linux ディストリビューションで動かそうとしていた人たちは同様のエラーに苦しんで居たようだ。そういえば当時の Quartus II は MainWin を使っていたので、色々苦しんだのを思いだしてきた…。
KDE は利用していないので関係なさそうだが、念のため Why does the Quartus II software version 7.2 main GUI window disappear or fail to open when running on Linux with a KDE desktop? [altera.com] のパッチを当てるが治らず。
そんな中、Device Support List [altera.com] を発見。直近の 13.0sp1 で Stratix II もサポートされていた。最新ツールは古いデバイスのサポートが後回しになっているだけで、忘れ去れているわけではない模様。
Quartus II v13.0 SP0 をインストールし .sopc を開いたが、SOPC Builder は無くなっているので、Qsys で開いて変換。無事開けた。
結局、v13.1 でも、Stratix II はサポートされていないが Qsys で .sopc を開くと、サポードデバイスへのリプレースを促され、デバイス依存の PLL の再設定をする程度で Stratix IV で Hello World が動いた。
January 9, 2014
VBoxService --timesync-set-threshold
VirtualBox の VM の時計のずれを修正する方法。
正確には、直接修正するコマンドオプションではなく、ホストとのズレの閾値設定なのだが、コマンド実行時に閾値以上ずれていると結果的にすぐ同期された。
正確には、直接修正するコマンドオプションではなく、ホストとのズレの閾値設定なのだが、コマンド実行時に閾値以上ずれていると結果的にすぐ同期された。
# VBoxService --help ... --timesync-set-threshold The absolute drift threshold, given as milliseconds, where to start setting the time instead of trying to adjust it. The default is 20 min. ... # VBoxService --timesync-set-threshold 60000 # VBoxService --version 4.3.6r91406参考文献
- Oracle VM VirtualBox User Manual - 9.14.3. Tuning the Guest Additions time synchronization parameters [virtualbox.org]
January 8, 2014
Synthesis options for SignalTap II in Altera Quartus II
SignalTap II などで利用するため fan-out のないレジスタや重複したレジスタを最適化で消されないために下記のようにすると便利らしい(Verilog の例)。
reg hoge /* synthesys syn_noprune syn_preserve = 1 */;参考文献
- Quartus II Handbook Version 13.1 - Volume 1: Design and Synthesis - Chapter 16: Quartus II Integrated Synthesis [altera.com] - Quartus II Synthesis Options - Preserve Registers 及び Noprune Synthesis Attribute/Preserve Fan-out Free Register Node
January 7, 2014
Altera Quartus II 13.1 Install Memo
CentOS 6.5 x86_64 (netinstall 版) にインストールするときは、Altera Software Installation and Licensing Manual (PDF) [altera.co.jp] に書かれている通り、compat-libstdc++-33.i686 など多数の 32 bit ライブラリのインストールが必要だった。
手元の RedHat 5.10 x86_64 では必要な 32 bit ライブラリが予めインストールされているようで、インストール不要だった。
Stand-Alone Software の Quartus II Programmer and SignalTap II [altera.com] はインストール後に $QUARTUS_64BIT や $QUARTUS_ROOTDIR など下手に環境変数を設定すると起動しなかった(CentOS 6.4 x86_64)。
CentOS 6.4 x86_64 では USB-Bluster Driver for Linux [altera.com] や USB-Bluster Driver for Linux [altera.co.jp] に書かれている udev のルールファイル(/etc/udev/rules.d/51-usbblaster.rule)のフォーマットは古く、
手元の RedHat 5.10 x86_64 では必要な 32 bit ライブラリが予めインストールされているようで、インストール不要だった。
Stand-Alone Software の Quartus II Programmer and SignalTap II [altera.com] はインストール後に $QUARTUS_64BIT や $QUARTUS_ROOTDIR など下手に環境変数を設定すると起動しなかった(CentOS 6.4 x86_64)。
CentOS 6.4 x86_64 では USB-Bluster Driver for Linux [altera.com] や USB-Bluster Driver for Linux [altera.co.jp] に書かれている udev のルールファイル(/etc/udev/rules.d/51-usbblaster.rule)のフォーマットは古く、
- Using Altera's USB-Blaster on Debian Linux [toronto.edu]
- Unable to lock chain (Insufficient port permissions) [stackoverflow.com]
- Altera Design Software [archlinux.org]
- Setting up the Altera FPGA environment on a Mac [blogspot.jp]
SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", RUN+="/bin/chmod 0666 %c"と書き直すと、(ルートでなく一般ユーザでも)JTAG ケーブルを利用できるようになった。
January 5, 2014
Cocoa Emacs 24.3 - locale
先日 Cocoa Emacs 24.3 を homebrew で --japanese オプションを有効にしてインストールしたが、toggle-input-method (C-\) の動作がおかしかった(emacs-inline.patch: r583)。具体的には、C-\ ではことえりが切り替わらず Emacs に付属の Quail に切り替わってしまい、 Cmd + space (USキーボードなので) でことえりを切り替える必要があった。
Cocoa Emacs 23のIME patchでPreferred Languagesを参照させる [tempus.org] によると、System の環境が日本語になっていない場合は、
Cocoa Emacs 23のIME patchでPreferred Languagesを参照させる [tempus.org] によると、System の環境が日本語になっていない場合は、
defaults write org.gnu.Emacs AppleLanguages "(ja, en)"などが必要だったらしい。この情報になかなかたどり着けなかったのだが、システム環境が日本語になっていない人は少ないのだろうか。Emacs のときのみアップルメニューが日本語になり、あまり見ないので構わないがなんだか気持ち悪い。
Subscribe to:
Posts (Atom)