2014-01-30 53 views
2

我有一个飞思卡尔I.MX ARM板,为此我准备了SD卡上的引导加载程序,内核和根文件系统。 我对我将文件分割并复制到SD卡的顺序有点困惑。让我们说我有一个空的SD卡4GB大小。我用gparted把它分为:复制内核和uboot到SD卡

Firts分区400 MB大小为FAT32系统。这是我的启动分区 第二个分区是其余的卡作为ext3。这是我的根文件系统分区。

让我们说我的SD卡在/ dev/sdb下。

现在我已经看到许多文件在复制启动文件的方式上略有不同。

哪一种方法正确?

方法1:

(不带安装SDB分区: 须藤DD如果= U-BOOT.BIN =的/ dev/SDB BS = 512的寻求= 2 须藤DD如果=的uImage =的/ dev/SDB BS = 512寻求= 2

摩sdb2用于复制的rootfs: 设置/ dev/sdb2的/ mnt /根文件 拷贝的rootfs: 焦油-xf tar文件的/ mnt /根文件

方法2: SDB1山启动分区: mount/dev/sdb1到/ mnt /启动 复制的uboot和内核: CP U型BOOT.BIN到/ mnt /启动/ CP的uImage到/ mnt /启动/

然后复制如上根文件系统!

这是正确的。我尝试了两次,但sddcard甚至没有启动。 当我尝试方法1时,卡启动直到它说在分区中找不到rootfs。我删除了卡并插入,发现第一个fat32分区在某种程度上被“销毁”,因为它在gparted上显示为“未分配”。

请帮忙。

+0

你需要的答案/方法取决于需求。加载程序是否读取原始设备或从文件系统读取?对于我用过的Atmel SAM9设备,RomBOOT从SD卡上的FAT存储系统读取引导程序。该bootstrap程序还从FAT fs读取U-Boot。您的SoC可能会有所不同;你还没有提到你在用什么。 – sawdust

回答

0

您需要将第一个分区标记为可引导。 在gparted或磁盘工具中检查您的第一个分区详细信息。

从磁盘实用程序中您可以看到cab启动分区。通过选择特定分区并进入'更多操作'选项 - >'编辑分区类型'。

0

下面是一个脚本,用于将SD卡上的二进制文件闪存到我的 Arndale OCTA板上。你可以看到引导程序二进制文件的位置:

BL1

DD IFLAG =的dsync的oflag =的dsync如果arndale_octa.bl1.bin =的/ dev/SDE BS = 512 =的寻求= 1

BL2

DD IFLAG =的dsync oflag中=的dsync如果= ../=的/ dev/SDE BS = 512的arndale_octa.bl2.bin寻求= 31

UBOOT

DD IFLAG =的dsync oflag中=的dsync如果= u-boot的。=的/ dev/SDE BS = 512的仓寻求= 63

内核和信任的软件,....

请注意事项: 1)分区表是在SD卡偏移0(寻求0),则您必须运行:fdisk/dev/sde 并创建与内核或信任软件引发的块不重叠的情境。 2)在dd命令中添加“dsync”选项以保证每个写入数据立即刷新到SD卡中

0

在大多数情况下,imx处理器要求在0x400偏移量处的引导加载程序。所以无论你为u-boot做什么都是正确的,你需要使用dd命令。

sudo dd if=u-boot.bin of=/dev/sdb bs=512 seek=2 

在对sd卡进行分区时,请确保您为u-boot映像保留了足够的空间。所以开始你的第一个可引导分区,比如说1 MB的偏移量。

您可以简单地通过cp命令复制您的uImage和环境变量(uEnv.txt或boot.scr)。

对于rootfs也可以按照与kernel相同的步骤操作。