Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148687
  • 博文数量: 35
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 286
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-14 18:49
个人简介

生命不止,奋斗不息。

文章分类

全部博文(35)

文章存档

2015年(1)

2014年(1)

2013年(32)

2011年(1)

我的朋友

分类: 嵌入式

2013-07-02 00:01:23

 

1.PC机上格式化SD

  在桌面的PC机上用SD读卡器操作SD:

 

  一般情况下PC机上第一个U盘整体设备结点是/dev/sda,第二个是 /dev/sdb,RHEL5下它会被自动mount/media/disk /media/disk_1 目录.

 

  U/dev/sdb上第一个分区是 /dev/sdb1,第二是/dev/sdb2 依此类推.

  根文件系统采用符号链接等特性,FAT32是不行的,这里直接采用标准的ext3的文件系统.在实测时,U盘整个做一个分区做ext3根文件系统.总是出不少问题(可能步骤也不对),因此按网上推荐的,做二个分区,第一个分区采用vfat格式,第二个分区才采用ext3的格式.

 

1.1 fdisk分区

     执行fdisk /dev/sdb

    fdisk有如下常用选项

1. 输入 m 显示所有命令列示。

2. 输入 p 显示硬盘分割情形。

3. 输入 a 设定硬盘启动区。

4. 输入 n 设定新的硬盘分割区。

  4.1. 输入 e 硬盘为[扩展]分割区(extend)

   4.2. 输入 p 硬盘为[首要]分割区(primary)

5. 输入 t 改变硬盘分割区属性。

6. 输入 d 删除硬盘分割区属性。

7. 输入 q 结束不存入硬盘分割区属性。

8. 输入 w 结束并写入硬盘分割区属性

    

如果以前U盘有分区,需要输入d命令来依次删除分区,以下执行两次n命令创建一个 400MFAT分区,以及把剩下的分区设为ext3,最后用w命令把结果保存下来.

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1020, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1020, default 1020): +400M

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (202-1020, default 202):

Using default value 202

Last cylinder or +size or +sizeM or +sizeK (202-1020, default 1020):

Using default value 1020

Command (m for help): p

Disk /dev/sdb: 2041 MB, 2041577472 bytes

63 heads, 62 sectors/track, 1020 cylinders

Units = cylinders of 3906 * 512 = 1999872 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         201      392522    b  W95 FAT32

/dev/sdb2             202        1020     1599507   83  Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.

The kernel still uses the old table.

The new table will be used at the next reboot.

WARNING: If you have created or modified any DOS 6.x

partitions, please see the fdisk manual page for additional

information.

Syncing disks.

  

1.2 格式化分区

   

    mkfs.vfat /dev/sda1 #第一个分区格式化成fat32

    mkfs.ext3 /dev/sda2 #第二个分区格式化成fat32

  可以用

    tune2fs -l /dev/sda2 来检验分区类型

  

1.3 拷贝根文件系统

    

  mount /dev/sda2 /mnt/sdcard #挂载SD

  cp -ra /home/hxy/rootfs/* /mnt/sdcard #把根文件系统拷到SD

 

 

2.编译ARM Linux内核

 

 2.1 修改内核配置

  确保ext3的文件系统支持,SD都被静态编译到内核,我使用的是Linux 2.6.29.

 在内核源码目录执行 make menuconfig

 

  其中ext3File system.成功的配置如下.

  

 

 <*> Ext3 journalling file system support      

    [*]   Ext3 extended attributes

    [*]     Ext3 POSIX Access Control Lists

    [*]     Ext3 Security Labels  

 

SD卡驱动支持在Device Drivers ->MMC/SD/SDIO card support ,成功的配置如下

 

 --- MMC/SD/SDIO card support                          

 [*]   MMC debugging                                   

 [ ]   Allow unsafe resume (DANGEROUS)                 

       *** MMC/SD/SDIO Card Drivers ***                

 <*>   MMC block device driver                         

 [*]     Use bounce buffer for simple hosts            

 <*>   SDIO UART/GPS class support                     

 <*>   MMC host test driver                            

       *** MMC/SD/SDIO Host Controller Drivers ***     

 <*>   Secure Digital Host Controller Interface support

 <*>   Samsung S3C SD/MMC Card Interface support       

  编译内核 make zImage

 

 2.2 ARM-linux下的测试.

   

   在一个已经正常启动的ARM-LINUX,插入SD.出现如下提示,表示SD卡已经安装上

[root: /]# s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).                           

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                  

s3c2440-sdi s3c2440-sdi: running at 16875kHz (requested: 25000kHz).                              

s3c2440-sdi s3c2440-sdi: running at 16875kHz (requested: 25000kHz).                              

mmc0: new SD card at address 0002                                                                

mmcblk0: mmc0:0002 00000 1.90 GiB                                                                

 mmcblk0: p1 p2                                                                                  

FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

 

但是最后一句在提示FAT有不识别的IO字符集,导致第一个VFAT分区没有自动创建设备结点.用如下命令只看到mmcblk0p2的结点.(以下操作均是在开发板上进行)

[root: /]# ls -l /dev/mmc*                                            

brw-rw----    1 root     root     179,   0 Sep 22 10:48 /dev/mmcblk0  

brw-rw----    1 root     root     179,   2 Sep 22 10:48 /dev/mmcblk0p2

 

测试ext3分区

mount -t ext3 /dev/mmcblk0p2 /mnt

/mnt上可以读写文件.表示ext3分区正常.

 

 

手动建立第一个分区的结点.

mknod /dev/mmcblk0p1 b 179 1

测试vfat 分区

mount -t vfat /dev/mmcblk0p1 /mnt

/mnt上可以读写文件.表示vfat分区正常.如果想自动创建个设备结点,可以修改/etc/fstat来使用这个分区

 

3.使用SD卡分区作为根文件

 修改LINUX启动参数.我用的是u-boot .因此在u-boot shellset bootargs命令来设置Linux启动参数.

 成功的启动参数是 noinitrd root=179:2 rw console=ttySAC0

其中1792sd卡上ext3分区的主设备和从设备号.

 

set bootargs "noinitrd root=179:2 rw console=ttySAC0 "设置后.重启内核,即可用ext3分区作为根文件系统

阅读(2308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~