CEV-RZ/A1Lで遊ぶ

update 2013-11-07 y.ebihara
update 2014-3-07 y.ebihara

本ページの位置

http://www.si-linux.co.jp
→技術情報
  →組み込みLinux技術情報
    →CEV-RZ/A1L で遊ぶ

CEV-RZ/A1L とは

CQ出版社Interface誌で企画されているルネサスエレクトロニクス社のARM CPUボード

CPURenesas RZ/A1L Cortex-A9 384MHz
MEMORYSDRAM 32Mバイト(16bit bus)

CQ出版社さん

Computex社さん

お約束とお願い

CEV-RZ/A1Lはシリコンリナックス社製品ではありませんので、弊社にお問い合わせをいただいても返信することができません。このページの内容も未保障です。メモ程度であることを了承ください。

使いやすくする

リセットボタンを付ける

RESETボタンが無いのでCPUが暴走したとき電源を切るしかない。

出荷時は電源はUSB-miniBから取っているのでUSBケーブルを抜くことになる。するとTeraTermのシリアルポートがクローズするので毎回TeraTermを閉じて開きなおす必要がある。はっきり言って面倒だし、リセット解除直後のメッセージをTeraTermで見ることもできない。

幸い回路図が添付されていたので改造は容易だった。リセットICの入力にスイッチを付ける。

IMG_8872.jpg

U4, 2-4番ピン間にスイッチを付ける

電源ケーブル

IMG_8871.jpg

電源ケーブルくらい付けようか。PCNコネクタは2.54mmピッチだったので、どこの誤家庭にもある一般的なXHコネクタ等がはんだ付けできる。

u-bootのversion確認

u-bootが古い時は「CEV-RZ_A1L U-boot 書き換え方法.pdf」に従って新しくする。#a7f7ea7f

開発PC

私はdebian wheezy(64bit, amd64)を使っている。

クロスコンパイラ

私がビルドしたものはここ(無保証)

  • /etc/apt/sources.list に1行追加する
deb [arch=amd64] http://download.si-linux.co.jp/debian-armhf/wheezy-armhf/toolchain-amd64/ ./
# apt-get update
# apt-get install gcc-4.7-arm-linux-gnueabihf
# apt-get install g++-4.7-arm-linux-gnueabihf

computexさん提供のrootfsのインストール

computexさんの手順書に順じてやってみる。

  1. rootfsをダウンロードする
    開発PCにて
    # wget http://www.computex.co.jp/ftproot/pub/cev/rza1l/V2/rootfs-cevrza1l-linux-20140116.tar.gz
  2. USBメモリの第一パーティションを ext2 でフォーマットする。注意 ext3, ext4は不可です。ext2限定。
    開発PCにて。USBメモリが /dev/sdb になる場合
    # cfdisk /dev/sdb         sdb1を作る。サイズは適当(64Mでも大丈夫)
    # mkfs.ext2 /dev/sdb1 
  3. マウントしてrootfs-cevrza1l-linux-20140116.tar.gz を展開する
    開発PCにて
    # mount /dev/sdb1 /media/
    # cd /media/
    # tar xzvf rootfs-cevrza1l-linux-20140116.tar.gz
    rootfs-cevrza1l-linux-20140116/
    rootfs-cevrza1l-linux-20140116/proc/
    rootfs-cevrza1l-linux-20140116/usr/
    rootfs-cevrza1l-linux-20140116/usr/lib/
    rootfs-cevrza1l-linux-20140116/usr/lib/libintl.so.8.1.2
    rootfs-cevrza1l-linux-20140116/usr/lib/libnl-route-3.so
    以下略
    # cd rootfs-cevrza1l-linux-20140116/
    # mv * ../
    # cd ..
    # rmdir rootfs-cevrza1l-linux-20140116/
    # cd /
    # umount /media
  4. USBメモリを差し込んでubootから起動する
    ターゲットボードにて
    =>run usbboot
  5. rootユーザ/パスワード無しでログインできる
  6. 起動パラメータの確認
    # cat /proc/cmdline
    console=ttySC3,115200 root=/dev/sda1 rw rootdelay=3
  7. kernelバージョンの確認
    # uname -a
    Linux cevrza1l 3.8.13-CEVRZA1L-V2.00.00 #1 PREEMPT Thu Jan 16 10:55:06 JST 2014 armv7l GNU/Linux

kernel

ソース

Computexさんから CEV_Linux_SDK_V2.00.01.tgz をダウンロードする。これを展開するとカーネルソースがある。

