linux emmc,自制emmc烧录器

本篇文章给大家谈谈linux emmc,以及自制emmc烧录器对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

command使用EMMC指令控制Linux系统emmclinux

开机

Linux系统是当今先见的操作系统之一,它的开机过程是通过EMMC命令控制的。EMMC指令是由系统完成,系统启动后可以执行该指令,来控制Linux系统的开机过程。

首先,EMMC指令可以用来初始化基础硬件组件,包括CPU、内存和I/O设备,以准备系统启动。其次,它可以用来启动BIOS并加载引导程序。这样,引导程序就可以访问可引导介质来读取操作系统。最后,EMMC指令还可以完成操作系统的配置工作,例如配置内存地址空间和设备树。

以下代码为示例,是EMMC指令控制Linux系统开机过程的基本示例:

//Initialize basic hardware components

EMMC(0x00, 0x01);

EMMC(0x02, 0x04);

//Load BIOS and bootloader

EMMC(0x03, 0x08);

//Set up OS environment

EMMC(0x04, 0x10);

EMMC(0x05, 0x20);

最后,EMMC指令控制Linux系统开机是一个复杂的过程,它包含了多个操作。只有在每一步都执行正确时,系统才可以正确启动。因此,在操作过程中,要特别注意每一步的控制命令,避免出现错误。

Linux下编写EMMC驱动程序linuxemmc

Linux内核本身提供对eMMC存储器的支持,主要针对eMMC4.4的支持;但有时候需要自行编写一个eMMC驱动程序;以下是一些如何编写Linux下的eMMC驱动程序的基本步骤:

1、首先需要自己熟悉eMMC标准以及了解相应的硬件相关信息;

2、然后,需要在Linux内核模块代码中定义一个合适的数据结构用于保存eMMC硬件信息;

3、接下来,需要在 Linux内核模块中添加相应的初始化函数用于硬件设备的初始化,用以设定硬件引脚,使能eMMC控制器,wijf等;

4、添加eMMC的核心函数,编写函数来处理eMMC的主要功能,比如读、写、读数据、写数据等;

5、最后,添加devic_driver函数用于调用上面定义的函数,并在这些函数中实现操作硬件所必须的部分代码;

6、在驱动程序中添加模块安装函数,用以把eMMC模块安装到Linux内核中:

/*模块安装函数*/

static int __init eMMC_init(void)

{

int retval;

retval= register_blkdev(eMMC_MAJOR, eMMC_NAME);

if(retval

printk(KERN_WARNING“Unable to get eMMC major%d\n”, eMMC_MAJOR);

return retval;

}

dma_set_mask_and_coherent(NULL, DMA_BIT_MASK(32));

spin_lock_init(&eMMC_lock);

/*初始化设备*/

if(eMMC_init_device()!= 0)

return-ENOMEM;

/*在/proc/devices中注册设备*/

if(eMMC_create_device()!= 0)

return-ENOMEM;

return 0;

}

module_init(eMMC_init);

7、最后,编译驱动程序,并安装它到Linux内核中。

上述步骤说明了如何编写一个Linux下的eMMC驱动程序。在开发eMMC驱动程序时,需要根据硬件实际情况,对相应功能函数进行修改,并对相应的字段和标准进行熟悉,以确保写出一个功能完备、稳定可靠的eMMC驱动程序。

zynqmp 怎么将linux系统下载到emmc

1,vivado硬件配置,要选择EMMC代表的SD1;

2,编译petalinux:执行petalinux-config。

(1)选择Subsystem AUTO Hardware Setting

-> Advanced bootable images storage settings

->boot image settings;

选择primary flash,这里是将BOOT.bin设置为从qspi flash启动

(2)选择Subsystem AUTO Hardware Setting

-> Advanced bootable images storage settings

->kernel image settings;

选择primary sd,进入后我们看到这里实际就是设置image.ub的存放区域。

(3)选择Image Packaging Configuration,设置启动启动文件系统所在位置;

在设置启动方式的时候,如下两张图这样设置读取根文件系统的位置/dev/mmcblk1p2。

