am335x sd卡分区制作文档

制作一张SD启动卡,可以有两种选择,第一,利用TI-SDK的脚本来制作,该脚本功能较多,可以制作2分区的也可以制作3分区的启动卡,而且写入的相关启动文件比如MLO、u-boot.img、根文件系统(包括了内核)既可以是TI-SDK包里面自带的预编译好的,也可以是自己做的放在其他地方的文件;第二,完全自己手动制作,定制一张自己想要的大小、分区数、写入自己编译的MLO、u-boot.img、根文件系统,这样也算是DIY了。

  TI-SDK包的使用不做说明,非常简单好用,运行脚本creat-sdcard.sh即可。下面介绍手动制作启动卡的步骤。

  1、关于SD卡启动模式

  当按住BBB板子上的boot按键,板子便从SD卡(也就是mmc0)启动,此时ROM-Code从SD卡的一个活动主分区(boot分区)寻找SPL文件,将其加载到片内SRAM,控制权移交SRAM,之后SPL运行后又以和寻找SPL相同的方式开始寻找u-boot.img文件,于是从boot分区找到u-boot.img文件,并将其加载到片外SDRAM,之后u-boot加载内核,挂载根分区的根文件系统(rootfs分区)。系统启动!

  由此得出结论,一张SD必须具备一个活动主分区,而且分区格式为FAT32(LBA),暂时把这个分区的名字叫做boot,boot分区中必须要有MLO、u-boot.img,以及一个根分区,分区格式为ext3/4,叫做rootfs,rootfs分区中必须有根文件系统,其他的就无所谓了。也就是说其他的文件可以和这些文件共存,只要保证这些文件以及目录完好即可。

  既然现在大小、分区数都有自己来定了,那么我手上一张8GB的内存卡microSD,我希望除了这两个用于启动系统的分区外还有第三个分区用于存放自己的文件,这样以后操作另外两个分区不会影响第三个分区,也不用像以前老是要把U盘的东西复制出来腾出空间做启动盘。在linux可系统中对于一个移动设备它可以识别上面所有的分区,包括ext2/3/4以及FAT32(LBA),而windows系统对于一个移动设备,他仅仅识别上面第一个主分区,如果没有主分区就识别第一个逻辑分区,仅仅支持FAT32(LBA)格式。另外,对于BBB开发板,活动主分区一定要在第一个,否则启动系统时找不到文件。

  那么,有两种选择,

  1)分区为boot分区,活动主分区,格式FAT32(LBA),大小50M即可

  2)分区为rootfs分区,主分区,格式ext3/4,大小2GB

  3)分区为store分区,主分区,格式ext3/4,剩余全部空间

  或者

  1)分区为boot分区,活动主分区,格式FAT32(LBA),大小5GB

  2)分区为rootfs分区,主分区,格式ext3/4,剩余全部

  两种分区方法各有好处缺点。也可以有其他选择。Note:一个硬盘或者移动存储设备,上面最多可以有四个分区,其中包括主分区和扩展分区,并且扩展分区最多一个,当然也可以没有扩展分区。扩展分区之下可以有若干个逻辑分区。所以总容量=主分区+扩展分区,而扩展分区=逻辑分区之和。

  

  2、制作SD卡

  选择第二种方案进行分区。操作环境,虚拟机ubuntu12.04,microSD卡8GB,BBB开发板。

  step1:设置SD卡的磁头数、扇区数、柱面数,即H、S、C,这样设置是为了向SD卡读写数据是达到较高性能,其中C=SD卡bytes/H*S*512,我的SD卡的C=966,。

  相关参考资料

  http://omappedia.org/wiki/SD_Configuration#Alternative_Script_to_format_SD_Cards_for_3_partitions

  http://bbs.mydigit.cn/read.php?tid=331754

  http://bbs.mydigit.cn/read.php?tid=152497

  

  zhouyu@zhouyu-virtual-machine:~$ ls /dev | grep sd
  sda
  sda1
  sda2
  sda5
  sda6
  sdb
  sdb1
  sdc
  sdc1
  sdd
  sdd1
  sdd2
  sdd3
  sdd5
  zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd5
  zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd2
  zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd3
  zhouyu@zhouyu-virtual-machine:~$ sudo fdisk /dev/sdd

  命令(输入 m 获取帮助): p

  Disk /dev/sdd: 7948 MB, 7948206080 bytes
  245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors
  Units = 扇区 of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00000000

  设备 启动      起点          终点     块数   Id  系统
  /dev/sdd1            2048    10487807     5242880    5  扩展
  /dev/sdd2   *    10487808    10569727       40960    c  W95 FAT32 (LBA)
  /dev/sdd3        10569728    15523839     2477056   83  Linux
  /dev/sdd5            4096    10487806     5241855+   c  W95 FAT32 (LBA)

  命令(输入 m 获取帮助):
  插入SD卡后用命令查看一下,当前SD卡的标号是sdd,而且里面已经有分区sdd1(扩展分区),sdd2(活动主分区),sdd3(主分区),sdd5(逻辑分区),现将其全部卸载,再用fdisk程序开始进行分区工作。

  

  命令(输入 m 获取帮助): d
  分区号 (1-5): 1

  命令(输入 m 获取帮助): d
  分区号 (1-4): 2

  命令(输入 m 获取帮助): d
  Selected partition 3

  命令(输入 m 获取帮助): x

  专家命令(输入 m 显示帮助): h
  磁头数 (1-256,默认为 245): 255

  专家命令(输入 m 显示帮助): s
  扇区数 (1-63,默认为 62): 63

  专家命令(输入 m 显示帮助): c
  柱面数 (1-1048576,默认为 1021): 966

  专家命令(输入 m 显示帮助): r

  命令(输入 m 获取帮助):

  先删除原先的分区,在输入指令X进入专家模式,分别设置H、S、C。C=SD卡bytes/H*S*512,取整数。设置完后输入R返回,继续。

  

  step2:分区设置

  命令(输入 m 获取帮助): p

  Disk /dev/sdd: 7948 MB, 7948206080 bytes
  255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
  Units = 扇区 of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00000000

  设备 启动      起点          终点     块数   Id  系统

  命令(输入 m 获取帮助): n
  Partition type:
  p   primary (0 primary, 0 extended, 4 free)
  e   extended
  Select (default p): p
  分区号 (1-4,默认为 1): 1
  起始 sector (2048-15523839,默认为 2048): 2048
  Last sector, +扇区 or +size{K,M,G} (2048-15523839,默认为 15523839): +6G

  命令(输入 m 获取帮助): n
  Partition type:
  p   primary (1 primary, 0 extended, 3 free)
  e   extended
  Select (default p): p
  分区号 (1-4,默认为 2): 2
  起始 sector (12584960-15523839,默认为 12584960):
  将使用默认值 12584960
  Last sector, +扇区 or +size{K,M,G} (12584960-15523839,默认为 15523839):
  将使用默认值 15523839

  命令(输入 m 获取帮助): p

  Disk /dev/sdd: 7948 MB, 7948206080 bytes
  255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
  Units = 扇区 of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00000000

  设备 启动      起点          终点     块数   Id  系统
  /dev/sdd1            2048    12584959     6291456   83  Linux
  /dev/sdd2        12584960    15523839     1469440   83  Linux

  命令(输入 m 获取帮助):

  可以看到新建分区前指令p的输出显示没有任何分区,再按照前面说的方案进行分区后在输入指令p查看新建的分区。

  

  step3:改变boot分区的系统id和设置boot分区为活动主分区

  命令(输入 m 获取帮助): t
  分区号 (1-4): 1
  Hex code (type L to list codes): c
  Changed system type of partition 1 to c (W95 FAT32 (LBA))

  命令(输入 m 获取帮助): a
  分区号 (1-4): 1

  命令(输入 m 获取帮助): p

  Disk /dev/sdd: 7948 MB, 7948206080 bytes
  255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
  Units = 扇区 of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00000000

  设备 启动      起点          终点     块数   Id  系统
  /dev/sdd1   *        2048    12584959     6291456    c  W95 FAT32 (LBA)
  /dev/sdd2        12584960    15523839     1469440   83  Linux

  命令(输入 m 获取帮助): w
  The partition table has been altered!

  Calling ioctl() to re-read partition table.

  WARNING: If you have created or modified any DOS 6.x
  partitions, please see the fdisk manual page for additional
  information.
  Syncing disks.
  

  通过指令x,将分区表写入SD卡,分区完成!

  

  step4:分区格式化

  zhouyu@zhouyu-virtual-machine:~$ sudo mkfs.vfat -F 32 -n boot /dev/sdd1
  [sudo] password for zhouyu:
  mkfs.vfat 3.0.12 (29 Oct 2011)
  zhouyu@zhouyu-virtual-machine:~$ sudo mkfs.ext3 -L rootfs /dev/sdd2
  mke2fs 1.42 (29-Nov-2011)
  文件系统标签=rootfs
  OS type: Linux
  块大小=4096 (log=2)
  分块大小=4096 (log=2)
  Stride=0 blocks, Stripe width=0 blocks
  91968 inodes, 367360 blocks
  18368 blocks (5.00%) reserved for the super user
  第一个数据块=0
  Maximum filesystem blocks=377487360
  12 block groups
  32768 blocks per group, 32768 fragments per group
  7664 inodes per group
  Superblock backups stored on blocks:
  32768, 98304, 163840, 229376, 294912

  Allocating group tables: 完成
  正在写入inode表: 完成
  Creating journal (8192 blocks): 完成
  第一个分区被格式化成FAT32(LBA),分区名称boot。

  第二个分区被格式化成ext3,分区名称rootfs。

  

  step5:拷贝MLO、u-boot.img、rootfilesystem

  <pre class="plain" name="code">zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sudo cp MLO-am335x-evm /media/boot/MLO
  zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sudo cp u-boot-am335x-evm.img /media/boot/u-boot.img
  zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sync
  zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/filesystem$ sudo tar -zxvf tisdk-rootfs-image-am335x-evm.tar.gz -C /media/rootfs/
  zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/filesystem$ sync
  对于硬盘、优盘这类块设备,每次拷贝完文件其实文件只是写入了缓冲区,所以CP完后都要执行sync,将读写操作真正完成。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值