Xilinx Linux – Pierwsze starcie 8


ZedBoard, o którym wspominałem wcześniej został zaopatrzony w dystrybucję linuxa „Linux (none) 3.3.0-digilent-12.07-zed-beta #2 SMP PREEMPT armx”. Pozwala nam to na szybkie rozpoczęcie pracy z ZedBoardem. A właściwie to na zapoznanie się z nim, gdyż cała siła jego pracy wynika z wykorzystania naraz wewnętrznego procesora i FPGA.

I tak po rozpakowaniu naszego Zeda w zależności czy działamy na Windowsie czy na jakiejś dystrybucji Linuxa należy ściągnąć sterowniki do układu Cypress odpowiedzialnego za komunikację USB2UART. Sterowniki przeznaczone są dla Windowsa, natomiast na linuxie wykorzystuje on port ttyACM i nie trzeba nic kombinować, rejestrować się czy jeszcze coś innego.
Kolejnym krokiem jest ustawienie naszej płyty tak aby bootwała się z załączonej karty pamięci. I tak – po pierwsze trzeba zewrzeć zworkę JP6 – po drugie – zworki JP[10:8] ustawić jako „110” (czyt -> JP10 = ‚1’; JP9 = ‚1’; JP8 = ‚0’). To wystarczy aby płytka zaczęła działać.
Łączymy się z płytą poprzez port szeregowy, co oznacza że potrzebujemy dowolny terminal do komunikacji. Osobiście polecam Putty, jednakże na Linuxie również Minicom.
Ustawienia portu to 115200/8/N/1 (dla nieznających nomenklatury -> 115200 baud / 8 bits / no parity / 1 bit stop). Załączamy naszą płytę przesuwając switch „POWER” na pozycję ON ( 😛 ).

W terminalu powinniśmy zauważyć następujące wykonanie:

 U-Boot 2011.03-dirty (Jul 11 2012 - 16:07:00)

DRAM: 512 MiB
MMC: SDHCI: 0
Using default environment

In: serial
Out: serial
Err: serial
Net: zynq_gem
Hit any key to stop autoboot: 3  2  1  0
Copying Linux from SD to RAM...
Device: SDHCI
Manufacturer ID: 1b
OEM: 534d
Name: SMI
Tran Speed: 25000000
Rd Block Len: 512
SD version 1.10
High Capacity: Yes
Capacity: 3987734528
Bus Width: 1-bit
reading zImage

2479640 bytes read
reading devicetree_ramdisk.dtb

5817 bytes read
reading ramdisk8M.image.gz

