精华内容
下载资源
问答
  • ZYNQ emmc使用

    千次阅读 2018-12-05 11:27:07
    1)如果使用的是sd0,zynq-zed.dts中已经有配置,不用进行更改 &sdhci0{ u-boot,dm-pre-reloc; status = “okay”; }; 2)如果使用SD1则需要更改设备树 &amp...

    1、设备树更改
    1)如果使用的是sd0,zynq-zed.dts中已经有配置,不用进行更改

    &sdhci0{
    	u-boot,dm-pre-reloc;
    	status = “okay”;
    };
    

    2)如果使用SD1则需要更改设备树

    &sdhci1{
    	u-boot,dm-pre-reloc;
    	status = “okay”;
    };
    

    2、烧写设备树之后/dev下出现mmcblk0,还需要进行分区

    fdisk /dev/mmcblk0
    

    3、分区完成之后/dev下出现mmcblk0p1,初次使用还需要进行格式化,然后就可以mount了

    mkfs.ext2 -T largefile /dev/mmcblk0p1  
    mount /dev/mmcblk0p1 emmc/
    

    4、测试读写速度
    1)测试写速度

    time dd if=/dev/zero bs=1024 count=1000000 of=1Gb.file
    

    2)测试读速度

    time dd if=1Gb.file bs=64k  of=/dev/null
    

    5、硬盘由于强制关机之类的操作会造成一定的损坏,造成部分分区挂载不上,可以使用fsck来修复,文件系统中没有此命令,需要交叉编译e2fsprogs包。
    1)下载源码包

    http://sourceforge.net/projects/e2fsprogs/
    cd arm-tools
    tar xzvf e2fsprogs.tar.gz
    cd e2fsprogs
    mkdir release
    cd release
    

    2)交叉编译

    ../configure CC=arm-linux-gnueabi-gcc --enable-elf-shlibs --build=i686-linux --host=arm-linux --prefix=/home/test/arm_tools/e2fsprogs-1.44.5/release
    make
    make install
    

    3)编译成功之后sbin下有相关命令,复制到开发板/usr/bin目录,复制lib目录下动态库到开发板/lib下,就可以进行磁盘修复了

    fsck.ext4 -p /dev/mmcblk1p1
    

    4)e2fsprogs包中的其他命令
    badblocks
    用来检查设备(通常是硬盘分区)上的坏块
    blkid
    定位并打印出块设备属性的命令行工具
    chattr
    在 ext2 和 ext3 文件系统上改变文件属性
    compile_et
    用来将错误代码(error-code)和相关出错信息的列表 转化为适用于 com_err 库的 C 语言文件
    debugfs
    文件系统调试器。能用来检查和改变 ext2 文件系统的状态
    dumpe2fs
    打印特定设备上现存的文件系统的超级块(super block)和块群(blocks group)的信息
    e2fsck
    用来检查和修复 ext2 和 ext3 文件系统
    e2image
    将关键的 ext2 文件系统数据保存到一个文件中
    e2label
    显示或者改变指定设备上的 ext2 文件系统标识
    findfs
    通过卷标或通用唯一标识符(UUID)寻找文件系统
    fsck
    用来检查或者修理文件系统
    fsck.ext2
    默认检查 ext2 文件系统
    fsck.ext3
    默认检查 ext3 文件系统
    logsave
    把一个命令的输出保存在日志文件中
    lsattr
    列出 ext2 文件系统上的文件属性
    mk_cmds
    将一个包含命令列表的文件转化为适用于子系统库 libss 的 C 源文件
    mke2fs
    用来创建 ext2 或 ext3 文件系统
    mkfs.ext2
    默认创建 ext2 文件系统
    mkfs.ext3
    默认创建 ext3 文件系统
    mklost+found
    在 ext2 文件系统上创建一个 lost+found 目录,并给该目录预分配磁盘数据块,以减轻 e2fsck 命令的负担。
    resize2fs
    可以用来增大或缩小 ext2 文件系统
    tune2fs
    调整 ext2 文件系统的可调参数
    uuidgen
    创建一个新的通用唯一标识符(UUID)。这个新 UUID 可以被认为是在所有已创建的 UUID 中独一无二的,不论是在本地的系统或者别的系统,过去还是将来。
    libblkid
    包含设备识别和节点释放的库函数
    libcom_err
    通用错误显示库
    libe2p
    用于 dumpe2fs, chattr, lsattr
    libext2fs
    允许用户级的程序操作 ext2 文件系统
    libss
    用于 debugfs
    libuuid
    用来给对象产生通用唯一标识符(UUID)使之可以在本地系统之外引用
    6、从应用程序中读取emmc信息
    1)shell命令awk,详解参照https://www.cnblogs.com/xudong-bupt/p/3721210.html,如果想要读取emmc总量,可执行

    df | grep /dev/mmcblk1p1 |awk '{print $2}'
    

    2)如果想在程序中执行shell命令,可使用popen,popen总是和pclose一起出现被使用的。popen() 创建一个管道,通过fork或者invoke一个子进程,然后执行command。返回值在标准IO流中,由于是在管道之中,因此数据流是单向的,command只能产生stdout或者读取stdin,因此type只有两个值:‘w’或‘r’。r表示command从管道中读取数据流,而w表示command的stdout输出到管道中。command无法同时读取和输出。popen返回该FIFO数据流的指针。代码如下:

    int Emmc_Status_Query()
    {
    	char buffer[20];
    	FILE *fp;
    	int chars_read;
    	fp = popen("df | grep vmhgfs-fuse | awk '{print $2}'","r");
    	if(fp != NULL){
    		chars_read = fread(buffer,sizeof(char),20,fp);
    		pclose(fp);
    		if(chars_read <= 0){
    			return -1;
    		}
    		else{
    			printf("total_size:%d\n",atoi(buffer));
    		}
    	}else{
    		return  -1;
    	}
    	return 0;
    }
    
    展开全文
  • Xilinx zynq zynqMP SD EMMC

    千次阅读 2018-07-23 18:49:37
    参考 mmcblk0: error -110 transferring data, sector 266312, nr 240, cmd response 0x900, card status 0xb00 Linux Kernel 4.9, emmc ... AR# 69995 2017.1-2017.4 Zynq UltraScale+ MPSoC: Linux mmcb...

    作者

    QQ群:852283276
    微信:arm80x86
    微信公众号:青儿创客基地
    B站:主页 https://space.bilibili.com/208826118

    参考

    mmcblk0: error -110 transferring data, sector 266312, nr 240, cmd response 0x900, card status 0xb00
    Linux Kernel 4.9, emmc issue

    官网:

    面向 Zynq-7000 SoC、eMMC 的设计咨询 - JEDEC 标准版 4.41 所需的输入保持时间为 3 纳秒
    2015.3 SDK Zynq-7000 eMMC fails reading EXT_CSD reg to check for high speed mode support

    AR# 69995 2017.1-2017.4 Zynq UltraScale+ MPSoC: Linux mmcblk0 error -110 sending stop command, original cmd response 0x900, card status 0xe00 when using Swissbit SD card
    AR# 67157 Zynq UltraScale+ MPSoC: eMMC Programming Solutions
    AR# 71019 Zynq UltraScale+ MPSoC: eMMC Booting Checklist
    AR# 65463 Zynq UltraScale+ MPSoC - What devices are supported for configuration?
    AR# 71825 Zynq UltraScale+ MPSoC SD / eMMC clock has falling edge skew at 200 MHz (SDR104)
    AR# 65676 Zynq UltraScale+ MPSoC, SDIO - SDIO Receiver Auto Tuning Fails In SD104/eMMC 200 Modes
    AR# 69332 2017.1 Zynq UltraScale+ MPSoC:U-boot 需要一个补丁在 HS200 下运行 eMMC
    AR# 69368 2017.1-2018.1 Zynq UltraScale+ MPSoC: How to slow down eMMC from HS200 to High Speed (HS) in FSBL, u-boot and Linux
    AR# 69780 2016.4-2017.4 Zynq UltraScale+ MPSoC: PetaLinux does not correctly override the U-boot environment variables to set SD boot when both eMMC(SDIO0) and SD(SDIO1) are enabled in design
    AR# 69978 Zynq UltraScale+ MPSoC: How to enable UHS (SD 3.0) support for ZCU102 and ZCU106 evaluation board PetaLinux BSPs
    Kernel Boot Failing on Zynq in U-Boot
    SD controller

    Zynq SD boot

    使用MIO40~MIO45,
    397

    让设备树决定emmc的设备号

    添加如下代码,

    struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
    {
    	int err;
    	struct mmc_host *host;
    	int aliasesid;/*add by zhuce*/
    ...
    	aliasesid = of_alias_get_id(dev->of_node, "mmc");
    	if (aliasesid>= 0) {
    		host->index = aliasesid;
    	}
    ...
    }
    

    此时mmc的设备号变了,但是块设备的标号还是没变,先扫描到的为mmcblk0,所以只要在设备树里把要先发现的mmc放到前面就可以保证它的mmc的设备号和块设备号都是0。

    zu emmc降频到HS模式

    发现ftp上传大文件到emmc内核会卡死,尝试降频到HS模式,在linux下只需要修改设备树,uboot和fsbl下降频比较复杂,参考AR69368。

    &sdhci0 {
      no-1-8-v;
    };
    

    降频后还是卡死,但是有改善,可以上传400MB文件,上传1GB文件还是卡死。

    root@zynqmp:~# [   58.230411] random: crng init done
    [  104.514173] init[1]: undefined instruction: pc=0000000000401bd0
    [  104.520513] Code: 3e0ffadc 0749bf19 3e4db43a b0d3e231 (56ade825) 
    [  104.526538] klogd[2051]: undefined instruction: pc=0000007f907a5160
    [  104.527989] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
    [  104.527989] 
    [  104.527995] CPU: 0 PID: 1 Comm: init Tainted: G           O    4.14.0-fdk-1.0.0-20181120.1856 #20
    [  104.527996] Hardware name: xlnx,zynqmp (DT)
    [  104.527998] Call trace:
    [  104.528010] [<ffffff8008088ae8>] dump_backtrace+0x0/0x360
    [  104.528014] [<ffffff8008088e5c>] show_stack+0x14/0x20
    [  104.528019] [<ffffff80089d0320>] dump_stack+0x9c/0xbc
    [  104.528024] [<ffffff800809af98>] panic+0x11c/0x274
    [  104.528029] [<ffffff800809e1a8>] complete_and_exit+0x0/0x20
    [  104.528032] [<ffffff800809ee70>] do_group_exit+0x38/0xa8
    [  104.528037] [<ffffff80080a9108>] get_signal+0x130/0x470
    [  104.528041] [<ffffff8008087df8>] do_signal+0x68/0x650
    [  104.528045] [<ffffff80080887c0>] do_notify_resume+0xc0/0xf0
    [  104.528048] Exception stack(0xffffff800803bec0 to 0xffffff800803c000)
    [  104.528051] bec0: 0000007ffd8b6810 0000000000000000 0000000000000000 0000000000000000
    [  104.528055] bee0: 0000007ffd8b6380 0000000000000000 0000000000000000 0000000000006028
    [  104.528058] bf00: 0000000000000048 003b9aca00000000 00000000fff0334c 000000000001ac10
    [  104.528061] bf20: 0000000000000018 00000003e8000000 00066ff2d7593574 0000182c9dd79931
    [  104.528064] bf40: 0000000000418258 0000007fb589b938 0000000000000874 0000000000418678
    [  104.528067] bf60: 0000000000418640 0000000000418308 0000000000406688 0000000000000000
    [  104.528070] bf80: 0000000000406000 0000000000406000 0000000000406000 00000000ffffff9d
    [  104.528073] bfa0: 0000000000000000 0000007ffd8b6790 0000000000405a58 0000007ffd8b6790
    [  104.528077] bfc0: 0000000000401bd0 0000000060000000 000000000000000b 00000000ffffffff
    [  104.528079] bfe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    [  104.528083] [<ffffff80080836c0>] work_pending+0x8/0x10
    [  104.528087] SMP: stopping secondary CPUs
    [  104.532762] Kernel Offset: disabled
    [  104.532764] CPU features: 0x002004
    [  104.532766] Memory Limit: none
    [  104.707664] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
    [  104.707664] 
    

    ftp截图,这个问题在zynq平台没有出现过。
    在这里插入图片描述
    开启UHS模式,更新FSBL,project-spec/meta-user/recipes-bsp/fsbl/fsbl_%.bbappend

    YAML_COMPILER_FLAGS_append = " -DUHS_MODE_ENABLE"
    

    设备树,

    & sdhci1 {
        /delete-property/ no-1-8-v;
    };
    

    不识别SD卡

    SD卡识别不到都是因为更换了hdf没有更新fsbl的原因,但看了fsbl的源代码,没有相关代码,所以应该是hw project的系统初始化中的相关代码,更改后识别到ZC706 SD卡,

    mmc0: new high speed SDHC card at address 59b4
    mmcblk0: mmc0:59b4 SDU1  14.8 GiB 
     mmcblk0: p1 p2 p3
    

    uboot sdhci_set_clock: Internal clock never stabilised

    uboot下打印sdhci_set_clock: Internal clock never stabilised.
    FPGA使用了SD1,uboot中为SD0

    uboot sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.

    uboot下访问emmc失败

    zynq-uboot> mmcinfo
    sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 400 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 800 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 1600 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 3200 ms.
    sdhci_send_command: MMC: 0 busy timeout.
    

    SD采用MIO,时钟50MHz,更新fsbl,正确显示,SD采用EMIO,则必须添加约束,

    zynq-uboot> mmcinfo
    Device: zynq_sdhci
    Manufacturer ID: 45
    OEM: 100
    Name: DG400 
    Tran Speed: 52000000
    Rd Block Len: 512
    MMC version 4.0
    High Capacity: Yes
    Capacity: 7.3 GiB
    Bus Width: 4-bit
    Erase Group Size: 512 KiB
    

    uboot 2015.04 petalinux2015.2.1 ext4write报错

    Bytes transferred = 3652736 (37bc80 hex)
    Device: zynq_sdhci
    Manufacturer ID: 45
    OEM: 100
    Name: DG400 
    Tran Speed: 52000000
    Rd Block Len: 512
    MMC version 4.0
    High Capacity: Yes
    Capacity: 7.3 GiB
    Bus Width: 4-bit
    Erase Group Size: 512 KiB
    File System is consistent
    sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 400 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 800 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 1600 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 3200 ms.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    Error in getting the block group descriptor table
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext2fs_devread() read error **
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    error in File System init
    ** Error ext4fs_write() **
    ** Unable to write file /boot/uImage **
    

    更改u-boot,

    /*add_sdhci(host, 52000000, 52000000 >> 9);*/
    add_sdhci(host, CONFIG_ZYNQ_SDHCI_WORK_FREQ, CONFIG_ZYNQ_SDHCI_WORK_FREQ >> 9);
    

    linux3.19 petalinux2015.2.1 内核正常启动

    Driver 'mmcblk' needs updating - please use bus_type methods
    sdhci: Secure Digital Host Controller Interface driver
    sdhci: Copyright(c) Pierre Ossman
    sdhci-pltfm: SDHCI platform and OF driver helper
    sdhci-arasan e0100000.sdhci: No vmmc regulator found
    sdhci-arasan e0100000.sdhci: No vqmmc regulator found
    mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
    ...
    mmc0: new high speed MMC card at address 0001
    mmcblk0: mmc0:0001 DG4008 7.28 GiB 
    mmcblk0boot0: mmc0:0001 DG4008 partition 1 4.00 MiB
    mmcblk0boot1: mmc0:0001 DG4008 partition 2 4.00 MiB
    mmcblk0rpmb: mmc0:0001 DG4008 partition 3 4.00 MiB
     mmcblk0: p1
    EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
    EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
    VFS: Mounted root (ext4 filesystem) on device 179:1.
    

    petalinux2015.2.1 内核启动报错mmcblk0rpmb无法访问

    报错mmcblk0rpmb无法访问,原因待定位,

    mmc0: new high speed MMC card at address 0001
    mmcblk0: mmc0:0001 DG4008 7.28 GiB 
    mmcblk0boot0: mmc0:0001 DG4008 partition 1 4.00 MiB
    mmcblk0boot1: mmc0:0001 DG4008 partition 2 4.00 MiB
    mmcblk0rpmb: mmc0:0001 DG4008 partition 3 4.00 MiB
     mmcblk0: p1
    EXT4-fs (ram0): mounted filesystem with ordered data mode. Opts: (null)
    VFS: Mounted root (ext4 filesystem) on device 1:0.
    devtmpfs: mounted
    Freeing unused kernel memory: 224K (40686000 - 406be000)
    INIT: version 2.88 booting
    mount: mounting devtmpfs on /dev failed: Device or resource busy
    EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mount: mounting /dev/mmcblk0rpmb on /run/media/mmcblk0rpmb failed: Invalid argument
    mount: mounting /dev/mmcblk0boot0 on /run/media/mmcblk0boot0 failed: Invalid argument
    mount: mounting /dev/mmcblk0boot1 on /run/media/mmcblk0boot1 failed: Invalid argument
    sh: /sys/block/mmcblk0/mmcblk0p1: unknown operand
    mount: mounting /dev/mmcblk0 on /run/media/mmcblk0 failed: Device or resource busy
    EXT4-fs (ram0): re-mounted. Opts: data=ordered
    

    用不到该分区,所以修改mdev的脚本,屏蔽这个分区,

    #!/bin/sh
    MDEV_AUTOMOUNT=y
    MDEV_AUTOMOUNT_ROOT=/run/media
    [ -f /etc/default/mdev ] && . /etc/default/mdev
    if [ "${MDEV_AUTOMOUNT}" = "n" ] ; then
    	exit 0
    fi
    
    case "$ACTION" in
    	add|"")
    		ACTION="add"
    		exit 0
    		# check if already mounted
    		if grep -q "^/dev/${MDEV} " /proc/mounts ; then
    			# Already mounted
    			exit 0
    		fi
    		DEVBASE=`expr substr $MDEV 1 3`
    		if [ "${DEVBASE}" == "mmc" ] ; then
    			DEVBASE=`expr substr $MDEV 1 7`
    			DEVLEN=`expr length "$MDEV"`
    			if [ $DEVLEN -gt 9 ]; then
    				exit 0
    			fi
    		fi
    		# check for "please don't mount it" file
    		if [ -f "/dev/nomount.${DEVBASE}" ] ; then
    			# blocked
    			exit 0
    		fi
    		# check for full-disk partition
    		if [ "${DEVBASE}" == "${MDEV}" ] ; then
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}*1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}p1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ ! -f "/sys/block/${DEVBASE}/size" ] ; then
    				# No size at all
    				exit 0
    			fi
    			if [ `cat /sys/block/${DEVBASE}/size` == 0 ] ; then
    				# empty device, bail out
    				exit 0
    			fi
    		fi
    		# first allow fstab to determine the mountpoint
    		if ! mount /dev/$MDEV > /dev/null 2>&1
    		then
    			if [ ! -d ${MDEV_AUTOMOUNT_ROOT} ]; then
    				mkdir ${MDEV_AUTOMOUNT_ROOT}
    			fi
    			MOUNTPOINT="${MDEV_AUTOMOUNT_ROOT}/$MDEV"
    			mkdir "$MOUNTPOINT"
    			mount -t auto /dev/$MDEV "$MOUNTPOINT"
    		fi
    		;;
    	remove)
    		MOUNTPOINT=`grep "^/dev/$MDEV\s" /proc/mounts | cut -d' ' -f 2`
    		if [ ! -z "$MOUNTPOINT" ]
    		then
    			umount "$MOUNTPOINT"
    			rmdir "$MOUNTPOINT"
    		else
    			umount /dev/$MDEV
    		fi
    		;;
    	*)
    		# Unexpected keyword
    		exit 1
    		;;
    esac
    

    linux3.19 petalinux2015.2.1 内核启动报错

    原因定位为uboot MAPSZ配置错误。

    Driver 'mmcblk' needs updating - please use bus_type methods
    sdhci: Secure Digital Host Controller Interface driver
    sdhci: Copyright(c) Pierre Ossman
    sdhci-pltfm: SDHCI platform and OF driver helper
    sdhci-arasan e0100000.sdhci: No vmmc regulator found
    sdhci-arasan e0100000.sdhci: No vqmmc regulator found
    mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
    ...
    mmc0: new high speed MMC card at address 0001
    Unable to handle kernel NULL pointer dereference at virtual address 00000220
    pgd = 40004000
    [00000220] *pgd=00000000
    Internal error: Oops - BUG: 805 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 6 Comm: kworker/u4:0 Not tainted 3.19.0-1.0.0 #35
    Hardware name: Xilinx Zynq Platform
    Workqueue: kmmcd mmc_rescan
    task: 7f02f080 ti: 7f062000 task.ti: 7f062000
    PC is at mmc_blk_alloc_req+0x194/0x358
    LR is at try_to_wake_up+0x270/0x288
    pc : [<403aec68>]    lr : [<4003d570>]    psr: 60000113
    sp : 7f063dc0  ip : 7f763ad0  fp : 406fc67c
    r10: 7f2b3008  r9 : 7f26dc08  r8 : 00000000
    r7 : 00000000  r6 : 00000000  r5 : 7f2b3000  r4 : 7f26dc00
    r3 : 00000000  r2 : 404f5bf0  r1 : 60000113  r0 : 00000000
    Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
    Control: 18c5387d  Table: 0000404a  DAC: 00000015
    Process kworker/u4:0 (pid: 6, stack limit = 0x7f062238)
    Stack: (0x7f063dc0 to 0x7f064000)
    3dc0: 00000000 401d5cd0 00e90e80 00000000 000008f5 7f2b3008 4072c35c 4027aec4
    3de0: 00000001 00000001 7f2b3000 4072c338 00000000 403af864 00000000 00000000
    3e00: 00000001 7f0f6998 6ea4f538 40606009 6ea4f308 00000001 406fc324 4072c338
    3e20: 00000000 40107fa0 7f2b3008 7f2b3008 4072c35c 4027aec4 406fc67c 00000001
    3e40: 406fc324 4072c338 00000000 4027ad84 00000000 7f2b3008 4027aec4 7f2b3808
    3e60: 00000000 40279764 7f2ab970 7f0cd4b8 7f2b3008 406fc27c 7f2b303c 4027acb8
    3e80: 7f2b3008 406fc27c 7f2b3008 4027a428 7f2b3008 7f2b3010 00000000 40278cd8
    3ea0: 7f2b3008 40611891 00000000 7f2b3ad8 7f2b3000 7f2b3008 405d58aa 00061a80
    3ec0: 404f561c 00000000 7f02d860 403a5d94 405d58aa 405d58aa 4061193f 00000001
    3ee0: 7f2b3800 00000000 00000000 403a85e0 7f2b3800 40ff8080 00000000 7f2b3a2c
    3f00: 7f2b3800 403a562c 7f028880 7f2b3a2c 7f02d800 00000000 7f0a8d00 40032288
    3f20: 7f028880 7f2b3a2c 00000088 7f028880 7f02d800 7f028898 406c2100 7f02d814
    3f40: 7f02d994 4003273c 7f029680 00000000 7f028880 400325b4 00000000 00000000
    3f60: 00000000 40035fc8 c1572f63 00000000 0a30e91e 7f028880 00000000 00000000
    3f80: 7f063f80 7f063f80 00000000 00000000 7f063f90 7f063f90 7f063fac 7f029680
    3fa0: 40035ef0 00000000 00000000 4000dd40 00000000 00000000 00000000 00000000
    3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e0068ce0 14278861
    [<403aec68>] (mmc_blk_alloc_req) from [<403af864>] (mmc_blk_probe+0x7c/0x2a0)
    [<403af864>] (mmc_blk_probe) from [<4027ad84>] (driver_probe_device+0x8c/0x1cc)
    [<4027ad84>] (driver_probe_device) from [<40279764>] (bus_for_each_drv+0x84/0x94)
    [<40279764>] (bus_for_each_drv) from [<4027acb8>] (device_attach+0x64/0x88)
    [<4027acb8>] (device_attach) from [<4027a428>] (bus_probe_device+0x28/0x80)
    [<4027a428>] (bus_probe_device) from [<40278cd8>] (device_add+0x3bc/0x4c8)
    [<40278cd8>] (device_add) from [<403a5d94>] (mmc_add_card+0x19c/0x20c)
    [<403a5d94>] (mmc_add_card) from [<403a85e0>] (mmc_attach_mmc+0xb0/0x128)
    [<403a85e0>] (mmc_attach_mmc) from [<403a562c>] (mmc_rescan+0x264/0x2b4)
    [<403a562c>] (mmc_rescan) from [<40032288>] (process_one_work+0x13c/0x21c)
    [<40032288>] (process_one_work) from [<4003273c>] (worker_thread+0x188/0x288)
    [<4003273c>] (worker_thread) from [<40035fc8>] (kthread+0xd8/0xec)
    [<40035fc8>] (kthread) from [<4000dd40>] (ret_from_fork+0x14/0x34)
    Code: e0060693 e5826004 e59f21b8 e5943004 (e5832220) 
    ---[ end trace 834c0d842203f8e0 ]---
    Unable to handle kernel paging request at virtual address ffffffec
    pgd = 40004000
    [ffffffec] *pgd=3ff7e821, *pte=00000000, *ppte=00000000
    Internal error: Oops - BUG: 17 [#2] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 6 Comm: kworker/u4:0 Tainted: G      D        3.19.0-1.0.0 #35
    Hardware name: Xilinx Zynq Platform
    task: 7f02f080 ti: 7f062000 task.ti: 7f062000
    PC is at kthread_data+0x4/0xc
    LR is at wq_worker_sleeping+0xc/0x9c
    pc : [<4003644c>]    lr : [<40032b08>]    psr: 00000193
    sp : 7f063af8  ip : 7f02f0c8  fp : 7f063b84
    r10: 406c8fc0  r9 : 00000000  r8 : 7f02f314
    r7 : 406be600  r6 : 7f062000  r5 : 7f02f080  r4 : 00000000
    r3 : 00000000  r2 : 7f75a600  r1 : 00000000  r0 : 7f02f080
    Flags: nzcv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
    Control: 18c5387d  Table: 0000404a  DAC: 00000015
    Process kworker/u4:0 (pid: 6, stack limit = 0x7f062238)
    Stack: (0x7f063af8 to 0x7f064000)
    3ae0:                                                       7f75a600 404a7ef4
    3b00: 0000001a 00000013 00000004 00000008 7f02f0f0 7f063b00 7f030040 7f030544
    3b20: 7f02f290 7f02f080 00000001 4003458c 7f75abc0 40058450 7f02f080 406bd248
    3b40: 00000000 7f030040 7f030544 40021c2c 00000005 00000000 00000000 00000001
    3b60: 7f062000 7f02f080 7f06396c 7f02a9c0 7f063b98 00000001 7f02f290 403aec68
    3b80: 7f063be3 400223f0 7f063be3 4004ee90 405ce445 7f063bb4 7f063b98 7f063b98
    3ba0: 00000002 40704684 0000000b 403aec6a 00000000 7f063c12 406cc99c 403aec68
    3bc0: 7f063be3 40011004 7f062238 0000000b 00000000 00000008 60000113 00000000
    3be0: 65000000 30363030 20333936 32383565 34303036 39356520 62313266 35652038
    3c00: 30333439 28203430 33383565 30323232 40002029 7f063c34 00000000 00000220
    3c20: 00000805 7f063d78 00000000 7f02f080 00000000 00000805 406fc67c 404a55b4
    3c40: 7f063d78 40019970 04208060 ffff8b49 00000000 406c2100 406c2080 00000009
    3c60: 7f063d88 00000000 00000000 406bdab4 00000012 7f002400 00000010 404c8fbc
    3c80: 7f063d88 40023a3c 7f112b00 7f112b00 00000000 00000000 ffffffff 406cfa80
    3ca0: 7f063cfc 4003ba14 401dbdb0 00000113 00000000 00000805 406cd7cc 00000220
    3cc0: 7f063d78 00000000 7f26dc08 7f2b3008 406fc67c 4000847c 00000000 7f02f080
    3ce0: 406be600 40040fb8 7f763600 00000000 00000000 7f763600 7f763600 7f112ef4
    3d00: 406be600 00000000 00000001 7f763600 7f063d24 4003a210 00000d13 7f112b00
    3d20: 7f063d4c 4003a270 00000d13 7f112b00 7f763600 7f112ef4 406be600 00000000
    3d40: 00000001 406c8fc0 7f063d7c 4003d3b0 00000000 60000113 7f063d58 7f26dc08
    3d60: 00000000 403aec68 60000113 ffffffff 7f063dac 40011698 00000000 60000113
    3d80: 404f5bf0 00000000 7f26dc00 7f2b3000 00000000 00000000 00000000 7f26dc08
    3da0: 7f2b3008 406fc67c 7f763ad0 7f063dc0 4003d570 403aec68 60000113 ffffffff
    3dc0: 00000000 401d5cd0 00e90e80 00000000 000008f5 7f2b3008 4072c35c 4027aec4
    3de0: 00000001 00000001 7f2b3000 4072c338 00000000 403af864 00000000 00000000
    3e00: 00000001 7f0f6998 6ea4f538 40606009 6ea4f308 00000001 406fc324 4072c338
    3e20: 00000000 40107fa0 7f2b3008 7f2b3008 4072c35c 4027aec4 406fc67c 00000001
    3e40: 406fc324 4072c338 00000000 4027ad84 00000000 7f2b3008 4027aec4 7f2b3808
    3e60: 00000000 40279764 7f2ab970 7f0cd4b8 7f2b3008 406fc27c 7f2b303c 4027acb8
    3e80: 7f2b3008 406fc27c 7f2b3008 4027a428 7f2b3008 7f2b3010 00000000 40278cd8
    3ea0: 7f2b3008 40611891 00000000 7f2b3ad8 7f2b3000 7f2b3008 405d58aa 00061a80
    3ec0: 404f561c 00000000 7f02d860 403a5d94 405d58aa 405d58aa 4061193f 00000001
    3ee0: 7f2b3800 00000000 00000000 403a85e0 7f2b3800 40ff8080 00000000 7f2b3a2c
    3f00: 7f2b3800 403a562c 7f028880 7f2b3a2c 7f02d800 00000000 7f0a8d00 40032288
    3f20: 7f028880 7f2b3a2c 00000088 7f028880 7f02d800 7f028898 406c2100 7f02d814
    3f40: 7f02d994 4003273c 7f029680 00000000 7f028880 400325b4 00000000 00000000
    3f60: 00000000 40035fc8 c1572f63 00000000 0a30e91e 7f028880 00000000 00000000
    3f80: 7f063f80 7f063f80 00000001 00010001 7f063f90 7f063f90 7f063fac 7f029680
    3fa0: 40035ef0 00000000 00000000 4000dd40 00000000 00000000 00000000 00000000
    3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e0068ce0 14278861
    [<4003644c>] (kthread_data) from [<40032b08>] (wq_worker_sleeping+0xc/0x9c)
    [<40032b08>] (wq_worker_sleeping) from [<404a7ef4>] (__schedule+0xf4/0x448)
    [<404a7ef4>] (__schedule) from [<400223f0>] (do_exit+0x79c/0x7cc)
    [<400223f0>] (do_exit) from [<40011004>] (die+0x2ac/0x3a4)
    [<40011004>] (die) from [<404a55b4>] (__do_kernel_fault.part.11+0x54/0x74)
    [<404a55b4>] (__do_kernel_fault.part.11) from [<40019970>] (do_page_fault+0x320/0x370)
    [<40019970>] (do_page_fault) from [<4000847c>] (do_DataAbort+0x34/0x98)
    [<4000847c>] (do_DataAbort) from [<40011698>] (__dabt_svc+0x38/0x60)
    Exception stack(0x7f063d78 to 0x7f063dc0)
    3d60:                                                       00000000 60000113
    3d80: 404f5bf0 00000000 7f26dc00 7f2b3000 00000000 00000000 00000000 7f26dc08
    3da0: 7f2b3008 406fc67c 7f763ad0 7f063dc0 4003d570 403aec68 60000113 ffffffff
    [<40011698>] (__dabt_svc) from [<403aec68>] (mmc_blk_alloc_req+0x194/0x358)
    [<403aec68>] (mmc_blk_alloc_req) from [<403af864>] (mmc_blk_probe+0x7c/0x2a0)
    [<403af864>] (mmc_blk_probe) from [<4027ad84>] (driver_probe_device+0x8c/0x1cc)
    [<4027ad84>] (driver_probe_device) from [<40279764>] (bus_for_each_drv+0x84/0x94)
    [<40279764>] (bus_for_each_drv) from [<4027acb8>] (device_attach+0x64/0x88)
    [<4027acb8>] (device_attach) from [<4027a428>] (bus_probe_device+0x28/0x80)
    [<4027a428>] (bus_probe_device) from [<40278cd8>] (device_add+0x3bc/0x4c8)
    [<40278cd8>] (device_add) from [<403a5d94>] (mmc_add_card+0x19c/0x20c)
    [<403a5d94>] (mmc_add_card) from [<403a85e0>] (mmc_attach_mmc+0xb0/0x128)
    [<403a85e0>] (mmc_attach_mmc) from [<403a562c>] (mmc_rescan+0x264/0x2b4)
    [<403a562c>] (mmc_rescan) from [<40032288>] (process_one_work+0x13c/0x21c)
    [<40032288>] (process_one_work) from [<4003273c>] (worker_thread+0x188/0x288)
    [<4003273c>] (worker_thread) from [<40035fc8>] (kthread+0xd8/0xec)
    [<40035fc8>] (kthread) from [<4000dd40>] (ret_from_fork+0x14/0x34)
    Code: e513001c e7e00150 e12fff1e e5903268 (e5130014) 
    ---[ end trace 834c0d842203f8e1 ]---
    Fixing recursive fault but reboot is needed!
    
    展开全文
  • ZYNQ板Linux系统启动后,使用ls /dev查看EMMC设备,如下: 2.使用fdisk对EMMC进行分区 mmcblk0对应SD卡,mmcblk1对应EMMC,当没有对EMMC进行分区时,上图中没有mmcblk1p1,使用下图步骤对EMMC进行分区: 3.使用...
    1.查看EMMC设备
    ZYNQ板Linux系统启动后,使用ls /dev查看EMMC设备,如下:
    

    ls /dev打印信息

    2.使用fdisk对EMMC进行分区
    mmcblk0对应SD卡,mmcblk1对应EMMC,当没有对EMMC进行分区时,上图中没有mmcblk1p1,使用下图步骤对EMMC进行分区:
    

    3.使用fdisk对EMMC删除分区

    展开全文
  • zynq emmc 启动模式

    千次阅读 2018-11-21 15:55:22
    前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量。 BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越来越大,将它们都放在16MB的QSPI Flash上有点...

    原文地址:https://blog.csdn.net/vacajk/article/details/53908666

    前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量。
    BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越来越大,将它们都放在16MB的QSPI Flash上有点危险,而且下载起来也不太方便。

    所以准备将u-boot和kernel的存储位置分开,将包含u-boot的BOOT.bin烧录在QSPI Flash当中,将image.ub文件直接放在eMMC中进行启动。

     

    step1:eMMC存储空间分区

    参考文档网址:http://zedboard.org/sites/default/files/design/PicoZed_Petalinux_2015_2_eMMC_boot_v3.0_0.zip

    前面我配置的方式是BOOT.bin和image.ub都在QSPI Flash当中,这样我才能正常启动Linux,来给eMMC提前进行分区。

     

    因为我的板子上没有SD卡,所以禁用了PS的SD0外设,最终我的eMMC芯片挂载到了mmcblk0上。(假如既有SD卡<SD0>又有eMMC<SD1>,一般情况下SD卡会是mmcblk0,eMMC会是mmcblk1)

    启动板子,输入用户名密码后,进行分区。按照手册上的说明,分一个128MB的分区出来,并格式化成FAT32.

    下面是我的分区和格式化过程:

     

    root@ifc_petalinux:~# fdisk /dev/mmcblk0

    The number of cylinders for this disk is set to 117504.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
       (e.g., DOS FDISK, OS/2 FDISK)

    Command (m for help): p

    Disk /dev/mmcblk0: 3850 MB, 3850371072 bytes
    4 heads, 16 sectors/track, 117504 cylinders
    Units = cylinders of 64 * 512 = 32768 bytes

            Device Boot      Start         End      Blocks  Id System

    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-117504, default 1): Using default value 1
    Last cylinder or +size or +sizeM or +sizeK (1-117504, default 117504): +128M


    Command (m for help): t
    Partition number (1-4): 1
    Hex code (type L to list codes): L

     0 Empty                  1b Hidden Win95 FAT32     9f BSD/OS                
     1 FAT12                  1c Hidden W95 FAT32 (LBA) a0 Thinkpad hibernation  
     4 FAT16 <32M             1e Hidden W95 FAT16 (LBA) a5 FreeBSD               
     5 Extended               3c Part.Magic recovery    a6 OpenBSD               
     6 FAT16                  41 PPC PReP Boot          a8 Darwin UFS            
     7 HPFS/NTFS              42 SFS                    a9 NetBSD                
     a OS/2 Boot Manager      63 GNU HURD or SysV       ab Darwin boot           
     b Win95 FAT32            80 Old Minix              b7 BSDI fs               
     c Win95 FAT32 (LBA)      81 Minix / old Linux      b8 BSDI swap             
     e Win95 FAT16 (LBA)      82 Linux swap             be Solaris boot          
     f Win95 Ext'd (LBA)      83 Linux                  eb BeOS fs               
    11 Hidden FAT12           84 OS/2 hidden C: drive   ee EFI GPT               
    12 Compaq diagnostics     85 Linux extended         ef EFI (FAT-12/16/32)    
    14 Hidden FAT16 <32M      86 NTFS volume set        f0 Linux/PA-RISC boot    
    16 Hidden FAT16           87 NTFS volume set        f2 DOS secondary         
    17 Hidden HPFS/NTFS       8e Linux LVM              fd Linux raid autodetect 
    Hex code (type L to list codes): b
    Changed system type of partition 1 to b (Win95 FAT32)

    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table
     mmcblk0: p1
    root@ifc_petalinux:~# 

    mkdosfs -F 32 /dev/mmcblk0p1
     

     

     

    step2:配置u-boot从eMMC引导启动PetaLinux

    执行命令:

    petalinux-config
    配置启动方式,将kernel启动配置为eMMC启动:

    #Subsystem AUTO Hardware Settings --->
    #   Advanced bootable images storage Settings --->
    #       boot image settings --->
    #           image storage media ---> primary flash
    #       kernel image settings --->
    #           image storage media ---> primary sd
    #       SD/SDIO Settings ----> ps_sd1
    其中的SD/SDIO Settings一定要配置为eMMC对应的SD1。

    重新编译:

    petalinux-build
    编译完成后,重新使用Windows的Xilinx SDK将:zynq_fsbl.elf--->IFC_TOP_wrapper.bit--->u-boot.elf三个文件打包成BOOT.bin文件,改名为BOOT_EMMC.bin。

    将BOOT.bin和image.ub文件复制到U盘上,然后把U盘插到板子的USB口。

    mkdir /mnt/usb
    mkdir /mnt/emmc
    #挂载usb和emmc
    mount /dev/sda1 /mnt/usb
    mount /dev/mmcblk0p1 /mnt/emmc
    #复制image.ub到emmc第一个分区mmcblk0p1
    cp /mnt/usb/image.ub /mnt/emmc
    #复制BOOT_EMMC.bin到QSPI FLASH第一个分区mtd0
    flashcp /mnt/usb/BOOT_EMMC.bin /dev/mtd0
    #接触挂载
    umount /mnt/usb
    umount /mnt/emmc
    假如出现:FAT-fs (sda1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

    说明上次U盘没有正确移除,可能会造成image.ub的复制错误。需要在windows中修复一下U盘,再重新进行上面的操作。

    重新启动板子:

    shutdown now -r
    这一次板子就能够从QSPI运行FSBL,加载bit,运行u-boot,

    然后u-boot从eMMC芯片引导加载Linux操作系统。

     

    eMMC最终被我分为了3个区,

    第一个分区用来存放image.ub或者将来的设备树等文件,128MB

    第二个分区用来存放用户数据,2048MB

    第三个分区用来存放库文件,如opencv的库,剩余的1个多GB

     

    待改进:

    eMMC默认是有两个16MB的boot分区的,而且还支持加密什么的,是否可以把u-boot和image.ub放到里面去。

    并且两个boot分区可在系统升级时进行切换。好复杂,将来有时间再研究吧。
    --------------------- 
    作者:vacajk 
    来源:CSDN 
    原文:https://blog.csdn.net/vacajk/article/details/53908666 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 暂时不清楚是不是zynq下ps 接口sdio是不是不支持中断模式的操作。 由于ucos下自带的文件系统不支持emmc的读写。所以只能使用其他的文件系统对emmc进行读写操作。 在导出到sdk后新建基于standalone的工程文件,在...
  • ZYNQ EMMC在sdk中实现文件读写笔记

    千次阅读 2019-10-29 09:19:15
    https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/zynq-emmc-sdk-%E6%B5%8B%E8%AF%95%E6%A1%88%E4%BE%8B-in-vivado2016-4/m-p/948864 (zynq emmc sdk 测试...
  • ZYNQ7000_emmc_文件系统

    2019-03-26 17:00:04
    ZYNQ7000_emmc_文件系统 一、目标 二、根文件系统的修改 三、从emmc启动根文件系统 四、设置终端登录 一、目标 1、修改根文件系统 2、从emmc启动根文件系统 3、设置从终端登录 二、根文件系统的修改 从...
  • ZYNQ7000 EMMC/SD硬件测试

    2020-08-19 21:45:07
    1.EMMC裸机读写测试 方法:使用了 XILINX SDK 库函数实现读写,先往 EMMC 里面写 1024 个数据,然后读出来对比 #include <stdio.h> #include "xparameters.h" #include "xil_exception.h" #include "xsdps....
  • zynq ucos和emmc的使用

    2019-09-03 13:58:07
    在使用ucos时候进行配置SD卡可以正常读写 ,但是在对emmc的接口配置完毕后发现无法通过初始化, 经过数次尝试发现官方手册介绍ucos下的文件系统不支持emmc,如果需要支持需要购买正版的。 ...
  • ZYNQ EMMC/FLASH/SD卡硬件性能测试

    千次阅读 2020-07-01 10:02:50
    方法:使用了 XILINX SDK 库函数实现读写,先往 EMMC 里面写 1024 个数据,然后读出来对比; #include <stdio.h> #include "xparameters.h" #include "xil_exception.h" #include "xsdps.h" #include "xil_...
  • Zynq7020 EMMC与SD卡之间的问题

    千次阅读 2019-06-24 18:00:02
    我们的开发板是有一个EMMC和一个SD卡的,自带的uboot默认是从SD0启动,然而刚好我的EMMC就是在SD0上,但为了调试方便我希望在SD卡上启动,也就是在SD1上启动,这就存在了问题,我该如何修改才能实现此功能呢?...
  • #include <stdio.h> #include “xparameters.h” ...static XSdPs ps7_EMMC; XSdPs_Config * EMMC_Config; u8 WR_Buf[1024]; u8 RD_Buf[1024]; u8 Emmc_ExtCsd[1024]; int main() { u32 i; s32 Statu
  • ZYNQ实验板带有SD卡(SD0)和eMMC芯片(SD1),计划从SD卡启动系统,将镜像文件加载到eMMC,并最终从QSPI和eMMC引导系统。 需要准备2份PetaLinux 2018.3版本的系统文件BOOT.BIN和image.ub:一份用于从SD卡启动,...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

emmczynq