(4)设置你的驱动然后编译,依次执行:petalinux-config-c kernel;petalinux-config-c rootfs;

petalinux-build;petalinux-package--boot--fsbl./images/linux/zynq_fsbl.elf--fpga--u-boot--force;

3,做之前先分区(把EMMC分区),先做一个SD卡启动的petalinux文件,

petalinux系统在zynq上面启动起来以后就进行如下分区:即是mmcblk1分为mmcblk1p1和mmcblk1p2

具体步骤如下:

(1)把EMMC进行分区,执行命令: fdisk/dev/mmcblk1

(2)使用n命令,添加一个新的分区

Command(m for help): n

Command action

e extended

p primary partition(1-4)

选择p,添加主分区

,(3)选择分区号,选择1,

Partition number(1-4): 1//选择分区号

First cylinder(1-238592, default 1): Using default value 1//选择分区的第一个柱面,选择1

Last cylinder or+size or+sizeM or+sizeK(1-238592, default 238592): Using default value 238592//选择最后一个柱面

注意:1-238592,first要选第一个数,last要选择的比238592小,其中1024就是表示1M

(4)使用t命令,设置分区格式

Command(m for help): t

Selected partition 1

Hex code(type L to list codes): b

Changed system type of partition 1 to b(Win95 FAT32)

(5)使用w命令,保存配置,必须保存配置

Command(m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table

(6)使用对应文件系统工具对分析进行格式化(只能在debian里面才能识别命令)

mkfs.fat/dev/mmcblk1p1设置为fat32格式

mkfs.ext4/dev/mmcblk1p2设置为ext4格式

注意:执行完w命令然后才算分区成功,执行完mkfs命令才算格设置内存属性成功。

以上分区完成后,可以使用p命令,显示分区信息;也可以使用用d命令表示删除分区

Command(m for help): p

Disk/dev/mmcblk0: 7818 MB, 7818182656 bytes

4 heads, 16 sectors/track, 238592 cylinders

Units= cylinders of 64* 512= 32768 bytes

Device Boot Start End Blocks Id System

/dev/mmcblk0p1 1 238592 7634936 83 Linux

(7)执行这句:mkdosfs-F 32/dev/mmcblk0p1

当然,可以重复上述步骤,多分几个区,用来存放不同的状态:

FLASH要要用来存放BOOT.bin

第一个分区用来存放image.ub或者设备树(比如uImage和devicetree.dtb)等文件;--可以设置为128MB

第二个分区用来存放用户数据(比如可执行程序);可以设置为2048MB

第三个分区用来存放程序执行需要的库文件(opencv的库,qtcreator库,相机库,视频编码解码库等);剩余的1个多GB

4,把系统同步到ext4里面

先把sd卡里面系统挂载进来:mount/dev/mmcblk0p2/mnt

再把刚刚弄好的系统挂进来: mount/dev/mmcblk1p2/tmp,然后cd/mnt

然后进入把SD卡里面的系统同步到emmc里面:rsync-av./*/tmp,时间有点久,直到结束为止。

(要是不用SD卡也可以挂载U盘,解压,然后进行系统同步到EMMC所挂载的地方/tmp)

5,然后将BOOT.BIN和image.ub烧录到QSPI-FLASH中

首先擦除QSPI-FLASH:flash_eraseall/dev/mtd0

存放BOOT.bin到flash: flashcp BOOT.bin/dev/mtd0

此处若是将image.ub写入emmc的FAT分区中(不存放到flash中),先使用mount挂载eMMC的FAT分区,

然后将image.ub使用cp指令拷贝进/mnt/mmcFat即可,也就是把uImage拷贝到/dev/mmcblk1p1;

进入uImage所在目录,然后执行 cp uImage/tmp;也就是把uImage存放到了/dev/mmcblk1p1里面。

6,最后断电拔出SD卡,将拨码开关设置为flash启动,就能看到petalinux启动起来;

7,报错及其解决办法

————————————————

版权声明:本文为CSDN博主「寒听雪落」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

阅读剩余
THE END