3693763 bytes read
## Starting application at 0x00008000 ...
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0
[ 0.000000] Linux version 3.3.0-digilent-12.07-zed-beta (tinghui.wang@DIGILENT_LINUX) (gcc version 4.6.1 (Sourcery CodeBench Lite 2011.09-50) ) #2 SMP PREEMPT Thu Jul 12 21:01:42 PDT 2012
[ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine: Xilinx Zynq Platform, model: Xilinx Zynq ZED
[ 0.000000] bootconsole [earlycon0] enabled
[ 0.000000] Memory policy: ECC disabled, Data cache writealloc
[ 0.000000] BUG: mapping for 0xf8f00000 at 0xfe00c000 out of vmalloc space
[ 0.000000] BUG: mapping for 0xe0000000 at 0xfe000000 out of vmalloc space
[ 0.000000] BUG: mapping for 0xffff1000 at 0xfe200000 out of vmalloc space
[ 0.000000] PERCPU: Embedded 7 pages/cpu @c1489000 s5696 r8192 d14784 u32768
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 125824
[ 0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
[ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 240MB 256MB = 496MB total
[ 0.000000] Memory: 489856k/489856k available, 34432k reserved, 0K highmem
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
[ 0.000000] vmalloc : 0xe0800000 - 0xfd000000 ( 456 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xe0000000 ( 512 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0xc0008000 - 0xc042f040 (4253 kB)
[ 0.000000] .init : 0xc0430000 - 0xc0456640 ( 154 kB)
[ 0.000000] .data : 0xc0458000 - 0xc0485dc0 ( 184 kB)
[ 0.000000] .bss : 0xc0485de4 - 0xc049d734 ( 95 kB)
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] Verbose stalled-CPUs detection is disabled.
[ 0.000000] NR_IRQS:128
[ 0.000000] xlnx,ps7-ttc-1.00.a #0 at 0xe0800000, irq=43
[ 0.000000] Console: colour dummy device 80x30
[ 0.000000] Calibrating delay loop... 1594.16 BogoMIPS (lpj=7970816)
[ 0.090000] pid_max: default: 32768 minimum: 301
[ 0.090000] Mount-cache hash table entries: 512
[ 0.090000] CPU: Testing write buffer coherency: ok
[ 0.090000] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.100000] smp_twd: clock not found: -2
[ 0.100000] Calibrating local timer... 399.28MHz.
[ 0.170000] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[ 0.170000] Setting up static identity map for 0x2f8d48 - 0x2f8d7c
[ 0.270000] CPU1: Booted secondary processor
[ 0.310000] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[ 0.310000] Brought up 2 CPUs
[ 0.310000] SMP: Total of 2 processors activated (3188.32 BogoMIPS).
[ 0.320000] devtmpfs: initialized
[ 0.320000] ------------[ cut here ]------------
[ 0.320000] WARNING: at arch/arm/mm/dma-mapping.c:198 consistent_init+0x70/0x104()
[ 0.330000] Modules linked in:
[ 0.330000] [] (unwind_backtrace+0x0/0xe0) from [] (warn_slowpath_common+0x4c/0x64)
[ 0.340000] [] (warn_slowpath_common+0x4c/0x64) from [] (warn_slowpath_null+0x18/0x1c)
[ 0.350000] [] (warn_slowpath_null+0x18/0x1c) from [] (consistent_init+0x70/0x104)
[ 0.360000] [] (consistent_init+0x70/0x104) from [] (do_one_initcall+0x90/0x160)
[ 0.360000] [] (do_one_initcall+0x90/0x160) from [] (kernel_init+0x84/0x128)
[ 0.370000] [] (kernel_init+0x84/0x128) from [] (kernel_thread_exit+0x0/0x8)
[ 0.380000] ---[ end trace 1b75b31a2719ed1c ]---
[ 0.380000] ------------[ cut here ]------------
[ 0.390000] WARNING: at arch/arm/mm/dma-mapping.c:198 consistent_init+0x70/0x104()
[ 0.390000] Modules linked in:
[ 0.390000] [] (unwind_backtrace+0x0/0xe0) from [] (warn_slowpath_common+0x4c/0x64)
[ 0.400000] [] (warn_slowpath_common+0x4c/0x64) from [] (warn_slowpath_null+0x18/0x1c)
[ 0.410000] [] (warn_slowpath_null+0x18/0x1c) from [] (consistent_init+0x70/0x104)
[ 0.420000] [] (consistent_init+0x70/0x104) from [] (do_one_initcall+0x90/0x160)
[ 0.430000] [] (do_one_initcall+0x90/0x160) from [] (kernel_init+0x84/0x128)
[ 0.430000] [] (kernel_init+0x84/0x128) from [] (kernel_thread_exit+0x0/0x8)
[ 0.440000] ---[ end trace 1b75b31a2719ed1d ]---
[ 0.440000] NET: Registered protocol family 16
[ 0.460000] L310 cache controller enabled
[ 0.460000] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72060000, Cache size: 524288 B
[ 0.460000] registering platform device 'pl330' id 0
[ 0.470000] registering platform device 'arm-pmu' id 0
[ 0.470000]
[ 0.470000] ###############################################
[ 0.480000] # #
[ 0.480000] # Board ZED Init #
[ 0.480000] # #
[ 0.490000] ###############################################
[ 0.490000]
[ 0.500000] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[ 0.500000] hw-breakpoint: maximum watchpoint size is 4 bytes.
[ 0.530000] xslcr xslcr.0: at 0xF8000000 mapped to 0xE0808000
[ 0.540000] bio: create slab at 0
[ 0.540000] gpiochip_add: registered GPIOs 0 to 245 on device: xgpiops
[ 0.540000] xgpiops e000a000.gpio: gpio at 0xe000a000 mapped to 0xe080a000
[ 0.550000] SCSI subsystem initialized
[ 0.550000] usbcore: registered new interface driver usbfs
[ 0.560000] usbcore: registered new interface driver hub
[ 0.560000] usbcore: registered new device driver usb
[ 0.570000] Advanced Linux Sound Architecture Driver Version 1.0.24.
[ 0.570000] Switching to clocksource xttcpss_timer1
[ 0.580000] NET: Registered protocol family 2
[ 0.580000] IP route cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.580000] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
[ 0.590000] TCP bind hash table entries: 16384 (order: 5, 196608 bytes)
[ 0.590000] TCP: Hash tables configured (established 16384 bind 16384)
[ 0.600000] TCP reno registered
[ 0.600000] UDP hash table entries: 256 (order: 1, 8192 bytes)
[ 0.610000] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[ 0.610000] NET: Registered protocol family 1
[ 0.620000] Trying to unpack rootfs image as initramfs...
[ 0.620000] rootfs image is not initramfs (no cpio magic); looks like an initrd
[ 0.650000] Freeing initrd memory: 8192K
[ 0.660000] xscugtimer xscugtimer.0: ioremap fe00c200 to e0810200 with size 400
[ 0.660000] pl330 dev 0 probe success
[ 0.670000] msgmni has been set to 972
[ 0.670000] io scheduler noop registered
[ 0.670000] io scheduler deadline registered
[ 0.670000] io scheduler cfq registered (default)
[ 0.680000] e00 0.680000] console [ttyPS0] enabled, bootconsole disabled
[ 0.680000] console [ttyPS0] enabled, bootconsole disabled
[ 0.690000] xdevcfg f8007000.devcfg: ioremap f8007000 to e0814000 with size 1000
[ 0.700000] [drm] Initialized drm 1.1.0 20060810
[ 0.710000] brd: module loaded
[ 0.720000] loop: module loaded
[ 0.720000] xqspips e000d000.qspi: at 0xE000D000 mapped to 0xE0816000, irq=51
[ 0.730000] GEM: BASEADDRESS hw: e000b000 virt: e0818000
[ 0.730000] XEMACPS mii bus: probed
[ 0.740000] eth0, pdev->id -1, baseaddr 0xe000b000, irq 54
[ 0.740000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.750000] usb_hcd_xusbps_probe: No OTG assigned!
[ 0.750000] usb_hcd_xusbps_probe: OTG now assigned!
[ 0.750000] xusbps-ehci xusbps-ehci.0: Xilinx PS USB EHCI Host Controller
[ 0.760000] xusbps-ehci xusbps-ehci.0: new USB bus registered, assigned bus number 1
[ 0.800000] xusbps-ehci xusbps-ehci.0: irq 53, io mem 0x00000000
[ 0.820000] xusbps-ehci xusbps-ehci.0: USB 2.0 started, EHCI 1.00
[ 0.820000] hub 1-0:1.0: USB hub found
[ 0.820000] hub 1-0:1.0: 1 port detected
[ 0.830000] Initializing USB Mass Storage driver...
[ 0.830000] usbcore: registered new interface driver usb-storage
[ 0.840000] USB Mass Storage support registered.
[ 0.840000] Xilinx PS USB Device Controller driver (Apr 01, 2011)
[ 0.850000] mousedev: PS/2 mouse device common for all mice
[ 0.850000] Linux video capture interface: v2.00
[ 0.860000] gspca_main: v2.14.0 registered
[ 0.860000] usbcore: registered new interface driver uvcvideo
[ 0.860000] USB Video Class driver (1.1.1)
[ 0.870000] WDT OF probe
[ 0.870000] xwdtps f8005000.swdt: Xilinx Watchdog Timer at 0xe081c000 with timeout 10 seconds
[ 0.880000] sdhci: Secure Digital Host Controller Interface driver
[ 0.880000] sdhci: Copyright(c) Pierre Ossman
[ 0.890000] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.890000] mmc0: Invalid maximum block size, assuming 512 bytes
[ 0.900000] No connectors reported connected with modes
[ 0.900000] [drm] Cannot find any crtc or sizes - going 1024x768
[ 0.910000] mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
[ 0.910000] usbcore: registered new interface driver usbhid
[ 0.920000] drivers/gpu/drm/analog/analog_drm_fbdev.c:analog_drm_fbdev_probe[241]
[ 0.930000] usbhid: USB HID core driver
[ 0.930000] adv7511 0-0039: Failed to add route DAI IN->TMDS
[ 0.960000] Console: switching to colour frame buffer device 128x48
[ 0.970000] asoc: adv7511 75c00000.axi-spdif-tx mapping ok
[ 0.970000] axi-spdif 75c00000.axi-spdif-tx: Failed to set DAI format: -22
[ 0.970000] ALSA device list:
[ 0.970000] #0: HDMI monitor
[ 0.970000] TCP cubic registered
[ 0.970000] NET: Registered protocol family 17
[ 0.970000] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[ 0.970000] Registering SWP/SWPB emulation handler
[ 0.980000] registered taskstats version 1
[ 0.980000] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[ 1.030000] RAMDISK: gzip image found at block 0
[ 1.040000] fb0: frame buffer device
[ 1.040000] drm: registered panic notifier
[ 1.040000] [drm] Initialized analog_drm 1.0.0 20110530 on minor 0
[ 1.060000] mmc0: new high speed SDHC card at address b368
[ 1.060000] mmcblk0: mmc0:b368 SMI 3.71 GiB
[ 1.070000] mmcblk0: p1
[ 1.190000] usb 1-1: new high-speed USB device number 2 using xusbps-ehci
[ 1.300000] EXT4-fs (ram0): warning: mounting unchecked fs, running e2fsck is recommended
[ 1.310000] EXT4-fs (ram0): mounted filesystem without journal. Opts: (null)
[ 1.310000] VFS: Mounted root (ext4 filesystem) on device 1:0.
[ 1.320000] Freeing init memory: 152K
Starting rcS...
++ Mounting filesystem
++ Setting up mdev
++ Configure static IP 192.168.1.10
[    1.510000] GEM: lp->tx_bd ffdfb000 lp->tx_bd_dma 18fd4000 lp->tx_skb d8ac17c0
[    1.520000] GEM: lp->rx_bd ffdfc000 lp->rx_bd_dma 18fd5000 lp->rx_skb d8ac18c0
[    1.520000] GEM: MAC 0x00350a00, 0x00002201, 00:0a:35:00:01:22
[    1.530000] GEM: phydev d8b95400, phydev->phy_id 0x1410dd1, phydev->addr 0x0
[    1.530000] eth0, phy_addr 0x0, phy_id 0x01410dd1
[    1.540000] eth0, attach [Marvell 88E1510] phy driver
++ Starting telnet daemon
++ Starting http daemon
++ Starting ftp daemon
++ Starting dropbear (ssh) daemon
++ Starting OLED Display
[    1.580000] pmodoled-gpio-spi [zed_oled] SPI Probing
++ Exporting LEDs & SWs
rcS Complete
zynq>

