使用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软件,打开,如下图所示:
主机:这里填写虚拟机中linux系统的IP地址,例如:192.168.5.107
查看IP地址的命令:ifconfig
用户名:root
密码:root用户的密码
端口:22
填好后点击快速连接,列出文件系统后,表示连接成功
其中左边本地站点列出的是物理机的文件系统,右边列出的是linux的文件系统
4.将文件从windows文件系统传输到linux文件系统中
找到烧写程序所在的路径,如下图所示:
这里mksd-new-14.tar文件就存放在桌面上
将mksd-new-14.tar文件直接拖动至右边fliename文件夹中,如下图所示:
传输进度表
传输完成
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卡连接电脑
在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 �Cl 以长文件名的形式列出文件 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 解包或解压缩,可以跟 �CC来指定压缩文件存放目录,若不指定,则在当前目录解压
-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]"