SheevaPlugのカーネルコンパイルと置き換え

SheevaPlugのカーネルの置き換えに関する記録:

まず以下の PDF に書かれている方法に従って gcc をインストールする。

SheevaPlug Development Kit README-Rev1.2.pdf

Marvell から提供されているクロスコンパイラは CentOS5 (i386) で動作した。

カーネルのコンパイル方法については SheevaPlug_DocumentationPackage.zip の中に入っている以下の PDF に書かれている。

SheevaPlug Development Kit – Configuring the kernel with LSP for KW_A0_based device-Rev1.2.pdf

make menuconfig で必要そうなものをモジュールとして追加した。
0011_nand_4bit_ecc_support.patch を適用した場合は u-boot に以下の設定をすることとされているが、設定すると起動時に実行する nand コマンドでエラーが発生してしまうため設定しないことにした。

Marvell>> setenv nandEcc 4
Marvell>> saveenv

出荷時の設定は 1bit:

Marvell>> printenv nandEcc
nandEcc=1bit

u-boot のプロンプトに入るには起動した直後にシリアルコンソールに何かキーを入力すればよい。
u-boot のプロンプトで使えるコマンドは以下の通り。

Marvell>> help
? – alias for ‘help’
base – print or set address offset
boot – boot default, i.e., run ‘bootcmd’
bootd – boot default, i.e., run ‘bootcmd’
bootext2 dev:boot_part1,boot_part2 addr boot_image linux_dev_name
bootm – boot application image from memory
bootp – boot image via network using BootP/TFTP protocol
bubt – Burn an image on the Boot Nand Flash.
chpart – change active partition
cmp – memory compare
cmpm – Compare Memory
cp – memory copy
cpumap – Display CPU memory mapping settings.
crc32 – checksum calculation
date – get/set/reset date & time
dclk – Display the MV device CLKs.
dhcp – invoke DHCP client to obtain IP/boot params
diskboot- boot from IDE device
echo – echo args to console
eeprom – EEPROM sub-system
erase – erase FLASH memory
ext2load- load binary file from a Ext2 filesystem
ext2ls – list files in a directory (default /)
fatinfo – print information about filesystem
fatload – load binary file from a dos filesystem
fatls – list files in a directory (default /)
fi – Find value in the memory.
flinfo – print FLASH memory information
fsinfo – print information about filesystems
fsload – load binary file from a filesystem image
g – start application at cached address ‘addr'(default addr 0x40000)
go – start application at address ‘addr’
help – print online help
icrc32 – checksum calculation
ide – IDE sub-system
iloop – infinite loop on address range
imd – i2c memory display
imm[.b, .s, .w, .l] – i2c memory modify (auto-incrementing)
imw – memory write (fill)
inm – memory modify (constant address)
iprobe – probe to discover valid I2C chip addresses
ir – reading and changing MV internal register values.
loop – infinite loop on address range
ls – list files in a directory (default /)
map – Diasplay address decode windows
md – memory display
me – PCI master enable
mm – memory modify (auto-incrementing)
mp – map PCI BAR
mtdparts- define flash/nand partitions
mtest – simple RAM test
mv_diag – perform board diagnostics
mv_diag
– display all available tests
mv_diag all
– run all available tests
mv_diag test1
– run specified test
mw – memory write (fill)
nand – NAND sub-system
nboot – boot from NAND device
nbubt – Burn a boot loader image on the Boot Nand Flash.
nm – memory modify (constant address)
pci – list and access PCI Configuration Space
phyRead – Read PCI-E Phy register
pciePhyWrite – Write PCI-E Phy register
phyRead – Read Phy register
phyWrite – Write Phy register
ping – send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect – enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
rcvr – Satrt recovery process (Distress Beacon with TFTP server)
reset – Perform RESET of the CPU
resetenv – Return all environment variable to default.
run – run commands in an environment variable
saveenv – save environment variables to persistent storage
se – PCI Slave enable
setenv – set environment variables
sflash – read, write or erase the external SPI Flash.
sg – scanning the PHYs status
sp – Scan PCI bus.
tftpboot- boot image via network using TFTP protocol
usb – USB sub-system
usbboot – boot from USB device
version – print monitor version

カーネルの置き換え方法 (ファイルシステムの書き換え方法も) については以下の PDF に書かれている。

SheevaPlug Development Kit – Writing Jaunty Filesystem on the NAND flash-Rev1.2.pdf

SheevaPlug を NFS から boot させるために NFS サーバを用意する。
SheevaPlug_Host_SWsupportPackageLinuxHost.zip に入っている rootfs を /home に展開して NFS export しておく。(Rev1.2 の rootfs の拡張子は .bz2 となっているが gzip 形式だったので注意)
また /tftpboot ディレクトリに uImage.sheeva.050209 (再コンパイルしたカーネルイメージ) を置き tftp でアクセスできるようにしておく。

NFS boot のための設定:
Marvell>> set ipaddr aaa.bbb.ccc.ddd
Marvell>> set serverip aaa.bbb.ccc.eee
Marvell>> set rootpath ‘/home/rootfsv1.0’
Marvell>> set image_name uImage.sheeva.050209
Marvell>> set console ‘console=ttyS0,115200 mtdparts=nand_mtd:0x100000@0x000000(u-boot),0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)rw’
Marvell>> set bootargs_root ‘root=/dev/nfs rw’
Marvell>> set bootcmd ‘tftpboot 0x2000000 $(image_name);setenv bootargs $(console) $(bootargs_root) nfsroot=$(serverip):$(rootpath) ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvNetConfig) $(mvPhoneConfig); bootm 0x2000000’
Marvell>> saveenv
Marvell>> reset

-sh-3.2# cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00020000 “u-boot”
mtd1: 00400000 00020000 “uImage”
mtd2: 1fb00000 00020000 “rootfs”

ここではカーネルの置き換えだけ行う。

-sh-3.2# flash_eraseall /dev/mtd1
Erasing 128 Kibyte @ 1e0000 — 93 % complete.
-sh-3.2# nandwrite -p /dev/mtd1 uImage.sheeva.050209
Writing data to block 0
Writing data to block 20000
Writing data to block 40000
Writing data to block 60000
Writing data to block 80000
Writing data to block a0000
Writing data to block c0000
Writing data to block e0000
Writing data to block 100000
Writing data to block 120000
Writing data to block 140000
Writing data to block 160000
Writing data to block 180000
Writing data to block 1a0000
Writing data to block 1c0000
Writing data to block 1e0000

ルートファイルシステムを見たい場合には以下のようにする。

-sh-3.2# mount -t jffs2 /dev/mtdblock2 /mnt1/

リブートして u-boot のプロンプトに入る。NAND から起動するようにするため以下を入力する:

Marvell>> set console ‘console=ttyS0,115200’
Marvell>> set bootargs_root ‘root=/dev/mtdblock2 ro’
Marvell>> set bootargs ‘console=ttyS0,115200 mtdparts=nand_mtd:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1 rw’
Marvell>> set bootcmd ‘nand read.e 0x800000 0x100000 0x400000; bootm 0x800000’
Marvell>> saveenv
Marvell>> reset

これで置き換えたカーネルで立ち上がってくる。
コンパイルしたときに作成されたモジュールを /lib/modules/ の下にコピーしておく。

広告

タグ: ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。