1. 程式人生 > >ZYNQ跑系統 系列(一) 傳統方式移植linux

ZYNQ跑系統 系列(一) 傳統方式移植linux

移植linux之傳統方式

在ZYNQ開發時,有些情況下,為了降低開發的複雜性,或是提升系統執行的效能,在ARM上跑一個linux系統往往是一個不錯的選擇,而且linux系統一般集成了一些常用的成熟驅動,可以減少開發週期。本章將通過傳統u-boot、kernel方式,完成移植。該方式雖然繁瑣複雜,但是畢竟是一種通用的移植方式。

一、搭建硬體環境

  • 1.新建工程,並新建一個 BD 檔案,然後新增一個ZYNQ Processing system的IP核,並設定好與硬體相符合的PS和PL時鐘以及DDR型號
    這裡寫圖片描述
    這裡寫圖片描述
  • 2.新增一些必要外設
    這裡寫圖片描述
    為了看到linux啟動的實驗現象,下面的外設是必備的:

    • SD:SD卡(用於從SD卡啟動u-boot、kernel、PL以及檔案系統)
    • UART:用於列印除錯資訊的串列埠
  • 3.右鍵單擊 Block 檔案,檔案選擇 Generate the Output Products

  • 4.右鍵單擊 Block 檔案,選擇 Create a HDL wrapper,根據 Block 檔案內容產生一個 HDL 的頂層檔案,並選擇讓 vivado 自動完成
  • 5.並綜合實現、生產.bit檔案
  • 6.匯出硬體(包含.bit),待啟動SDK

二、ARM上執行linux前的準備工作

  • -1.電腦上安裝linux環境
  • 0.更新apt-get(可選,加速用)
    在linux系統中開啟/etc/apt目錄下找到sources.list檔案
    將檔案內容替換為
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted 
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties 
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted 
deb-src http://mirrors.aliyun
.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

開啟命令列執行apt-get update重新整理列表

  • 1.安裝相應環境
