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版权协议,转载请附上原文出处链接及本声明。
原文链接: