从sd卡启动之文件系统制作

    在调试andriod的代码时候发现了一个问题。在andriod调试的时候无法进入常规的文件系统进行简单的操作。由于想要把alsa移植到210的开发板中,发现“/”文件系统是无法进行读写的。在根文件系统下有一个system的目录可以进行读写但是执行命令的时候发现无法操作,顾想到了可读写的文件系统的移植。因此记录下来这篇文章以便后用,也为了遇到相同问题的开发者提供微薄的帮助。

    1,fdisk的使用。

    2,拷贝文件。

    3,修改内核的编译选项。

    4,修改uboot启动参数。

    5,硬件上的必要准备。

 

    1,fdisk:

    首先要介绍的是fdisk的操作。在omap的开发的时候就遇到了sd卡的制作问题。其实网上很多的介绍。在这里只是针对本次操作的介绍,不涉及的内容网上可以查阅到。

    我的环境是ubuntu10.04的OS。在插上SD卡后会发现dev目录下多了sdb。(如果不确定可以使用dmesg查看kernel的log)。

    fdisk /dev/sdb

    按照提示先把所有的分区信息删除,然后再是使用 p 打印出磁盘信息。保证没有分区。

    再接着为磁盘分区,分区的时候使用的是命令 n。按照提示输入相应的指令 p。

    这里注意分区的大小和容量的信息。default可以选择系统提示默认值,但是第二个参数是要有判断的。我使用的SD卡1G。

    选择如下:

root@edward-laptop:~# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 966 MB, 966787072 bytes
30 heads, 62 sectors/track, 1015 cylinders
Units = cylinders of 1860 * 512 = 952320 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x238e5adc

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         200      185969   83  Linux
/dev/sdb2             201         600      372000   83  Linux

 

    以上信息因实际情况而异,可以个人调整。在得到了以上信息后执行命令如下:

    sudo mkfs.ext4 /dev/sdb2 把第二分区的空间格式化为EXT4的文件格式。在这命令以后 mount /dev/sdb2 /mnt 把SD卡的第二分区挂到mnt的目录下。进入mnt目录可以发现多了一个lost+found的文件夹。做过文件系统的都会发现这个是制作文件系统的必备信息,可以上网查找相关资料。有了这个文件夹也说明formate成功了。

 

    2,拷贝文件

    在这里我有疑问,ext4作为文件系统类型支不支持SD卡类型的设备操作?请高手回答一下这个问题。

    我们之前使用过的任何一种文件系统都是会有基本的目录如:/etc /dev /bin /lib /sbin /proc /usr 等。把这些内容拷贝到挂载完毕后的目录/mnt 或者是任何一种你指定的了文件夹。同步数据后。umount /mnt。拔出SD卡文件系统制作完毕。

 

    3,修改编译选项:

    在上面的文件系统制作的SD时,选用了mkfs。ext4这条指令,顾把SD卡的第二个分区格式化为ext4的文件系统。在kernel的.config 文件中应该把相应的文件系统的支持列表中添加EXT4的支持。

    如下:

..............

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_USE_FOR_EXT23=y
# CONFIG_EXT4_FS_XATTR is not set
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set

...............

 

    4,修改uboot的启动参数

    这个过程相对比较简单,就是一条指令:set bootargs "noinitrd root=/dev/mmcblk0p2 rw console=ttySAC0"。对这条指令介绍一下:

  root指定了文件系统设备的载体:SD卡的第二个分区

  static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)这个函数中可以看到sprintf(md->disk->disk_name, "mmcblk%d", devidx);,SD卡的设备是以mmcblkXpX的方式命名。具体的命名规则还没有调试过代码。但是要指定第二分区的设备名为:mmcblk0p2 表示partition。

  

    5,uboot上的必要准备

    这个过程简单但是必要。

    使用tftp命令下载uImage到开发板上:tftp 0x30800000 uImage

    设置好了以上参数bootargs后执行:bootm 30800000

    最后启动开发板。可以挂载SD卡上的文件系统,并且以这个文件系统作为根文件启动。这时候犹豫是EXT4的文件系统,可以读写保存数据。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值