#安裝32位依賴庫
apt-get install lib32z1 lib32ncurses5 lib32stdc++6 libbz2-1.0:i386
#安裝 Openssl 庫,實現網路的保密性和可靠性的資料傳輸,在編譯u-boot時會用到
apt-get install libssl-dev
#安裝裝置樹編譯器工具
apt-get install device-tree-compiler
#安裝此庫,否則核心編譯時make menuconfig等會報錯
apt-get install libncurses5-dev 
#安裝此庫,否則核心編譯報錯
sudo apt-get install u-boot-tools 
  • 2.安裝vivado
    • 從官網下載WEB版的VIVADO Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin(我已上傳到:Xilinx_Vivado_SDK_2017.1_0415_1_Lin64.bin
    • 執行該.bin,安裝方法以及介面都同WINDOWS版的VIVADO安裝一樣,執行該檔案後首先通過GUI對安裝進行配置
    • 配置到選擇器件支援時,儘可能將不需要的器件勾選掉(減少下載的大小)
    • 配置完成後,等待下載,以及安裝,即可
  • 3.下載
    https://github.com/Xilinx,直接下載官方u-boot和kernel(linux-xlnx-master.zip、u-boot-xlnx-master.tar.gz)
  • 4.編譯u-boot
    • 定位編譯環境source /opt/Xilinx/SDK/2017.1/settings64.sh
    • 進入u-boot目錄cd /home/hlf/mnt/u-boot-xlnx-master
    • 開啟GUI配置u-bootmake menuconfig,但是這個GUI是空白的配置,所以要先載入一下xilinx的預設配置,再做修改(如下)
    • 在menu中,按方向鍵選擇load,回車,載入xinlinx預設配置檔案(輸入zynq_ax7010_defconfig的絕對路徑,我的是/home/hlf/mnt/u-boot-xlnx-master/configs/zynq_ax7010_defconfig
      這裡寫圖片描述
    • 然後將改動好的配置(本章不改動),再save到該路徑,所需配置已儲存到zynq_ax7010_defconfig檔案裡
    • 針對剛剛的配置開始編譯u-boot:
      • make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_ax7010_defconfig#讀配置
      • make CROSS_COMPILE=arm-xilinx-linux-gnueabi-#編譯
      • #arm-xilinx-linux-gnueabi-objdump -h u-boot #檢視 u-boot 檔案的不同段的記憶體分配情況
        到這一步,把u-boot拷貝出來,並加字尾為u-boot.elf,待用
        這裡寫圖片描述
  • 5.生成BOOT.bin
    • 啟動SDK,新建一個FSBL模板,並在檔案中#define FSBL_DEGUG_INFO以便看到除錯資訊,然後編譯生成fsbl.elf
      這裡寫圖片描述
    • 從SDK中將上述fsbl.elf、硬體的.bit檔案、u-boot.elf打包成BOOT.bin
      這裡寫圖片描述
  • 6.生成uImage
    • 進入目錄 cd /home/hlf/mnt/linux-xlnx-master
    • 定位編譯環境 source /opt/Xilinx/SDK/2017.1/settings64.sh
    • 開啟GUI配置核心 make ARCH=arm menuconfig
    • 在GUI中load一下xilinx的預設配置,load的路徑為/home/hlf/mnt/linux-xlnx-master/arch/arm/configs/xilinx_zynq_defconfig
    • 在GUI中進行相關設定後(本章不改動),save到xilinx_zynq_defconfig裡(也可以自己選擇)
    • make ARCH=arm xilinx_zynq_defconfig #讀配置
    • make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- uImage LOADADDR=0x00008000 #編譯核心
    • 編譯完成後,在linux-xlnx-master/arch/arm/boot目錄下可以發現uImage檔案,待用
  • 7.生成devicetree.dtb
    在linux-xlnx-master/arch/arm/boot/dts目錄內新建或者找到zynq-7010.dts檔案,內容為(注意一下串列埠和主頻和硬體是否對應):
/dts-v1/;
/include/ "zynq-7000.dtsi"

/ {
    model = "HLF";
    compatible = "ALINX,zynq", "xlnx,zynq-7000";

    aliases {
        ethernet0 = &gem0;
        serial0 = &uart1;
        spi0 = &qspi;
        mmc0 = &sdhci0;
    };

    [email protected]0 {
        device_type = "memory";
        reg = <0x0 0x20000000>;
    };

    chosen {
        bootargs = "";
        stdout-path = "serial0:115200n8";
    };

    usb_phy0: phy0 {
        compatible = "usb-nop-xceiv";
        #phy-cells = <0>;
        reset-gpios = <&gpio0 46 1>;
    };
};

&clkc {
    ps-clk-frequency = <50000000>;
};

&gem0 {
    status = "okay";
    phy-mode = "rgmii-id";
    phy-handle = <&ethernet_phy>;

    ethernet_phy: ethernet-phy@0 {
        reg = <0>;
    };
};

&qspi {
    u-boot,dm-pre-reloc;
    status = "okay";
};

繼續在linux-xlnx-master目錄下執行命令:./scripts/dtc/dtc -I dts -O dtb -o ./arch/arm/boot/devicetree.dtb ./arch/arm/boot/dts/zynq-7010.dts
然後在linux-xlnx-master/arch/arm/boot/目錄下即可發現devicetree.dtb檔案

  • 8.在SD中,建立檔案系統
    • 下載linaro桌面檔案系統(http://www.linaro.org/),我下載的是linaro-precise-ubuntu-desktop-20120923-436.tar.gz(檔案500多M太大,我無法上傳,所以自己去官網尋覓吧)
    • 將SD卡格式化分割槽,2G的FAT分割槽(分割槽命名為FAT),用於存放BOOT.bin 等檔案,其餘分割槽設為EXT4分割槽(分割槽命名為EXT),用於放置檔案系統
    • 將下載的linaro解壓到EXT分割槽中
    • cd ./binary/boot/filesystem.dir #到此目錄下
    • rsync -av ./ /media/hlf/EXT #同步資料夾(路徑根據實際情況)
  • 9.新建uEnv.txt
    此檔案是為了寫入環境變數bootargs
    在txt檔案中寫入bootargs=console=ttyPS0,115200n8 root=/dev/mmcblk0p2 rw noinitrd rootfstype=ext4 rootwait

三、執行linux

  • 1.將FPGA設定為SD卡啟動
  • 2.將devicetree.dtb、BOOT.bin、uEnv.txt、uImage等檔案,拷貝到記憶體卡的FAT分割槽中
  • 3.FPGA上電,並插上串列埠,執行putty,設定好串列埠引數,工作正常時,打印出如下資訊:
U-Boot 2016.07 (Aug 23 2017 - 15:15:48 +0800)

Model: Zynq ZYBO Development Board
Board: Xilinx Zynq
I2C:   ready
DRAM:  ECC disabled 512 MiB
MMC:   [email protected]: 0
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB
In:    [email protected]
Out:   [email protected]
Err:   [email protected]
Model: Zynq ZYBO Development Board
Board: Xilinx Zynq
Net:   ZYNQ GEM: e000b000, phyaddr 0, interface rgmii-id
I2C EEPROM MAC address read failed
eth0: [email protected]
reading uEnv.txt
93 bytes read in 13 ms (6.8 KiB/s)
Importing environment from SD ...
Hit any key to stop autoboot:  0
Device: [email protected]
Manufacturer ID: 41
OEM: 3432
Name: SD16G
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
reading uEnv.txt
93 bytes read in 13 ms (6.8 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Copying Linux from SD to RAM...
reading uImage
3847608 bytes read in 229 ms (16 MiB/s)
reading devicetree.dtb
10471 bytes read in 23 ms (444.3 KiB/s)
## Booting kernel from Legacy Image at 02080000 ...
   Image Name:   Linux-4.6.0-xilinx
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3847544 Bytes = 3.7 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02000000
   Booting using the fdt blob at 0x2000000
   Loading Kernel Image ... OK
   Loading Device Tree to 1eb0c000, end 1eb118e6 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.6.0-xilinx ([email protected]) (gcc version 4.9.2 (Sourcery CodeBench Lite 2015.05-17) ) #8 SMP PREEMPT Wed Aug 23 15:14:17 CST 2017
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Zynq Miz702n Development Board
cma: Reserved 16 MiB at 0x1f000000
Memory policy: Data cache writealloc
percpu: Embedded 12 pages/cpu @debcd000 s19776 r8192 d21184 u49152
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line:  console=ttyPS0,115200n8 root=/dev/mmcblk0p2 rw noinitrd rootfstype=ext4 rootwait
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 494528K/524288K available (5304K kernel code, 231K rwdata, 1844K rodata, 1024K init, 222K bss, 13376K reserved, 16384K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xe0800000 - 0xff800000   ( 496 MB)
    lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .text : 0xc0008000 - 0xc07fb004   (8141 kB)
      .init : 0xc0800000 - 0xc0900000   (1024 kB)
      .data : 0xc0900000 - 0xc0939da0   ( 232 kB)
       .bss : 0xc0939da0 - 0xc09716e8   ( 223 kB)
Preemptible hierarchical RCU implementation.
        Build-time adjustment of leaf fanout to 32.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
efuse mapped to e0800000
slcr mapped to e0802000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
zynq_clock_init: clkc starts at e0802100
Zynq clock init
sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x4af477f6aa, max_idle_ns: 440795207830 ns
Switching to timer-based delay loop, resolution 3ns
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 551318127 ns
timer #0 at e080a000, irq=17
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 650.00 BogoMIPS (lpj=3250000)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100058
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (1300.00 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor menu
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
vgaarb: loaded
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
media: Linux media interface: v0.10
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
PTP clock support registered
EDAC MC: Ver: 3.0.0
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm_global_timer
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 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.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
futex hash table entries: 512 (order: 3, 32768 bytes)
workingset: timestamp_bits=28 max_order=17 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
xilinx-vdma 43000000.dma: Xilinx AXI VDMA Engine Driver Probed!!
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 143, base_baud = 6250000) is a xuartps
console [ttyPS0] enabled
xdevcfg f8007000.devcfg: ioremap 0xf8007000 to e086e000
[drm] Initialized drm 1.1.0 20060810
Console: switching to colour frame buffer device 128x37
brd: module loaded
loop: module loaded
m25p80 spi0.0: found s25fl256s1, expected n25q128a11
m25p80 spi0.0: s25fl256s1 (32768 Kbytes)
5 ofpart partitions found on MTD device spi0.0
Creating 5 MTD partitions on "spi0.0":
0x000000000000-0x000000100000 : "qspi-fsbl-uboot"
0x000000100000-0x000000600000 : "qspi-linux"
0x000000600000-0x000000620000 : "qspi-device-tree"
0x000000620000-0x000000c00000 : "qspi-rootfs"
0x000000c00000-0x000001000000 : "qspi-bitstream"
CAN device driver interface
gpiod_set_value: invalid GPIO
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 145 (00:0a:35:00:01:22)
RTL8211E Gigabit Ethernet e000b000.etherne:00: attached PHY driver [RTL8211E Gigabit Ethernet] (mii_bus:phy_addr=e000b000.etherne:00, irq=-1)
e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
e0002000.usb supply vbus not found, using dummy regulator
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
EDAC MC: ECC not enabled
Xilinx Zynq CpuIdle Driver started
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using DMA
mmc0: Problem switching card into high-speed mode!
mmc1: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using DMA
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
mmc0: new SDHC card at address 0001
NET: Registered protocol family 10
sit: IPv6 over IPv4 tunneling driver
mmcblk0: mmc0:0001 SD16G 7.50 GiB
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Registering SWP/SWPB emulation handler
hctosys: unable to open rtc device (rtc0)
ALSA device list:
  No soundcards found.
 mmcblk0: p1 p2
mmc1: new high speed MMC card at address 0001
mmcblk1: mmc1:0001 P1XXXX 7.20 GiB
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
mmcblk1boot0: mmc1:0001 P1XXXX partition 1 2.00 MiB
VFS: Mounted root (ext4 filesystem) on device 179:2.
mmcblk1boot1: mmc1:0001 P1XXXX partition 2 2.00 MiB
mmcblk1rpmb: mmc1:0001 P1XXXX partition 3 128 KiB
devtmpfs: mounted
Freeing unused kernel memory: 1024K (c0800000 - c0900000)
init: hwclock main process (706) terminated with status 1e
init: ureadahead main process (707) terminated with status 5
modprobe: FATAL: Could not load /lib/modules/4.6.0-xilinx/modules.dep: No such file or directory

modprobe: FATAL: Could not load /lib/modules/4.6.0-xilinx/modules.dep: No such file or directory

 * Starting mDNS/DNS-SD daemon                                           [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting Mount network filesystems                                    [ OK ]
 * Starting Upstart job to start rpcbind on boot only                    [ OK ]
 * Starting configure network device                                     [ OK ]
 * Starting configure network device                                     [ OK ]
 * Starting Failsafe Boot Delay                                          [ OK ]
 * Stopping Upstart job to start rpcbind on boot only                    [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Stopping Mount network filesystems                                    [ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting Bridge socket events into upstart                            [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Stopping cold plug devices                                            [ OK ]
 * Stopping log initial device creation                                  [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting configure virtual network devices                            [ OK ]
 * Starting save udev log and update rules                               [ OK ]
 * Stopping save udev log and update rules                               [ OK ]
 * Starting RPC portmapper replacement                                   [ OK ]
 * Stopping configure virtual network devices                            [ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting Start this job to wait until rpcbind is started or fails to s[ OK ]
 * Stopping rpcsec_gss daemon                                            [ OK ]
 * Stopping Start this job to wait until rpcbind is started or fails to s[ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
 * Starting CUPS printing spooler/server                                 [ OK ]
 * Starting NSM status monitor                                           [ OK ]
 * Starting configure network device                                     [ OK ]
 * Stopping Failsafe Boot Delay                                          [ OK ]
 * Starting System V initialisation compatibility                        [ OK ]
 * Starting modem connection manager                                     [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
speech-dispatcher disabled; edit /etc/default/speech-dispatcher

saned disabled; edit /etc/default/saned
 * Stopping System V initialisation compatibility                        [ OK ]
 * Starting network connection manager                                   [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting bluetooth daemon                                             [fail]
 * Starting automatic crash report generation                            [ OK ]
 * Starting LightDM Display Manager                                      [ OK ]
 * Starting anac(h)ronistic cron                                         [ OK ]
 * Starting save kernel messages                                         [ OK ]
 * Starting regular background program processing daemon                 [ OK ]
 * Stopping bluetooth daemon                                             [ OK ]
 * Stopping System PulseAudio sound server                               [ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
 * Starting crash report submission daemon                               [ OK ]
Last login: Thu Jan  1 00:01:10 UTC 1970 on tty1
 * Stopping save kernel messages                                         [ OK ]
 * Starting NFSv4 id <-> name mapper                                     [ OK ]
cat: /var/lib/update-notifier/fsck-at-reboot: No such file or directory
run-parts: /etc/update-motd.d/98-fsck-at-reboot exited with return code 1
Welcome to Linaro 12.09 (GNU/Linux 4.6.0-xilinx armv7l)

 * Documentation:  https://wiki.linaro.org/

568 packages can be updated.
325 updates are security updates.

[email protected]:~#
  • 4.就可以在putty中,對linux系統進行操作了
    一些基礎的linux操作,都可以在命令列裡運行了,例如:瀏覽命令ls、網路測試命令ping,甚至如果前期加了網路外設的話,可以直接插網線執行apt-get,linaro檔案系統中自帶了python,在命令列裡,輸入python即可體驗

傳統方法在ZYNQ上移植linux到此就算初步完成了,之後會體驗xilinx的專用開發環境petalinux的強大效果

  • 5.當然還是要體驗一把helloworld了
    在電腦linux環境中,建立一個hello.c:
#include <stdio.h>
int main()
{
    printf("hello hlf\n");
    return 0;
}

在hello.c路徑下,生成可執行檔案:

cd /home/hlf/mnt/zynq_pro #hello.c所在目錄
source /opt/Xilinx/SDK/2017.1/settings64.sh #定位
arm-xilinx-linux-gnueabi-gcc hello.c -o hello -static #生成執行檔案

將ZYNQ關機,取出SD卡
將生成的hello執行檔案,拷貝到SD的EXT分割槽下
插上SD卡,重新對ZYNQ的linux開機後
找到剛剛拷貝的hello檔案,並執行,可以在putty中看到相應的結果

這種通用的傳統方法在ZYNQ上移植linux完成,即可在此基礎上對linux進行使用了。

相關推薦

ZYNQ系統系列 傳統方式移植linux

更多精彩內容,請微信搜尋“FPGAer俱樂部”關注我們。           移植linux之傳統方式 在ZYNQ開發時,有些情況下,為了降低開發的複雜性,或是提升系統執行的效能,在ARM上跑一個linux系統往往是一個不錯的選擇,而且linux系統一般集成了一些常用的

ZYNQ系統 系列 傳統方式移植linux

移植linux之傳統方式 在ZYNQ開發時,有些情況下,為了降低開發的複雜性,或是提升系統執行的效能,在ARM上跑一個linux系統往往是一個不錯的選擇,而且linux系統一般集成了一些常用的成熟驅動,可以減少開發週期。本章將通過傳統u-boot、kern

ZYNQ系統 系列 petalinux方式移植linux

移植linux之petalinux 之前一篇博文中,提到了一種通用的傳統移植方式,將linux移植到ZYNQ中的ARM晶片中。本文將針對xilinx的專用開發環境petalinux,進行入門和開發,本文petalinux的執行環境依然在虛擬機器的linux系統

評分卡系列:講講評分系統的構建

https 決定 not 例如 exc cnblogs 中文 panda 賬戶 作者:JSong 時間:2017.12 我想通過幾篇文章,給評分卡的全流程一個中等粒度的介紹。另外我的本職工作不是消費金融的數據分析,所以本系列的文章會偏技術一些。 數據分析工具主要有Pyth

Linux系統運維常見面試簡答題系列15題

本文所有內容均來自網路,由運維派編輯整理,如內容有不正之處,煩請給予指正,謝謝! 1、請描述下linux 系統的開機啟動過程 開機加電BIOS自檢———–>MBR引導———–>grub引導選單———–>載入核心———–>啟動init程序———–>讀取inittab檔案

.NET Core容器化開發系列——Docker裡面個.NET Core

前言     部落格園中已經有很多如何在Docker裡面執行ASP.NET Core的介紹了。本篇主要介紹一些細節,幫助初學的朋友更加深入地理解如何在Docker中執行ASP.NET Core。 安裝Docker     Do

.NET Core容器化開發系列——Docker裏面個.NET Core

開源鏡像站 final 輸出 快速 image 測試版本 storage gem targe 前言 博客園中已經有很多如何在Docker裏面運行ASP.NET Core的介紹了。本篇主要介紹一些細節,幫助初學的朋友更加深入地理解如何在Docker中運行ASP.NET

Django web開發系列圖書借閱管理系統之需求分析

一 前言 Python selenium系列文章之後,一直想寫關於Django的,把python web開發相關的知識理一理,但卻忙於各種事,拖到了現在。元旦前,部門新進一批圖書,突然,靈光一現,這些書籍如果以後就這樣隨意借出去,散落在幾十號兄弟姐妹手裡,估計,以後找書、借書都要靠喊了。於是,就想開發一

ROS系統MoveIt玩轉雙臂機器人系列--ROS機器人建模

https://www.cnblogs.com/shawn0102/p/8654407.html 注:本篇博文全部原始碼下載地址為:Git Repo。 1. 下載到本地後解壓到當前資料夾然後執行:catkin_make 編譯。 2. 原始碼是在 Ubuntu14.04 + Indigo

大資料系列之分散式釋出訂閱訊息系統KafkaKafka簡介,組成,叢集安裝

1.Kafka簡介   Kafka如同JMS(Java Message Service)一樣,是一箇中間件,在異構系統間通訊,為不同的系統之間提供服務。我們知道JMS通過佇列(一對一)與主題(一對多)兩種形式提供服務,而Kafka則通過主題(topic),來給一組消費者提供

安卓系統原始碼編譯系列——下載安卓系統原始碼教程

最近需要編譯安卓系統,諮詢了一個編譯過安卓系統的朋友,說是下載原始碼就得下載兩天,於是做好了長期抗戰的準備,開始了下載安卓原始碼的旅程。在剛開始下載時,可以參照的內容只有官方教程,於是跟著官方教程一步一步走,遇到問題就百度谷歌,結果發現自己因為經驗不足走了很多彎路,寫下這篇

Hadoop 系列—— 分散式檔案系統 HDFS

一、介紹 HDFS (Hadoop Distributed File System)是 Hadoop 下的分散式檔案系統,具有高容錯、高吞吐量等特性,可以部署在低成本的硬體上。 二、HDFS 設計原理 2.1 HDFS 架構 HDFS 遵循主/從架構,由單個 NameNode(NN) 和多個 Data

浙大人工智慧演算法與系統課程作業指南系列口罩識別的資料處理部分

# 浙大人工智慧演算法與系統課程作業指南系列(一)口罩識別的資料處理部分 寫在前面: 我原來本科的時候並不是計算機專業的,屬於跨考到計算機這個專業的。在本科期間也就接觸了點C的基礎,然後因為是傳統工科,所以Matlab和Fortran也寫過一些程式碼,趁著考完研的暑假繼續學習了一下C++,順便拿B站上能搜

【ABAP自學系列

發的 img api .cn ima code pat 查看 屏幕 一、查看補丁包級別 然後看Patch Level即可。 常用T-code: SE38(寫程序) SE80(屏幕開發) Smartform(開發smartform打印) SE37(可以查看function

基於RTP的h.264視頻傳輸系統設計

-i 感謝 項目 頻率 算術 處理 rop sel 決定 一、H.264 的層次介紹 H.264 定義三個層次,每一個層次支持一組特定的編碼功能。而且按照各個層次指定所指定的功能。基礎層次(baselineprofile)支持 I 幀和 P 幀【1】的幀內和幀間

Linux系統管理

linux redhat 服務器 系統管理 點擊下載:Linux系統管理(一)本文出自 “飛奔的魚兒” 博客,請務必保留此出處http://feiyuer.blog.51cto.com/6967044/1931977Linux系統管理(一)

Linux基礎學習系列

內核版本 比較 其中 問題 測試版 工具 含義 語言 復制   Linux是一種類似於UNIX的操作系統,由Linus Torvalds於1991年在minix操作系統的基礎創建。Linux憑借其優良特性已經成為目前發展潛力最大的操作系統。   Linux的版本有內核版本和

spring boot學習系列

web服務器 應用程序 spring 控制器 做什麽 spring boot開發第一個應用程序1、spring boot是什麽?2、spring boot容易上手嗎?寫這篇文章技術文章,主要是記錄日常的學習以及理解。我們重新認識一下spring假設你受命使用spring開發一個簡單的hel

asp.net core入門教程系列

home padding 方式 title sys 活性 elf tro ash Asp.Net Core簡介 ASP.NET Core 是一個全新的開源、跨平臺框架,可以用它來構建基於網絡連接的現代雲應用程序,比如:Web 應用,IoT(Internet Of Thin

【原創】源碼角度分析Android的消息機制系列——Android消息機制概述

run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許