====== FreeBSD/arm for Marvell Orion, Kirkwood and Discovery systems-on-chip ====== :!: There is no support available anymore for these systems. %%FreeBSD%% 8.2 was the last version that was really stable. :!: This is a short introduction into running %%FreeBSD%% 8.x and 9-CURRENT on the family of Marvell integrated systems-on-chip, including * 88F5181, 88F5182, 88F5281 * 88F6281 * MV78100 The chips have programmable endian order, but only Little Endian mode was tested so far and all below examples assume this. In particular, the [lack of] arguments for build targets cause the created binaries to be LE. ==== Build world ==== $ cd ${SRC} $ make -j 8 buildworld TARGET_ARCH=arm ==== Install world into the NFS-exported location ==== $ su # setenv DESTDIR /nfsroot/arm-8-le # mkdir -p $DESTDIR # make installworld TARGET_ARCH=arm # make distrib-dirs TARGET_ARCH=arm # make distribution TARGET_ARCH=arm ==== Adjust configuration for diskless use ==== # echo 'sshd_enable="YES"' > $DESTDIR/etc/rc.conf # echo 'rpcbind_enable="YES"' >> $DESTDIR/etc/rc.conf # echo 'nfs_client_enable="YES"' >> $DESTDIR/etc/rc.conf # echo 'rpc_lockd_enable="YES"' >> $DESTDIR/etc/rc.conf # echo 'rpc_statd_enable="YES"' >> $DESTDIR/etc/rc.conf Most likely the $DESTDIR/etc/fstab should be updated according to the local configuration. Consult diskless(8) for additional info. ==== Build kernel ==== There are dedicated kernel config files for different Marvell development systems per each family, use one of the following: $ make buildkernel TARGET_ARCH=arm KERNCONF=DB-88F5XXX $ make buildkernel TARGET_ARCH=arm KERNCONF=DB-88F6XXX $ make buildkernel TARGET_ARCH=arm KERNCONF=DB-MV78XXX $ make buildkernel TARGET_ARCH=arm KERNCONF=SHEEVAPLUG $ make buildkernel TARGET_ARCH=arm KERNCONF=DREAMPLUG-1001 ### Note for Nor based flash DreamPlugs you need a special configuration and ### you will need to change the kernel DREAMPLUG configuration to NFS booting unless the ### default DREAMPLUG loads from the SD card. ==== Move kernel to TFTP area ==== In the simplest scenario a pure binary version of the kernel (kernel.bin file) will be directly run from U-Boot. In this approach the kernel.bin needs to be placed manually in the TFTP-exported directory, which is accessible from the target. $ cp ${OBJDIR}/sys/DB-885XXX/kernel.bin /tftpboot/mv5281/ ==== Setup TFTP server ==== In /etc/inetd.conf, uncomment the following two lines: tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot tftp dgram udp6 wait root /usr/libexec/tftpd tftpd -l -s /tftpboot Make sure the inetd(8) server is enabled in /etc/rc.conf: inetd_enable="YES" ==== Setup NFS server ==== Add the following to the /etc/rc.conf on the host: nfs_server_enable="YES" mountd_enable="YES" rpcbind_enable="YES" rpc_statd_enable="YES" rpc_lockd_enable="YES" Add a line to /etc/exports, like this: /nfsroot/arm-8-le -maproot=0 -network 10.4.50/24 ==== Setup DHCP server ==== Install the server from net/isc-dhcp42-server. Add a section to /usr/local/etc/dhcpd.conf like this: subnet 10.0.0.0 netmask 255.255.0.0 { range 10.0.0.1 10.0.0.255; option domain-name "internal.example.org"; option broadcast-address 10.0.255.255; default-lease-time 600; max-lease-time 7200; filename "mv5281/kernel.bin"; option root-path "10.0.0.201:/nfsroot/arm-8-le"; } ==== Boot the kernel from U-Boot ==== __ __ _ _ | \/ | __ _ _ ____ _____| | | | |\/| |/ _` | '__\ \ / / _ \ | | | | | | (_| | | \ V / __/ | | |_| |_|\__,_|_| \_/ \___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \ / _ \ / _ \| __| | |_| |___| |_) | (_) | (_) | |_ \___/ |____/ \___/ \___/ \__| ** LOADER ** ** MARVELL BOARD: DB-88F5X81-DDR2-A/B LE U-Boot 1.1.4 (Aug 26 2008 - 11:21:17) Marvell version: 2.3.23 U-Boot code: 00200000 -> 0026FFF0 BSS: -> 002845AC Soc: 88F5281 D0 (DDR2) CPU running @ 500Mhz SysClock = 166Mhz , TClock = 166Mhz DRAM CAS Latency = 3 tRP = 3 tRAS = 7 tRCD=3 DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB 32bit width [512kB@fff80000] [32768kB@f8000000] Flash: 32.5 MB Addresses 4M - 0M are saved for the U-Boot usage. Mem malloc Initialization (4M - 3M): Done CPU : ARM926 (Rev 0) Streaming disabled VFP initialized to Run Fast Mode. USB 0: host mode PCI 0: PCI Express Root Complex Interface PCI 1: Conventional PCI, speed = 33000000 CPU: Write allocate enabled Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 Marvell>> Marvell>> tftpboot 900000 mv5281/kernel.bin Using egiga0 device TFTP from server 10.0.0.204; our IP address is 10.0.2.2 Filename 'mv5281/kernel.bin'. Load address: 0x900000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ### done Bytes transferred = 2675700 (28d3f4 hex) Marvell>> Marvell>> go 900000 ## Starting application at 0x00900000 ... KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2008 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 8.0-CURRENT #2: Fri Dec 5 16:20:16 CET 2008 Preloaded elf kernel "elf kernel" at 0xc0d00074. CPU: ARM926EJ-S rev 0 (ARM9EJ-S core) DC enabled IC enabled WB enabled EABT branch prediction enabled 32KB/32B 1-way Instruction cache 32KB/32B 4-way write-back-locking-C Data cache real memory = 134217728 (128 MB) Physical memory chunk(s): 00000000 - 0x8fffff, 9437184 bytes (2304 pages) 0xdf1000 - 0x7d8efff, 117039104 bytes (28574 pages) avail memory = 125468672 (119 MB) SOC: (0x5281:0x04) Marvell 88F5281 rev D0, TClock 166MHz random: nfslock: pseudo-device mem: null: mbus0: on motherboard ic0: at mem 0xf1020200-0xf102023b on mbus0 timer0: at mem 0xf1020300-0xf102032f irq 0 on mbus0 timer0: [FILTER] gpio0: at mem 0xf1010100-0xf101011f irq 6,7,8,9 on mbus0 gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] gpio0: [FILTER] uart0: <16550 or compatible> at mem 0xf1012000-0xf101201f irq 3 on mbus0 uart0: [FILTER] uart0: fast interrupt uart0: console (115200,n,8,1) uart1: <16550 or compatible> at mem 0xf1012100-0xf101211f irq 4 on mbus0 uart1: [FILTER] uart1: fast interrupt ehci0: at mem 0xf1050000-0xf1050fff irq 16,17 on mbus0 ehci0: [GIANT-LOCKED] ehci0: [ITHREAD] ehci0: 5.24 GL USB-2 workaround enabled usb0: EHCI version 1.0 usb0 on ehci0 usb0: USB revision 2.0 uhub0: on usb0 uhub0: 1 port with 1 removable, self powered umass0: on uhub0 umass0:0:0:-1: Attached to scbus0 mge0: at mem 0xf1072000-0xf1073fff irq 18,19,20,21,22 on mbus0 mge0: bpf attached mge0: Ethernet address: 00:01:01:00:52:81 miibus0: on mge0 e1000phy0: PHY 8 on miibus0 e1000phy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX-FDX, auto mge0: [MPSAFE] mge0: [ITHREAD] mge0: [MPSAFE] mge0: [ITHREAD] twsi0: at mem 0xf1011000-0xf101101f on mbus0 iicbus0: on twsi0 iic0: on iicbus0 rtc0: on iicbus0 rtc0: registered as a time-of-day clock (resolution 1000000us) pcib0: at mem 0xf1040000-0xf1041fff on mbus0 pci0: on pcib0 pcib1: at mem 0xf1030000-0xf1031fff on mbus0 pci1: at device 7.0 (no driver attached) Timecounter "CPU Timer" frequency 166666667 Hz quality 1000 Timecounters tick every 1.000 msec lo0: bpf attached pass0 at umass-sim0 bus 0 target 0 lun 0 pass0: Removable Direct Access SCSI-2 device pass0: 40.000MB/s transfers GEOM: new disk da0 bootpc_init: wired to interface 'mge0' Sending DHCP Discover packet from interface mge0 (00:01:01:00:52:81) da0 at umass-sim0 bus 0 target 0 lun 0 da0: Removable Direct Access SCSI-2 device da0: 40.000MB/s transfers da0: 244MB (501759 512 byte sectors: 64H 32S/T 244C) mge0: link state changed to UP Received DHCP Offer packet on mge0 from 0.0.0.0 (accepted) (no root path) Sending DHCP Request packet from interface mge0 (00:01:01:00:52:81) Received DHCP Ack packet on mge0 from 0.0.0.0 (accepted) (got root path) mge0 at 10.0.0.18 server 0.0.0.0 subnet mask 255.255.0.0 router 10.0.0.1 rootfs 10.0.0.201:/nfsroot/arm-8-le/ hostname mv5281-a Adjusted interface mge0 Trying to mount root from nfs: NFS ROOT: 10.0.0.201:/nfsroot/mv5281-a/ start_init: trying /sbin/init Interface mge0 IP-Address 10.0.0.18 Broadcast 10.0.255.255 No suitable dump device was found. Entropy harvesting: interrupts ethernet point_to_point kickstart. Fast boot: skipping disk checks. mount_nfs: can't update /var/db/mounttab for 10.0.0.201:/nfsroot/arm-8-le Starting Network: lo0. devd: cannot open pid file: Operation not supported Mounting NFS file systems:. syslogd: cannot open pid file: Operation not supported /etc/rc: WARNING: Dump device does not exist. Savecore not run. Fri Dec 5 13:38:31 UTC 2008 FreeBSD/arm (mv5281-a) (ttyu0) login: ==== openrd-client specific notes ==== To access the console, you have to use the %%MicroUSB%% connector labeled "SYSTEM". It's not possible to use the usual RS-232 serial port instead. After connecting to %%FreeBSD%% host, two USB devices show up: uftdi0: on usbus0 uftdi1: on usbus0 Console is on the second one (/dev/cuaU1). The default speed is 115200, 8N1. ---- {{tag>InactiveProject Historical}}