使用FTP客户端的好处是:可以直接将windows文件系统中的文件拖拽至linux文件系统中,而无须借用U盘转存

一、SD卡烧写

1.环境准备

笔记本系统:XP 32

虚拟机:VMwareWorkstation 9.0

Linux版本:CentOS 6.3 i386

SD卡和读卡器

FTP客户端:FileZilla

 

2.linux系统中根目录“/”下新建一个名为filename的目录

[root@instructor~]# cd /                                           进入根目录
[root@instructor~]# mkdir /filesystem/               创建名为filename的文件夹


 

3.下载安装FileZilla软件,打开,如下图所示:

wKioL1PdfEHgO9DSAASflJL3LCk745.jpg

主机:这里填写虚拟机中linux系统的IP地址,例如:192.168.5.107

           查看IP地址的命令:ifconfig

用户名:root

密码:root用户的密码

端口:22

填好后点击快速连接,列出文件系统后,表示连接成功

其中左边本地站点列出的是物理机的文件系统,右边列出的是linux的文件系统

 

4.将文件从windows文件系统传输到linux文件系统中

找到烧写程序所在的路径,如下图所示:

这里mksd-new-14.tar文件就存放在桌面上

wKiom1Pde2mDZsKzAAK5k8tX29w560.jpg

mksd-new-14.tar文件直接拖动至右边fliename文件夹中,如下图所示:

wKioL1PdfLLRxeVIAAFwr5gXFN0462.jpg

传输进度表

wKiom1Pde8mjE7CWAALUXTlq4Pw843.jpg


传输完成

 

5.再回到linux系统中查看

[root@instructor~]# cd /filesystem/                       进入filename文件夹中
[root@instructorfilesystem]# ls                             使用ls命令查看文件夹中内容
mksd-new-14.tar.bz2                                              显示文件已传输过来


 

6.解压文件

[root@instructorfilesystem]# tar -jxvf mksd-new-14.tar.bz2 
  
不指定路径则解压到当前目录


以下是解压过程:

mksd-new-14/
mksd-new-14/vfat/
mksd-new-14/vfat/MLO
mksd-new-14/vfat/boot.scr
mksd-new-14/vfat/u-boot.bin
mksd-new-14/vfat/uImage
mksd-new-14/vfat/system.tar.gz
mksd-new-14/rootfs/
mksd-new-14/rootfs/SD_rootfs.tar
mksd-new-14/rootfs/readme.txt
mksd-new-14/mksd-ti816x-sdx.sh

解压完成

再次执行ls命令

[root@instructorfilesystem]# ls 
mksd-new-14 mksd-new-14.tar.bz2

此时会发现多出了一个与文件同名的文件夹mksd-new-14

7.SD卡连接电脑

wKioL1PdfRGQu6WnAAKu1eBnlio274.jpg

linux中连上SD

查看SD卡在linux系统中所显示的设备名

[root@instructormksd-new-14]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_instructor-lv_root
                      7.5G  5.7G 1.7G  78% /
tmpfs                 504M  112K 504M   1% /dev/shm
/dev/sda1             485M   32M 428M   7% /boot
/dev/sdb1             485M   11M 449M   3% /mnt/new
/dev/sdb2              97M   16M  77M  17% /mnt/test
/dev/sr0              3.5G  3.5G    0 100% /media/CentOS_6.3_Final
/dev/sdc1              70M   34M  37M  48% /media/boot
/dev/sdc2             7.3G  215M 6.7G   4% /media/rootfs

可以看到/dev/sdc即为SD的设备名,其中分了两个区

 

8.执行文件夹中的shell脚本

[root@instructorfilesystem]# cd mksd-new-14                进入mksd-new-14
[root@instructormksd-new-14]# ls –l                         以长文件名的形式列出文件
total 12
-rwxr-xr-x. 1 root root 1126 Jul  8 09:42 mksd-ti816x-sdx.sh       以.sh结尾的即为shell脚本
drwxr-xr-x. 2 root root 4096 Jul  8 09:42 rootfs                    rootfs目录
drwxr-xr-x. 2 root root 4096 Jul  8 09:42 vfat                      vfat目录


执行带参数的脚本

命令格式:mksd-ti816x-sdx.sh 设备名 vfat路径 rootfs文件路径

[root@instructormksd-new-14]# ./mksd-ti816x-sdx.sh /dev/sdc vfat/ rootfs/SD_rootfs.tar
All data on /dev/sdc now will be destroyed!Continue? [y/n]
y
[Partitioning /dev/sdc...]
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.694147 s,1.5 MB/s
DISK SIZE - 7948206080 bytes
CYLINDERS - 966
Checking that no-one is using this diskright now ...
BLKRRPART: Device or resource busy
 
This disk is currently inuse - repartitioning is probably a bad idea.
Umount all file systems,and swapoff all swap partitions on this disk.
Use the --no-reread flagto suppress this check.
Use the --force flag tooverrule all checks.
 [Makingfilesystems...]
[Copying files...]
[Done]

注意:上面红色字体的报错信息表示,SD卡的两个分区正在使用,需要卸载后才行

