我有一个Freescale I.MX ARM板,我正在准备SD卡上的bootloader,内核和Root文件系统 . 我对我将文件分区并复制到SD卡的顺序感到有点困惑 . 让我们说我有一个4GB大小的空SD卡 . 我用gparted首先把它分成:
Firts将400 MB大小划分为FAT32系统 . 这是我的启动分区第二个分区是该卡的其余部分为ext3 . 这是我的根文件系统分区 .
我们说我的SD卡在/ dev / sdb下 .
现在我看到很多文档在复制启动文件方面略有不同 .
哪种方法正确?
方法1:
(没有挂载sdb分区:sudo dd if = u-boot.bin of = / dev / sdb bs = 512 seek = 2 sudo dd if = uImage of = / dev / sdb bs = 512 seek = 2
挂载用于复制rootfs的sdb2:mount / dev / sdb2 / mnt / rootfs copy rootfs:tar -xf tarfile / mnt / rootfs
方法2:挂载sdb1启动分区:mount / dev / sdb1 / mnt / boot copy uboot和kernel:cp u-boot.bin / mnt / boot / cp uImage / mnt / boot /
然后复制rootfs如上!
哪个是正确的 . 我尝试了两个,但sddcard甚至没有启动 . 当我尝试方法1时,卡启动,直到它说在分区中找不到rootfs . 我删除了卡并插入,发现第一个胖32分区以某种方式“被破坏”,因为它在gparted上显示为“unallocated” .
请帮忙 .
3 回答
您需要将第一个分区标记为可引导 . 检查gparted或disk实用程序中的第一个分区详细信息 .
从磁盘实用程序中,cab标记分区可引导 . 通过选择特定分区并进入“更多操作”选项 - >“编辑分区类型” .
下面是为我的Arndale OCTA板将二进制文件闪存到SD卡上的脚本 . 您可以看到bootloader二进制文件的位置:
BL1
dd iflag = dsync oflag = dsync if = arndale_octa.bl1.bin of = / dev / sde bs = 512 seek = 1
BL2
dd iflag = dsync oflag = dsync if = .. / arndale_octa.bl2.bin of = / dev / sde bs = 512 seek = 31
uboot
dd iflag = dsync oflag = dsync if = u-boot.bin of = / dev / sde bs = 512 seek = 63
内核和信任软件,....
请注意:1)分区表位于SD卡偏移量0(搜索0),然后您必须运行:fdisk / dev / sde并创建不与内核或信任软件所支配的块重叠的分段 . 2)在dd命令中添加“dsync”选项给gaurantee,每个写入的数据立即刷新到SD卡中
在大多数情况下,imx处理器需要0x400偏移量的bootloader . 所以无论你为u-boot做什么都是正确的,你需要使用dd命令 .
在对SD卡进行分区时,请确保为u-boot映像保留足够的空间 . 所以启动你的第一个可启动分区,假设1 MB偏移量 .
您只需通过
cp
命令复制uImage和环境变量(uEnv.txt或boot.scr)即可 .对于rootfs,您也可以按照与内核相同的步骤进行操作 .