$ mkdir ~/work
$ cd work
$ wget http://www.computex.co.jp/ftproot/pub/cev/rza1l/V2/CEV_Linux_SDK_V2.00.01.tgz
$ tar xf CEV_Linux_SDK_V2.00.01.tgz
$ cd CEV_Linux_SDK_V2.00.01
$ tar xf buildroot-2013.08.1-cevrza1l-20140116-1.tgz

ここからの相対パスで

  • カーネルソース
    dl/linux-3.8.13.tar.bz2
  • パッチ
    buildroot-2013.08.1-cevrza1l-20140116-1/board/cev/cevrza1l/patches/linux-3.8.13-0001-RZLSP-V1.0.1-kernel.patch
    buildroot-2013.08.1-cevrza1l-20140116-1/board/cev/cevrza1l/patches/linux-3.8.13-0002-CEVRZA1L-V2.000.00.patch
  • config
    buildroot-2013.08.1-cevrza1l-20140116-1/board/cev/cevrza1l/linux-3.8.13-cevrza1l_defconfig

カーネルをビルドする作業ディレクトリを作り

$ cd ~/work
$ mkdir kernel
$ cd kernel

上記4つのファイル(ソース、パッチ、config)を kernel をビルドする作業ディレクトリにコピーしておく

$ ls
linux-3.8.13-0001-RZLSP-V1.0.1-kernel.patch  linux-3.8.13-cevrza1l_defconfig
linux-3.8.13-0002-CEVRZA1L-V2.000.00.patch   linux-3.8.13.tar.bz2

こんな感じだとする。

$ tar xf linux-3.8.13.tar.bz2
$ cd linux-3.8.13
$ patch -p1 < ../linux-3.8.13-0001-RZLSP-V1.0.1-kernel.patch
$ patch -p1 < ../linux-3.8.13-0002-CEVRZA1L-V2.000.00.patch
$ cp ../linux-3.8.13-cevrza1l_defconfig arch/arm/configs/cevrza1l_defconfig

CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm を毎回指定するのは面倒だし忘れるので Makefileを修正して書きこんでしまう。

$ vi Makefile
ARCH            ?= arm
CROSS_COMPILE   ?= arm-linux-gnueabihf-

config

$ make cevrza1l_defconfig
$ make menuconfig

ext2しか使えないのはあまりにもアレなので ext3 や ext4, FAT を有効にしておく。他はお好みで。

File systems  --->
  <*> Ext3 journalling file system support
  <*> The Extended 4 (ext4) filesystem
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support

ビルド

$ make uImage modules -j12
...中略...
Image Name:   Linux-3.8.13-CEVRZA1L-V2.00.00
Created:      Thu Mar  6 17:17:28 2014
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2691232 Bytes = 2628.16 kB = 2.57 MB
Load Address: 0c008000
Entry Point:  0c008000
  Image arch/arm/boot/uImage is ready

arch/arm/boot/uImage がカーネルイメージ。uImage を rootfsを構築したUSBメモリ(ext2)の /boot/uImage とさしかえる。

debianの導入

開発PCにて次の2つのパーティションのある USBメモリを作る(開発PCから見てusbメモリが/dev/sdb の場合)。

この例では4GバイトのUSBメモリを使った。
第一パーティションはカーネル uImage を置く場所。Computexさんの手順書ではext2としていたが私の好みでFATとした。
FATにした場合

  • USBメモリをWindowsPCに刺した場合にフォーマットしますか?とか聞かない。
  • uImageのビルドに失敗した時などWindowsPCでuImageの差し替えが容易。
  • ただしsymlinkが使えない。
   Name        Flags      Part Type  FS Type          [Label]        Size (MB)
------------------------------------------------------------------------------
   sdb1                    Primary   vfat                               128.00
   sdb2                    Primary   ext3                              3500.17
   sdb3                    Primary   swap                               299.86
                           Pri/Log   Free Space                          99.58*

第一パーティション(/dev/sdb1 FAT16 ,id=0x06) は /boot として uImageを置く。
第二パーティション(/dev/sdb2 ext3)は / (rootfs)