[root@instructormksd-new-14]# umount /dev/sdc1
[root@instructormksd-new-14]# umount /dev/sdc2
[root@instructormksd-new-14]# ./mksd-ti816x-sdx.sh /dev/sdc vfat/ rootfs/SD_rootfs.tar
All data on /dev/sdc now will be destroyed!Continue? [y/n]
y
[Partitioning /dev/sdc...]
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.983607 s,1.1 MB/s
DISK SIZE - 7948206080 bytes
CYLINDERS - 966
Checking that no-one is using this diskright now ...
OK
 
Disk /dev/sdc: 966 cylinders, 255 heads, 63sectors/track
 /dev/sdc: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = cylinders of 8225280 bytes, blocksof 1024 bytes, counting from 0
 
  Device Boot Start     End  #cyls    #blocks   Id System
/dev/sdc1  *      0+      8      9-     72261    c W95 FAT32 (LBA)
/dev/sdc2          9    965     957    7687102+ 83  Linux
/dev/sdc3          0       -      0          0    0 Empty
/dev/sdc4          0       -      0          0    0 Empty
Successfully wrote the new partition table
 
Re-reading the partition table ...
 
If you created or changed a DOS partition,/dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[Making filesystems...]
[Copying files...]
[Done]

 

 

二、相关命令及参数解释

1.ls

功能说明:列出目录内容

常用参数:
  -1   每列仅显示一个文件或目录名称。
  -a--all   下所有文件和目录。

2.tar

功能说明:文件打包或解包

常用参数:

 -j 通过bzip2进行压缩/解压缩,此时文件名最好为*.tar.bz2

 -z 通过gzip进行压缩/解压缩,此时文件名最好为*.tar.gz

 -x 解包或解压缩,可以跟 –C来指定压缩文件存放目录,若不指定,则在当前目录解压

 -v 在压缩/解压缩的过程中,将正在处理的文件名显示出来

 -f 后面跟被处理的文件名

3.cd

功能说明:切换目录

举例:cd 切换至用户家目录

           cd ..返回上一级目录

4.df

功能说明:显示磁盘的相关信息

常用参数:
  -a--all   包含全部的文件系统。
  --block-size=<区块大小>   以指定的区块大小来显示区块数目。
  -h--human-readable   以可读性较高的方式来显示信息。


三、脚本详解

[root@instructor mksd-new-14]# cat mksd-ti816x-sdx.sh 
#!/bin/bash                                       //使用bash作为解释器
if [[ -z $1 || -z $2  || -z $3 ]] #|| -z $4 ]]    //判断位置变量(脚本后接参数)是否存在
then                                              //若任一参数不存在,则提示脚本用法
        echo "mksd-ti816x Usage:"
        echo "  mksd-ti816x <device> <vfat path> <rootfs tar.gz >"
        echo "  Example: mksd-ti816x /dev/sdc ../vfat nfs.tar.gz"
        exit
fi                                                //if语句结束
if ! [[ -e $2 ]]                                  //如果第二个参数存在,即vfat不存在
then                                              //则提示错误信息并退出脚本
        echo "Incorrect vfat location!"
        exit
fi
if ! [[ -e $3 ]]                   //如果第三个参数不存在,即rootfs/SD_rootfs.tar不存在
then                                             //则提示错误信息并退出脚本
        echo "Incorrect rootfs location!"
        exit
fi                                               //if语句结束
echo "All data on "$1" now will be destroyed! Continue? [y/n]"    //屏幕输出信息,$1代表第一个参数,即SD卡的设备名
read ans                                        //接收用户输入,并存入变量ans
if ! [ $ans == 'y' ]                            //判断,如果用户输入的字符不是"y",则退出
then
        exit
fi                                             //if语句结束
echo "[Partitioning $1...]"                    //屏幕输出信息
DRIVE=$1                                       //将SD卡设备名赋值给DRIVE
dd if=/dev/zero of=$DRIVE bs=1024 count=1024            
         
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`        //使用fdisk命令查看SD设备容量,并截取其容量大小赋值给SIZE变量
         
echo DISK SIZE - $SIZE bytes                    //屏幕输出SIZE大小
 
CYLINDERS=`echo $SIZE/255/63/512 | bc`          //将SIZE转换为柱面大小
 
echo CYLINDERS - $CYLINDERS                    //屏幕输入柱面数
{                                              //使用sfdisk命令将SD卡分为两个区
echo ,9,0x0C,*
echo ,,,-
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
echo "[Making filesystems...]"
mkfs.vfat -F 32 -n boot "$1"1 &> /dev/null     //将第一个分区使用vfat格式化,命名为boot
mkfs.ext3 -L rootfs "$1"2 &> /dev/null         //将第二个分区使用ext3格式化,命名为rootfs
echo "[Copying files...]"
mount "$1"1 /mnt                               //挂载SD卡第一个分区到 /mnt
cp -rf $2/* /mnt                               //将vfat目录下的所有文件复制到 /mnt下
#cp $2 /mnt/MLO
#cp $3 /mnt/u-boot.bin
#cp $4 /mnt/uImage
umount "$1"1                                   //卸载第一个分区
mount "$1"2 /mnt                               //将第二个分区挂载到 /mnt
tar xvf $3 -C /mnt &> /dev/null                //将rootfs中的SD_rootfs.tar文件解压缩到 /mnt下
chmod 755 /mnt                                 //修改/mnt权限为755
sleep 1                                        //暂停1秒
umount "$1"2                                   //卸载第二个分区
echo "[Done]"