zynq平台sd卡启动用的多分区img文件的制作

该博客详细介绍了如何为SD卡创建四个分区,包括BOOT启动分区、rootfs分区、用户目录分区以及交换分区(swap)。通过使用loop设备、fdisk、kpartx和各种文件系统格式化工具,如vfat、ext4和mkswap,来实现分区和格式化。此外,还阐述了如何挂载和复制文件,并最终使用USBImageTool将映像写入SD卡。

项目中设计的sd卡分四个分区
一、放置BOOT.bin(fsbl、uboot)、uImage、FPGA.bit等
vfat格式,cpu里的固件会到此分区里找BOOT.bin。所以,分区格式、分区号和内容要固定。
二、放置rootfs。ext4格式
三、家目录/home/root/。ext4格式
四、swap分区。嵌入式设备通常没有这个分区。

步骤:
1、利用用loop设备给img文件挂载分区、格式化
2、向分区导入其中的文件
3、用USB Image Tool向sd卡导img

命令过程:
创建一个空img文件,大小小于sd卡大小即可,不必相等
dd bs=4096 if=/dev/zero of=sd.img count=1310720

把img文件关联一个loop分区
losetup /dev/loop0 sd.img

给分区创建四个子分区,注意:前3个分区是主分区,最后一个要用t命令将id变成82(swap分区的要求)
fdisk /dev/loop0

把多分区img文件和loop关联
sudo kpartx -av sd.img

此时可以这样找到分区的loop节点
rpdzkj@ubuntu:~/code/tmp$ ls /dev/mapper/
control loop0p1 loop0p2 loop0p3 loop0p4

格式化四个分区
mkfs.vfat /dev/mapper/loop1p1
mkfs.ext4 /dev/mapper/loop1p2
mkfs.ext4 /dev/mapper/loop1p3
mkswap /dev/mapper/loop1p4

挂载前三个
sudo mount /dev/mapper/loop0p1 dir1
sudo mount /dev/mapper/loop0p2 dir2
sudo mount /dev/mapper/loop0p3 dir3

复制文件。重点:一定要带上avx,因为复制的文件要保持原来的属性
cp -avxr from dirx

sd.img制作完成,用USB Image Tool向sd卡导

参考:
http://blog.sina.com.cn/s/blog_9ac48e3c0102ybep.html

以下是通过TFSD数据写入到Zynq的eMMC中的一般方法: ### 1. 准备工作 - **硬件方面**:需要有Zynq开发板,确保开发板支持eMMC接口和SD接口。准备一张SD、一张TF,以及相应的读器。 - **软件方面**:准备好适合Zynq的操作系统镜像文件(如果需要写入系统),以及用于数据传输和操作的工具,如U-Boot等。 ### 2. 从SD复制数据到TF - 将SD插入读器,连接到计算机。 - 根据SD中的数据类型和操作系统,选择合适的复制方法。如果是文件系统数据,可以直接在计算机上进行复制操作。例如,在Linux系统中,可以使用`dd`命令来复制整个SD的内容到TF: ```bash sudo dd if=/dev/sdX of=/dev/sdY bs=4M status=progress ``` 其中,`/dev/sdX`是SD的设备名,`/dev/sdY`是TF的设备名。 ### 3. 将TF插入Zynq开发板 - 关闭Zynq开发板电源,将TF插入开发板的SD接口(通常开发板的SD接口可以兼容TF)。 - 打开开发板电源,进入U-Boot环境。可以通过串口终端连接到开发板,在开机过程中按下相应的按键(通常是空格键)进入U-Boot命令行。 ### 4. 在U-Boot中进行数据写入操作 - **识别TF和eMMC设备**:在U-Boot命令行中,使用`mmc list`命令查看系统识别到的存储设备,确定TF和eMMC的设备编号。例如,`mmc 0`可能是TF,`mmc 1`可能是eMMC。 - **读取TF数据到内存**:使用`fatload`命令将TF中的数据加载到内存中。例如,将TF中的一个文件加载到内存地址`0x10000000`: ```plaintext fatload mmc 0:1 0x10000000 filename.img ``` 其中,`mmc 0:1`表示TF的第一个分区,`0x10000000`是内存地址,`filename.img`是要加载的文件名。 - **将内存中的数据写入eMMC**:使用`mmc write`命令将内存中的数据写入eMMC。例如,将内存地址`0x10000000`开始的`0x100000`字节数据写入eMMC的起始扇区: ```plaintext mmc write 0x10000000 0 0x100 ``` 其中,`0x10000000`是内存地址,`0`是eMMC的起始扇区,`0x100`是要写入的扇区数量。 ### 5. 验证数据写入 - 可以使用`mmc read`命令将eMMC中的数据读取到内存中,然后与TF中的原始数据进行比较,确保数据写入正确。 - 重启开发板,检查系统是否能够正常启动(如果写入的是操作系统镜像),或者检查eMMC中的数据是否可以正常访问。 ### 注意事项 - 在使用`dd`命令复制数据时,要确保设备名正确,否则可能会导致数据丢失。 - 在U-Boot中进行数据操作时,要注意内存地址和扇区数量的设置,避免数据覆盖和错误写入。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值