Właśnie załadował nam się shell systemu i oczekuje na nasze rozkazy 😀

Aby zakończyć pracę z płytą „bezpiecznie” należy przed wyłączeniem za pomocą przycisku wywołać komendę

poweroff

spowoduje ona wywołanie procedur kończących pracę driverów m.in. wyświetlacza OLED.

Pierwsze doświadczenie/program

Spróbujmy zapalić którąś z diod. To co najbardziej podoba mi się ze względu na linuxa, to właśnie sposób myślenia że wszystko może być plikiem… nawet dioda led.
Dostęp do diod i switchy umieszczony jest w katalogu /sys/class/gpio/ . I tak – gpio61 do gpio68 są to diody LED. Natomiast gpio69 do gpio76 są to switche. Kolejność wygląda tak, że niższe numery odpowiadają niższym bitom.
Aby zapalić naszą diodę LD0 (gpio61) należy wykonać

echo 1 > /sys/class/gpio/gpio61/value

Hurra!!! Działa! A teraz aby odczytać wartość na switchu SW0 (gpio69)

cat /sys/class/gpio/gpio69/value

Na dzisiaj tyle.

8 thoughts on “Xilinx Linux – Pierwsze starcie”

    1. Michał Kaczmarek Post author

      Płytę kupiłem bezpośrednio u producenta, gdyż nie było jej jeszcze wtedy dostępnej u nas w kraju. Z tego co pamiętam to było to coś około 400 Euro razem z podatkiem, przesyłką i innymi jakimiś kosztami. Aktualnie można też kupić u polskiego dystrybutora Digilenta – Kamami.pl. Co do cen to zapraszam na ich stronę w celu zapoznania się z ofertą.
      Pozdrawiam,
      Michał Kaczmarek

  1. Katie

    Od nastepnego poniedzialku zaczynam odchudzanie, kto się odchudza ze mna?
    Znalazlam w necie dobry plan na chudniecie, wygoglujcie sobie – Jak szybko schudnąć Kamidoni i zdrowie

  2. Alonzo

    Czesc widzę że chyba nie zarabiasz na swoim blogu.

    Mozesz połączyć swoja pasję z zarobkiem. Szkoda marnować ruchu na stronce.
    Jest sposob zeby wyciągnąć dodatkowo ladna sumkę, wpisz sobie w
    google: jak zarobić na blogu drugą wypłatę

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Rating*