/dev/sdb1  /boot    (FAT)
               `-- uImage
/dev/sdb2  /        (ext3:root)

フォーマット

開発PCにて
# mkdosfs -F16 /dev/sdb1
# mkfs.ext3    /dev/sdb2
# mkswap       /dev/sdb3

第一パーティションにカーネル(uImage)を置く

# mount /dev/sdb1 /media
# cp /上記で作った/uImage /media/
# umount /media

第二パーティションにwheezyのベースを展開する

# mount /dev/sdb2 /media
# cd /media
# tar xzf /どこかのディレクトリにある/wheezy-armhf-base.tgz

設定ファイルを少し修正

  • /media/etc/inittab
    1:2345:respawn:/sbin/getty 115200 ttySC3
    # 2:23:respawn:/sbin/getty 38400 tty2
    # 3:23:respawn:/sbin/getty 38400 tty3
    # 4:23:respawn:/sbin/getty 38400 tty4
    # 5:23:respawn:/sbin/getty 38400 tty5
    # 6:23:respawn:/sbin/getty 38400 tty6
# cd /
# umount /media

起動する

=> setenv bootargs console=ttySC3,115200 root=/dev/sda2 ro rootdelay=2 rootwait
=> usb start;fatload usb 0 c000000 /uImage;bootm c000000

rootでloginできなかったら起動パラメータ(bootargs)に init=/bin/bash を追加するなどしてレスキュー起動し、

# mount -o remount,rw /dev/sda2 /
# passwd

でパスワードを仕掛ける。

以後debianの設定はこちらと同じなので参考に BBB_debootstrap_wheezy

  • /etc/fstab
/dev/sda1       /boot   vfat    ro      0 0
/dev/sda2       /       ext3    noatime,errors=remount-ro       0       0
/dev/sda3       none    swap    defaults        0 0
  • /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
  • /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.jp.debian.org/debian wheezy main contrib non-free

deb http://ftp.jp.debian.org/debian/ wheezy-updates main
deb-src http://ftp.jp.debian.org/debian/ wheezy-updates main

debianで遊ぶ

# apt-get update
# apt-get install vim nfs-common build-essential ssh ncftp ftpd telnet telnetd ntpdate dosfstools

とするなど。。。ただしむっちゃ遅い。30分以上かかる

ubootで自動起動の設定

うまいこと起動することが確認できたら

=> setenv bootargs console=ttySC3,115200 root=/dev/sda2 ro rootdelay=2 rootwait
=> setenv bootcmd 'usb start;fatload usb 0 c000000 /uImage;bootm c000000'
=> save

microSD

sdpic2.jpg sdpic1.jpg

部品屋で売ってたので買ってきた。手ハンダした。

U14 1-5pin ショート
L9 短絡
C45 10uF(気持ちの問題)
R49 10K

/dev/mmcblk0 として認識した。デフォルトの configでカーネルは対応している。
ただし u-bootは mmc 未対応なので mmcからカーネルを起動することはできない。(残念)
uImage のロードのみ usbの第一パーティションを利用し、カーネルが上がったあとの rootfs=/dev/mmcblk0p2 はok. USBメモリを抜いてしまっても大丈夫。

=> setenv bootargs console=ttySC3,115200 root=/dev/mmcblk0p2 ro rootdelay=2 rootwait
=> usb start;fatload usb 0 c000000 /uImage;bootm c000000

速度はUSBメモリと大差ない。。。気がしたけど測ってみると microSDの方が早い。

# hdparm -t /dev/sda
/dev/sda:
 Timing buffered disk reads:  14 MB in  3.16 seconds =   4.42 MB/sec
# hdparm -t /dev/sda
/dev/sda:
 Timing buffered disk reads:  14 MB in  3.25 seconds =   4.31 MB/sec
 
# hdparm -t /dev/mmcblk0
/dev/mmcblk0:
 Timing buffered disk reads:  26 MB in  3.24 seconds =   8.02 MB/sec
# hdparm -t /dev/mmcblk0
/dev/mmcblk0:
 Timing buffered disk reads:  24 MB in  3.00 seconds =   8.00 MB/sec

RZ/A1L処理能力の測定

SmartSolution

関連

外部リンク

Computexさん提供のgoogleユーザフォーラム

U-bootの書き換え方法
CEV-RZ_A1L U-boot 書き換え方法.pdf

内部リンク

自動リンク

以下はメモ

=> printenv
baudrate=115200
bootargs=console=ttySC3,115200 root=/dev/sda1 rw rootdelay=3
bootdelay=3
ethact=sh_eth
gatewayip=192.168.0.1
ipaddr=192.168.0.xx
netmask=255.255.255.0
r=bootm c000000
serverip=192.168.0.1
stderr=serial
stdin=serial
stdout=serial
usbboot=usb start;ext2load usb 0 c000000 /boot/uImage;bootm c000000