新闻中心

在ZC702上运行Linux(1) - 运行Pre-built images

来源:Xilinx
发布时间:[2014-01-29]

  Xilinx针对ZC702提供了Linux Porting。

  参考文档在http://wiki.xilinx.com/

  源码在http://git.xilinx.com/

  拿到板子的第一步当然是先跑一下Pre-built images看看,一者可以验证板子好坏,再者可以看看Linux已经完成了那些功能,做到了哪一步。毕竟,站在巨人的肩膀上才能看的更高,走的更远。

  最新的Pre-built images在http://wiki.xilinx.com/zynq-release-14-3

  拷贝以下文件到SD卡上,SW16配置成00110,就可以在ZC702上启动Linux了。

  BOOT.BIN

  devicetree.dtb

  uImage

  uramdisk.image.gz

  串口上的输出如下:

  U-Boot 2012.04.01-00304-g7639205 (Oct 23 2012 - 08:29:31)

  DRAM: 1 GiB

  WARNING: Caches not enabled

  MMC: SDHCI: 0

  Using default environment

  In: serial

  Out: serial

  Err: serial

  Net: zynq_gem

  Hit any key to stop autoboot: 0

  Copying Linux from SD to RAM...

  Device: SDHCI

  Manufacturer ID: 3

  OEM: 5344

  Name: SU08G

  Tran Speed: 25000000

  Rd Block Len: 512

  SD version 2.0

  High Capacity: Yes

  Capacity: 7.4 GiB

  Bus Width: 4-bit

  reading uImage

  2725416 bytes read

  reading devicetree.dtb

  4366 bytes read

  reading uramdisk.image.gz

  5252253 bytes read

  ## Booting kernel from Legacy Image at 03000000 ...

  Image Name: Linux-3.5.0-14.3-build2

  Created: 2012-10-23 18:12:23 UTC

  Image Type: ARM Linux Kernel Image (uncompressed)

  Data Size: 2725352 Bytes = 2.6 MiB

  Load Address: 00008000

  Entry Point: 00008000

  Verifying Checksum ... OK

  ## Loading init Ramdisk from Legacy Image at 02000000 ...

  Image Name:

  Created: 2012-10-03 21:10:37 UTC

  Image Type: ARM Linux RAMDisk Image (gzip compressed)

  Data Size: 5252189 Bytes = 5 MiB

  Load Address: 00800000

  Entry Point: 00800000

  Verifying Checksum ... OK

  ## Flattened Device Tree blob at 02a00000

  Booting using the fdt blob at 0x02a00000

  Loading Kernel Image ... OK

  OK

  Loading Ramdisk to 1fafd000, end 1ffff45d ... OK

  Loading Device Tree to 1faf8000, end 1fafc10d ... OK

  Starting kernel ...

  Uncompressing Linux... done, booting the kernel.

  Booting Linux on physical CPU 0

  Linux version 3.5.0-14.3-build2 (linnj@xsjpsgv107) (gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-50) ) #1 SMP PREEMPT Tue Oct 23 11:12:17 PDT 2012

  CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d

  CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache

  Machine: Xilinx Zynq Platform, model: Xilinx Zynq ZC702

  bootconsole [earlycon0] enabled

  cma: CMA: reserved 16 MiB at 2e800000

  Memory policy: ECC disabled, Data cache writealloc

  PERCPU: Embedded 7 pages/cpu @c0e2a000 s6784 r8192 d13696 u32768

  Built 1 zonelists in Zone order, mobility grouping on. Total pages: 259840

  Kernel command line: console=ttyPS0,115200 root=/dev/ram rw ip=192.168.1.10:::255.255.255.0:ZC702:eth0 earlyprintk

  PID hash table entries: 4096 (order: 2, 16384 bytes)

  Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)

  Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)

  Memory: 1024MB = 1024MB total

  Memory: 1011624k/1011624k available, 36952k reserved, 270336K highmem

  Virtual kernel memory layout:

  vector : 0xffff0000 - 0xffff1000 ( 4 kB)

  fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)

  vmalloc : 0xf0000000 - 0xff000000 ( 240 MB)

  lowmem : 0xc0000000 - 0xef800000 ( 760 MB)

  pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)

  modules : 0xbf000000 - 0xbfe00000 ( 14 MB)

  .text : 0xc0008000 - 0xc048e060 (4633 kB)

  .init : 0xc048f000 - 0xc04b4a80 ( 151 kB)

  .data : 0xc04b6000 - 0xc04f3c20 ( 248 kB)

  .bss : 0xc04f3c44 - 0xc051f104 ( 174 kB)

  Preemptible hierarchical RCU implementation.

  Dump stacks of tasks blocking RCU-preempt GP.

  NR_IRQS:128

  Zynq clock init

  xlnx,ps7-ttc-1.00.a #0 at 0xf0000000, irq=43

  sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms

  Console: colour dummy device 80x30

  Calibrating delay loop... 1332.01 BogoMIPS (lpj=6660096)

  pid_max: default: 32768 minimum: 301

  Mount-cache hash table entries: 512

  CPU: Testing write buffer coherency: ok

  CPU0: thread -1, cpu 0, socket 0, mpidr 80000000

  hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available

  Setting up static identity map for 0x351160 - 0x351194

  L310 cache controller enabled

  l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72360000, Cache size: 524288 B

  Map SLCR registers

  CPU1: Booted secondary processor

  CPU1: thread -1, cpu 1, socket 0, mpidr 80000001

  Brought up 2 CPUs

  SMP: Total of 2 processors activated (2664.03 BogoMIPS).

  devtmpfs: initialized

  NET: Registered protocol family 16

  DMA: preallocated 256 KiB pool for atomic coherent allocations

  xgpiops e000a000.gpio: gpio at 0xe000a000 mapped to 0xf0008000

  registering platform device 'pl330' id 0

  registering platform device 'arm-pmu' id 0

  registering platform device 'zynq-dvfs' id 0

  hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.

  hw-breakpoint: maximum watchpoint size is 4 bytes.

  MIO pin 47 not assigned(00001220)

  xslcr xslcr.0: at 0xF8000000 mapped to 0xF8000000

  bio: create slab at 0

  SCSI subsystem initialized

  usbcore: registered new interface driver usbfs

  usbcore: registered new interface driver hub

  usbcore: registered new device driver usb

  Linux video capture interface: v2.00

  Switching to clocksource xttcpss_timer1

  NET: Registered protocol family 2

  IP route cache hash table entries: 32768 (order: 5, 131072 bytes)

  TCP established hash table entries: 131072 (order: 8, 1048576 bytes)

  TCP bind hash table entries: 65536 (order: 7, 786432 bytes)

  TCP: Hash tables configured (established 131072 bind 65536)

  TCP: reno registered

  UDP hash table entries: 512 (order: 2, 16384 bytes)

  UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)

  NET: Registered protocol family 1

  RPC: Registered named UNIX socket transport module.

  RPC: Registered udp transport module.

  RPC: Registered tcp transport module.

  RPC: Registered tcp NFSv4.1 backchannel transport module.

  Trying to unpack rootfs image as initramfs...

  rootfs image is not initramfs (no cpio magic); looks like an initrd

  Freeing initrd memory: 5128K

  xscugtimer xscugtimer.0: ioremap fe00c200 to f000a200 with size 400

  pl330 dev 0 probe success

  highmem bounce pool size: 64 pages

  jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.

  msgmni has been set to 1489

  io scheduler noop registered

  io scheduler deadline registered

  io scheduler cfq registered (default)

  e00console [ttyPS0] enabled, bootconsole disabled

  console [ttyPS0] enabled, bootconsole disabled

  xdevcfg f8007000.devcfg: ioremap f8007000 to f005e000 with size 100

  brd: module loaded

  loop: module loaded

  xqspips e000d000.spi: master is unqueued, this is deprecated

  m25p80 spi1.0: n25q128 (16384 Kbytes)

  7 ofpart partitions found on MTD device spi1.0

  Creating 7 MTD partitions on "spi1.0":

  0x000000000000-0x000000080000 : "qspi-fsbl"

  0x000000080000-0x000000100000 : "qspi-u-boot"

  0x000000100000-0x000000600000 : "qspi-linux"

  0x000000600000-0x000000620000 : "qspi-device-tree"

  0x000000620000-0x000000700000 : "qspi-user"

  0x000000700000-0x000000800000 : "qspi-scratch"

  0x000000800000-0x000001000000 : "qspi-rootfs"

  xqspips e000d000.spi: at 0xE000D000 mapped to 0xF0060000, irq=51

  GEM: BASEADDRESS hw: e000b000 virt: f0062000

  XEMACPS mii bus: probed

  eth0, pdev->id -1, baseaddr 0xe000b000, irq 54

  ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver

  xusbps-ehci xusbps-ehci.0: Xilinx PS USB EHCI Host Controller

  xusbps-ehci xusbps-ehci.0: new USB bus registered, assigned bus number 1

  xusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000

  xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00

  hub 1-0:1.0: USB hub found

  hub 1-0:1.0: 1 port detected

  Initializing USB Mass Storage driver...

  usbcore: registered new interface driver usb-storage

  USB Mass Storage support registered.

  Xilinx PS USB Device Controller driver (Apr 01, 2011)

  mousedev: PS/2 mouse device common for all mice

  i2c /dev entries driver

  xi2cps e0004000.i2c: 100 kHz mmio e0004000 irq 57

  si570 1-005d: registered si570 with default frequency 156250000 Hz

  si570 1-005d: set initial output frequency 148500000 Hz

  i2c i2c-0: Added multiplexed i2c bus 1

  i2c i2c-0: Added multiplexed i2c bus 2

  at24 3-0054: 1024 byte 24c08 EEPROM, writable, 1 bytes/write

  i2c i2c-0: Added multiplexed i2c bus 3

  i2c i2c-0: Added multiplexed i2c bus 4

  rtc-pcf8563 5-0051: chip found, driver version 0.4.3

  rtc-pcf8563 5-0051: low voltage detected, date/time is not reliable.

  rtc-pcf8563 5-0051: rtc core: registered rtc-pcf8563 as rtc0

  i2c i2c-0: Added multiplexed i2c bus 5

  i2c i2c-0: Added multiplexed i2c bus 6

  i2c i2c-0: Added multiplexed i2c bus 7

  i2c i2c-0: Added multiplexed i2c bus 8

  pca954x 0-0074: registered 8 multiplexed busses for I2C switch pca9548

  gspca_main: v2.14.0 registered

  usbcore: registered new interface driver uvcvideo

  USB Video Class driver (1.1.1)

  mpcore_wdt: MPcore Watchdog Timer: 0.1. mpcore_noboot=0 mpcore_margin=60 sec (nowayout= 0)

  xwdtps f8005000.swdt: Xilinx Watchdog Timer at 0xf0068000 with timeout 10s

  sdhci: Secure Digital Host Controller Interface driver

  sdhci: Copyright(c) Pierre Ossman

  sdhci-pltfm: SDHCI platform and OF driver helper

  mmc0: Invalid maximum block size, assuming 512 bytes

  mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA

  usbcore: registered new interface driver usbhid

  usbhid: USB HID core driver

  TCP: cubic registered

  NET: Registered protocol family 17

  VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4

  Registering SWP/SWPB emulation handler

  rtc-pcf8563 5-0051: low voltage detected, date/time is not reliable.

  rtc-pcf8563 5-0051: setting system clock to 2013-07-02 06:48:15 UTC (1372747695)

  GEM: lp->tx_bd ee842000 lp->tx_bd_dma 2e842000 lp->tx_skb ee0f5780

  GEM: lp->rx_bd ee841000 lp->rx_bd_dma 2e841000 lp->rx_skb ee0f5680

  GEM: MAC 0x00350a00, 0x00002201, 00:0a:35:00:01:22

  mmc0: new high speed SDHC card at address e624

  mmcblk0: mmc0:e624 SU08G 7.40 GiB

  mmcblk0: p1 p2

  usb 1-1: new full-speed USB device number 2 using xusbps-ehci

  hub 1-1:1.0: USB hub found

  hub 1-1:1.0: 4 ports detected

  usb 1-1.3: new low-speed USB device number 3 using xusbps-ehci

  input: PIXART USB OPTICAL MOUSE as /devices/amba.0/e0002000.usb/xusbps-ehci.0/usb1/1-1/1-1.3/1-1.3:1.0/input/input0

  hid-generic 0003:093A:2510.0001: input: USB HID v1.11 Mouse [PIXART USB OPTICAL MOUSE] on usb-xusbps-ehci.0-1.3/input0

  GEM: phydev ee386400, phydev->phy_id 0x1410e40, phydev->addr 0x7

  eth0, phy_addr 0x7, phy_id 0x01410e40

  eth0, attach [Marvell 88E1116R] phy driver

  IP-Config: Complete:

  device=eth0, addr=192.168.1.10, mask=255.255.255.0, gw=255.255.255.255

  host=ZC702, domain=, nis-domain=(none)

  bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=

  RAMDISK: gzip image found at block 0

  VFS: Mounted root (ext2 filesystem) on device 1:0.

  devtmpfs: mounted

  Freeing init memory: 148K

  Starting rcS...

  ++ Mounting filesystem

  ++ Setting up mdev

  ++ Starting telnet daemon

  ++ Starting http daemon

  ++ Starting ftp daemon

  ++ Starting ssh daemon

  rcS Complete

  zynq>

  zynq> df -h

  Filesystem Size Used Available Use% Mounted on

  none 504.5M 0 504.5M 0% /tmp

  /dev/mmcblk0p1 1.8G 7.9M 1.8G 0% /mnt

  zynq>

  可以看出:

  U-Boot是基于2012.04.01的

  Linux kernel版本是3.5.0

  GCC tool chain版本是4.6.1

  对Cortex-A9,1 BogoMIPS=1 CPU MHz。双核2664.03 BogoMIPS印证了CPU的主频是667MHz。

  ZC702 IP地址配置成了static: 192.168.1.10

  把ZC702, laptop, 和公司的Ethernet cable接到一个LanSwitch上,给VMPlayer下的Ubuntu配置了static IP: 192.168.1.20,laptop可以正常上网。ZC702和Ubuntu之间可以ping通,延迟大约在0.5-1.2ms范围内。以后跑TFTP和NFS就方便多了。网口线序自适应就是方便啊。

  一些需要注意的点:

  1. 现在用bootm命令启动Linux,以前是用go命令。

  2. ramdisk的名字改成了uramdisk.image.gz (带U-Boot header),以前是ramdisk8M.image.gz

  3. Linux kernel缺省情况下(配置文件用的是 xilinx_zynq_defconfig) 不再把device tree硬编码在16 MB,而是在bootm命令参数里面指定。目前kernel还可以把device tree硬编码在固定地址 (16MB),但是未来有可能会移除这个特性。

  已知的问题:

  根据wiki上的说明,ZC706用是dual QSPI,而Linux没有配置quad enable bit。解决办法是在U-BOOT阶段,用命令"sf probe"修正这个问题。

  U-BOOT的配置:

  zynq-uboot> pri

  baudrate=115200

  bootcmd=run modeboot

  bootdelay=3

  devicetree_image=devicetree.dtb

  ethact=zynq_gem

  ethaddr=00:0a:35:00:01:22

  fdt_high=0x20000000

  initrd_high=0x20000000

  ipaddr=10.10.70.102

  jtagboot=echo TFTPing Linux to RAM...;tftp 0x3000000 ${kernel_image};tftp 0x2A00000 ${devicetree_image};tftp 0x2000000 ${ramdisk_image};bootm 0x3000000 0x2000000 0x2A00000

  kernel_image=uImage

  kernel_size=0x140000

  modeboot=run sdboot

  nand_kernel_size=0x400000

  nand_ramdisk_size=0x400000

  nandboot=echo Copying Linux from NAND flash to RAM...;nand read 0x3000000 0x200000 ${nand_kernel_size};nand read 0x2A00000 0x700000 0x20000;echo Copying ramdisk...;nand read 0x2000000 0x900000 ${nand_ramdisk_size};bootm 0x3000000 0x2000000 0x2A00000

  norboot=echo Copying Linux from NOR flash to RAM...;cp 0xE2100000 0x3000000 ${kernel_size};cp 0xE2600000 0x2A00000 0x20000;echo Copying ramdisk...;cp 0xE3000000 0x2000000 ${ramdisk_size};bootm 0x3000000 0x2000000 0x2A00000

  qspiboot=echo Copying Linux from QSPI flash to RAM...;cp 0xFC100000 0x3000000 ${kernel_size};cp 0xFC600000 0x2A00000 0x20000;echo Copying ramdisk...;cp 0xFC800000 0x2000000 ${ramdisk_size};bootm 0x3000000 0x2000000 0x2A00000

  ramdisk_image=uramdisk.image.gz

  ramdisk_size=0x200000

  sdboot=echo Copying Linux from SD to RAM...;mmcinfo;fatload mmc 0 0x3000000 ${kernel_image};fatload mmc 0 0x2A00000 ${devicetree_image};fatload mmc 0 0x2000000 ${ramdisk_image};bootm 0x3000000 0x2000000 0x2A00000

  serverip=10.10.70.101

  stderr=serial

  stdin=serial

  stdout=serial

  Environment size: 1551/65532 bytes

  zynq-uboot>

最新活动

寻找《xilinx UltraScale™ MPSoC架构》 下载文档有奖
活动时间:2014/3/22-2014/5/22
Xilinx Zynq交流群已开辟
QQ群号:323470211,还有 Xilinx 资深工程师入驻,帮您答疑解惑!!!
ZYNQ论坛互动专区
ZedBoard及ZingBoard开发优秀手记展示,详情进入……