我有一个飞思卡尔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
挂载sdb2以复制rootfs: mount / dev / sdb2 / mnt / rootfs 复制rootfs: tar -xf tarfile / mnt / rootfs
方法2: 挂载sdb1启动分区: mount / dev / sdb1 / mnt / boot 复制uboot和内核: cp u-boot.bin / mnt / boot / cp uImage / mnt / boot /
然后复制rootfs,如上所述!
哪个是正确的。我尝试了两个,但sddcard甚至没有启动。 当我尝试方法1时,卡启动,直到它说在分区中找不到rootfs。我删除了卡并插入,发现第一个胖32分区以某种方式“被破坏”,因为它在gparted上显示为“未分配”。
请帮忙。
答案 0 :(得分:0)
您需要将第一个分区标记为可引导。 检查gparted或磁盘实用程序中的第一个分区详细信息。
从磁盘实用程序中,cab标记分区可引导。通过选择特定的分区并进入更多的行动'选项 - > '编辑分区类型'。
答案 1 :(得分:0)
下面是将二进制文件闪存到SD卡上的脚本 Arndale OCTA董事会。您可以看到bootloader二进制文件的位置:
dd iflag = dsync oflag = dsync if = arndale_octa.bl1.bin of = / dev / sde bs = 512 seek = 1
dd iflag = dsync oflag = dsync if = .. / arndale_octa.bl2.bin of = / dev / sde bs = 512 seek = 31
dd iflag = dsync oflag = dsync if = u-boot.bin of = / dev / sde bs = 512 seek = 63
请注意: 1)分区表位于SD卡偏移0(搜索0),然后你必须运行:fdisk / dev / sde 并创建不与内核或信任软件所支持的块重叠的paratiions。 2)在dd命令中添加“dsync”选项给gaurantee,每个写入的数据立即刷新到SD卡中
答案 2 :(得分:0)
在大多数情况下,imx处理器需要0x400偏移量的bootloader。所以无论你为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,您也可以按照与内核相同的步骤进行操作。