以前、Fedora ARMというのを見かけましたが(FC6かFC8かな?)、その時はスルーしてしまいました。ところが最近、FC10が出ているのを知ってLS-GLに載せてみることに。取り合えずLS-GLでFedoraが動くもんなのか?を試してみたいだけなので、細かいところは適当ですw
前に使っていたCentOS 4のクロスコンパイル環境がHDDクラッシュで壊れてしまい、また一から作り直すのが面倒だと思っていたらFedora ARMから配布されていたのでそれを使うことにしました。現在、当方はCentOS 5.3 (64bit)を使っているのですが、64bitでも大丈夫そうです。
ftp.linux.org.ukの/pub/linux/arm/fedora/crossからcross.repoを拾って来てyumで落とします。yum設定の詳しい手順はここや00README.txtにしっかり書いてあるので省略。同時に/pub/linux/arm/fedora/rootfsからrootfs-f10.tar.bz2もダウンします。これはFedora ARMの最小限構成のrootfsです。
いきなり全部を入れ替えるのは無謀ということで、母艦(ホスト)環境でターゲット用の仮環境を整えます。
Intel X86用のFC10 kernelソースSRPMを拾って来てバージョンを揃えることにしました。大量のpatchが入っていますが、まぁ、実験(面倒w)なんで、そのまま使うことに。素直にkernel.orgから2.6.27のソースを拾って来た方が早かったかもしれません。手順は以前のnico版kernelのビルドとほとんど一緒なので省略(但しCROSS_COMPILEは"/usr/bin/armv5tel-redhat-linux-gnueabi-"となります)。
さすがに現在稼動させているHDD上での実験は怖すぎるので、実験用のHDDを使うことにします。実験用のHDDは通常のLS-GLの環境のコピーです(が、過去にglibcとか勝手に入れ替え実験しているので正確には同じものではありません・・・)。上記でビルドしたkernelとnico版の時に細工したinitrd.buffalo、/lib/modules/以下のモジュールを/dev/sda1に入れ、/dev/sda6の空いている適当な場所にrootfs-f10.tar.bz2を展開しておきます(ログイン後ここにchrootする)。
実験用のHDDをLS-GLに繋いで起動します。新しいkernelから旧環境を利用して立ち上げたら、ログイン後に先のrootfs-f10.tar.bz2を展開したディレクトリにchrootします。これでyumが使えるようになります。取り合えずvim、tar、gzip、bzip2、dhclient、gcc、makeなど入れます。
まずはLS-GLのマイコンをFC10環境で制御したいのでmizutaniさんのサイトよりmiconapl互換コマンドのソースを頂いて来てビルドします。その他の作業もこのままLS-GL上でやっても構わないのですが、残りはHDDを母艦に繋いで作業しました。
先にchrootしていた仮rootfsをメインのrootfsとして起動出来る環境を整えます。元々使っていたHDDは温存し、余っていた320GBのHDD(以降「新HDD」と呼称w)に新たに環境を作ることにしました。先に実験用として仮環境を立ち上げたHDD(以降「旧HDD」と呼称w)から必要なものを吸い上げます。
まずは新HDDのパーティションを切り、フォーマットします。rootfsが入る/dev/sda2は取り合えず標準の倍程確保しておきました。kernelやinitrdを入れるsda1やswap領域は同じサイズ、残りは全て/dev/sda6に割り振りました。また、sda2、sda6ともにxfsではなくext3にしました。mkfs.ext3やmkswapでパーティションを初期化しておきます。
次に旧HDDの仮rootfs(rootfs-f10.tar.bz2を展開しchrootしたところ)の中身をそのまま新HDDのsda2にコピーします。/lib/modulesにkernelのモジュールもコピーします。又、kernelやinitrdはsda1コピーします。
udevが使えるので最小限のデバイスファイルだけ作っておきます。もしかしたら要らないかもしれませんが、シリアル端末のttyS0やmiconapl互換コマンドで必要なttyS1くらいはあった方がいいかな?と思い作ることに。
$ mknod -m 660 null c 1 3
$ mknod -m 660 console c 5 1
$ mknod ttyS0 c 4 64
$ mknod ttyS1 c 4 65
これまでRedHat系を使ってた割りには、最近の/etcの変わりっぷりにまったく付いていけず・・・(汗 GUIに甘えるとダメだねw
inittabの中身が一行しかなくて(゚д゚lll)ガーンとなりながらも、せっせと作業します。fstabに/dev/sda2、swap、/dev/sda6等を追加。/etc/event.d/にtty1をお手本にシリアルコンソールファイルttyS0を追加、書き換えたのは最後の行だけ:
exec /sbin/agetty -L ttyS0 115200 vt100
日本語UTF-8で使う為に/etc/sysconfig/にi18nファイルを追加、中身は適当:
LANG="ja_JP.utf8"
SUPPORTED="en_US.utf8:en_US:en:ja_JP.eucjp:ja_JP.ujis:ja_JP.utf8:ja"
時間表示なども日本標準にする為に/etc/localtimeを削除して/usr/share/zoneinfo/Japanから/etc/localtimeにリンクを作成。/etc/sysconfig/にclockファイルを作成(要るの?これw):
ZONE="Asia/Tokyo"
UTC=true
ARC=false
root/一般ユーザの設定。ログインは一般ユーザで入ってsuするので作成。/homeディレクトリも作成し.ssh等置いておく。旧HDDで使っていたpasswd、shadow、groupをカッペ(本当はやってはいけないけど、実験ですからw)。
起動後5分以内にマイコンにコマンドを送らないと強制終了されてしまうので/etc/rc.d/init.dにmicon用のシェルスクリプトを作成しrc3.dにS01miconとか適当な名前でリンクを張る。中身は単純にstartでmicon -a boot_endを実行するだけの簡単なもの。
他にも何かやったかもしれませんが、思い出せません、、、┐(´ー`)┌
新HDDをLS-GLに繋いで、今度はchrootに頼らないrootfsを置き換えたバージョンで起動してみます:
Orion1 CPU = Low
=== BUFFALO LS-GL U-Boot. ===
** LOADER **
** BUFFALO BOARD: BUFFALO_BOARD_LS_GL LE (CFG_ENV_ADDR=fffff000)
U-Boot 1.1.1 (Apr 18 2007 - 18:35:44) Marvell version: 1.12.1 - TINY
DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB
[256kB@fffc0000] [0kB@f8000000] ## Unknown FLASH at f8000000: Size = 0x00000000 = 0 MB
Flash: 256 kB
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
Soc: 88F5182 A2
CPU: ARM926 (Rev 0) running @ 400Mhz
Orion 1 streaming disabled
SysClock = 200Mhz , TClock = 166Mhz
USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1111 phy
Marvell Serial ATA Adapter
Integrated Sata device found
Device 1: OK
Model: Hitachi HTS543232L9A300 Firm: FB4OC40C Ser#: 080926FB0403LPH4NZRA
Type: Hard Disk
Supports 48-bit addressing
Capacity: 305245.3 MB = 298.0 GB (625142448 x 512)
Using device ide0, partition 1
** Bad partition 1 **
Using device ide1, partition 1
Loading from block device ide device 1, partition 1: Name: hdb1
Type: U-Boot File:/initrd.buffalo
4881140 bytes read
Booting from Device 1
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
Hit any key to stop autoboot: 0
Reset IDE:
Marvell Serial ATA Adapter
Integrated Sata device found
Device 1: OK
Model: Hitachi HTS543232L9A300 Firm: FB4OC40C Ser#: 080926FB0403LPH4NZRA
Type: Hard Disk
Supports 48-bit addressing
Capacity: 305245.3 MB = 298.0 GB (625142448 x 512)
Using device ide1, partition 1
Loading from block device ide device 1, partition 1: Name: hdb1
Type: U-Boot File:/uImage.buffalo
2020808 bytes read
Using device ide1, partition 1
Loading from block device ide device 1, partition 1: Name: hdb1
Type: U-Boot File:/initrd.buffalo
4881140 bytes read
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.27-LSGL
Created: 2009-04-30 4:30:31 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2020744 Bytes = 1.9 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK
## Loading Ramdisk Image at 00800000 ...
Image Name: initrd
Created: 2008-08-02 10:58:59 UTC
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 4881076 Bytes = 4.7 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Starting kernel ...
arg:console=ttyS0,115200 root=/dev/sda2 rw initrd=0x00800040,15M panic=5 BOOTVER=1.10
Uncompressing Linux.................................................................................................................................. done, booting the kernel.
Linux version 2.6.27-LSGL (root@localhost.localdomain) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33.fa1)) #5 PREEMPT Thu Apr 30 13:30:20 JST 2009
CPU: Feroceon [41069260] revision 0 (ARMv5TEJ), cr=a0053177
Machine: Buffalo Linkstation Pro/Live
Clearing invalid memory bank 0KB@0xffffffff
Clearing invalid memory bank 0KB@0xffffffff
Clearing invalid memory bank 0KB@0xffffffff
Ignoring unrecognised tag 0x00000000
Ignoring unrecognised tag 0x00000000
Ignoring unrecognised tag 0x00000000
Ignoring unrecognised tag 0x41000403
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: console=ttyS0,115200 root=/dev/sda2 rw initrd=0x00800040,15M panic=5 BOOTVER=1.10
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 110220KB available (3808K code, 227K data, 132K init)
SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Calibrating delay loop... 265.42 BogoMIPS (lpj=1327104)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 588 bytes
NET: Registered protocol family 16
Orion ID: MV88F5182-A2. TCLK=166666667.
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
checking if image is initramfs...it isn't (no cpio magic); looks like an initrd
Freeing initrd memory: 15360K
JFFS2 version 2.2. (NAND) c 2001-2006 Red Hat, Inc.
SGI XFS with security attributes, large block numbers, no debug enabled
msgmni has been set to 245
async_tx: api initialized (async)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 3) is a 16550A
console [ttyS0] enabled
serial8250.1: ttyS1 at MMIO 0xf1012100 (irq = 4) is a 16550A
brd: module loaded
loop: module loaded
MV-643xx 10/100/1000 ethernet driver version 1.3
net eth0: port 0 with MAC address 00:16:01:21:c2:4a
net eth0: scatter/gather enabled
net eth0: tx checksum offload
net eth0: napi enabled
Driver 'sd' needs updating - please use bus_type methods
sata_mv sata_mv.0: version 1.24
sata_mv sata_mv.0: slots 32 ports 2
scsi0 : sata_mv
scsi1 : sata_mv
ata1: SATA max UDMA/133 irq 29
ata2: SATA max UDMA/133 irq 29
ata1: SATA link down (SStatus 0 SControl 300)
ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata2.00: ATA-8: Hitachi HTS543232L9A300, FB4OC40C, max UDMA/133
ata2.00: 625142448 sectors, multi 0: LBA48 NCQ (depth 31/32)
ata2.00: configured for UDMA/133
scsi 1:0:0:0: Direct-Access ATA Hitachi HTS54323 FB4O PQ: 0 ANSI: 5
sd 1:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB)
sd 1:0:0:0: [sda] Write Protect is off
sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sd 1:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB)
sd 1:0:0:0: [sda] Write Protect is off
sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sda: sda1 sda2 sda4 < sda5 sda6 >
sd 1:0:0:0: [sda] Attached SCSI disk
physmap platform flash device: 00040000 at f4000000
Found: SST 39LF020
physmap-flash.0: Found 1 x8 devices at 0x0 in 8-bit bank
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
orion-ehci orion-ehci.0: Marvell Orion EHCI
orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1
orion-ehci orion-ehci.0: irq 17, io mem 0xf1050000
orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
orion-ehci orion-ehci.1: Marvell Orion EHCI
orion-ehci orion-ehci.1: new USB bus registered, assigned bus number 2
orion-ehci orion-ehci.1: irq 12, io mem 0xf10a0000
orion-ehci orion-ehci.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
i2c /dev entries driver
rtc-rs5c372 0-0032: rs5c372a found, 24hr, driver version 0.5
rtc-rs5c372 0-0032: rtc core: registered rtc-rs5c372 as rtc0
mv_xor_shared mv_xor_shared.0: Marvell shared XOR driver
mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
mv_xor mv_xor.1: Marvell XOR: ( xor fill cpy )
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
oprofile: using timer interrupt.
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFP support v0.3: not present
rtc-rs5c372 0-0032: setting system clock to 2009-04-30 07:52:59 UTC (1241077979)
RAMDISK: Compressed image found at block 0
EXT2-fs warning: checktime reached, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
---- in linuxrc ---
grep: /proc/buffalo/firmware: No such file or directory
grep: /proc/buffalo/firmware: No such file or directory
grep: /proc/buffalo/firmware: No such file or directory
grep: /proc/buffalo/firmware: No such file or directory
hwclock: Could not access RTC: No such file or directory
Thu Apr 30 16:53:02 JST 2009
err: >AnalyzeRecvPacket:This is invalid RespCode.(code=244)
CheckDevices
linuxrc:choose operation (timeout 4[s])
1:RamRoot other:HddRoot ? -HddRoot-
kjournald starting. Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting. Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on sda2, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
grep: /proc/buffalo/firmware: No such file or directory
grep: /mnt/etc/linkstation_release: No such file or directory
** use initrd mode. **
== fsck_disks ==
e2fsck 1.27 (8-Mar-2002)
fsck.ext3: Filesystem has unsupported feature(s) (/dev/ls_disk1_1)
e2fsck: Get a newer version of e2fsck!
4+0 records in
4+0 records out
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
kjournald starting. Commit interval 5 seconds
EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
EXT3 FS on sda2, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem).
Trying to move old root to /initrd ... /initrd does not exist. Ignored.
Unmounting old root
Trying to free ramdisk memory ... okay
Freeing init memory: 132K
Welcome to Fedora
Press 'I' to enter interactive startup.
udev を起動中: [ OK ]
ホストネームを LS-GLServer に設定中: [ OK ]
ファイルシステムを検査中
Checking all file systems.
[ OK ]
ローカルファイルシステムをマウント中: [ OK ]
/etc/fstab スワップスペースを有効化中: [ OK ]
非対話起動モードに移行中
stop linkstation micon shutdown timer
iptables firewall setting... [ OK ]
FATAL: Module ipv6 not found.
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中:
eth0 のIP情報を検出中...Nothing to flush.
完了。
[ OK ]
FATAL: Module ipv6 not found.
システムロガーを起動中: [ OK ]
ntpd を起動中: [ OK ]
システムロガーを起動中: [ OK ]
その他のファイルシステムをマウント中: [ OK ]
sshd を起動中: [ OK ]
MySQL を起動中: [ OK ]
httpd を起動中: [ OK ]
[ OK ]起動中: [ OK ]
NMB サービスを起動中: [ OK ]
SMB サービスを起動中: [ OK ]
Fedora release 10 (Cambridge)
Kernel 2.6.27-LSGL on an armv5tel (ttyS0)
LS-GL24a login: lsuser
Password:
Last login: Thu Apr 30 15:21:33 on ttyS0
-bash-3.2$
何とか動いた(ように見える)。しばらく様子見ですね。話が前後してしまいますが、sambaやmysql、apache等は最初の実験後に入れたものです。因みにshutdown -h nowだけで電源まで落ちました。
yumで追加や更新が出来るなんて、、、夢みたいだw これまで全部SRPMを自分でビルドしてましたから、もう面倒で面倒で。