S i.MX51制作启动SD卡及下载镜像
SD卡分区结构及镜像地址分配如下图
SD卡创建分区表如下表
Partition Type/Index | Device Node | File System | Content |
Primary 1 | /dev/sdb1 | VFAT. Mount as /sdcards | Media file storage |
Primary 2 | /dev/sdb2 | EXT3. Mount as /system | Android system bin/libs |
Extended 3 | /dev/sdb3 | N/A. Extended partition | N/A |
Logic partition in Extended | /dev/sdb5 | EXT3. Mount as /data | Android data (e.g. installed app) |
Logic partition in Extended | /dev/sdb6 | EXT3. Mount as /cache | Android cache |
Primary 4 | /dev/sdb4 | EXT3. Mount as / in recovery mode | Root file system for recovery mode |
将一张新的SD卡装入USB读卡器插入装有linux操作系统的PC(以下为VMware安装了ubuntu 9.10的操作记录),打开一个终端窗口,操作如下所述(注:红色字体为输入信息
)
nfs@ubuntu:~$sudoumount /dev/sdb1//取消SD卡挂载
nfs@ubuntu:~$sudo fdisk /dev/sdb//使用fdisk工具对SD卡分区操作
Command (m for help):p//列出SD卡分区信息
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes//每个cylinder(磁柱)的容量是8.225280M
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 1 123 987966b W95 FAT32
Command (m for help):d//删除现在的分区
Selected partition 1
Command (m for help):p//查看是否删除成功
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
Command (m for help):n//新建一个分区
Command action
e extended
p primary partition (1-4)
p//选择主分区
Partition number (1-4):1//序号为1
First cylinder (1-123, default 1):2//该分区开始的cylinder编号为2(不是1,因为要给uboot和kernel留足空间)
Last cylinder, +cylinders or +size{K,M,G}(2-123, default 123):+500M//该分区容量为500M(修改大一点,视SD卡的容量而定)
Command (m for help):p//查看新建分区是否成功
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 2 66 522112+83 Linux
Command (m for help):n//新建一个分区
Command action
e extended
p primary partition (1-4)
p//选择主分区
Partition number (1-4):2//序号为2
First cylinder (1-123, default 1):67//该分区开始的cylinder编号为67(紧跟第一个分区,以免造成磁盘空间浪费)
Last cylinder, +cylinders or +size{K,M,G}(67-123, default 123):+128M//该分区容量为128M
Command (m for help):p//查看新建分区是否成功
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 2 66 522112+83 Linux
/dev/sdb2 67 83 136552+83 Linux
Command (m for help):n//新建一个分区
Command action
e extended
p primary partition (1-4)
e//选择扩展分区(主分区最多只能有4个,这里需要5个分区,所以需要使用扩展分区)
Partition number (1-4):3//序号为3
First cylinder (1-123, default 1):84//该分区开始的cylinder编号为84
Last cylinder, +cylinders or +size{K,M,G}(84-123, default 123):+256M//该分区容量为256M
Command (m for help):p//查看新建分区是否成功
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 2 66 522112+83 Linux
/dev/sdb2 67 83 136552+83 Linux
/dev/sdb3 84117 273105 5Extended
Command (m for help):n//新建一个分区
Command action
l logical (5 or over)
p primary partition (1-4)
p//选择主分区
Selected partition4
First cylinder (1-123, default 1):118//该分区开始的cylinder编号为118
Last cylinder, +cylinders or +size{K,M,G}(118-123, default 123)://直接回车,使用默认值,到磁盘最后端
Using default value 123
Command (m for help):n//新建一个分区(主分区已使用完,这里自动为新建逻辑分区)
First cylinder (84-117, default 84)://直接回车,使用默认值,扩展分区的开始
Using default value 84
Last cylinder, +cylinders or +size{K,M,G}(84-117, default 117):+128M//该分区容量为128M
Command (m for help):n//新建一个分区
First cylinder (101-117, default 101)://直接回车,使用默认值,剩余空间开始处
Using default value 101
Last cylinder, +cylinders or +size{K,M,G}(101-117, default 117)://直接回车,使用默认值,剩余扩展分区容量
Using default value 117
Command (m for help):p//查看分区情况
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 266 522112+ 83Linux
/dev/sdb2 67 83 136552+83 Linux
/dev/sdb3 84 117 2731055 Extended
/dev/sdb4 118 123 4819583 Linux
/dev/sdb5 84 100 13652183 Linux
/dev/sdb6 101 117 13652183 Linux
Command (m for help):t//改变分区文件系统类型
Partition number (1-6):1//选择分区编号1
Hex code (type L to list codes):b//b为FAT32类型
Changed system type of partition 1 to b(W95 FAT32)
Command (m for help):p//查看分区情况
Disk /dev/sdb: 1015 MB, 1015808000 bytes
255 heads, 63 sectors/track, 123 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Disk identifier: 0x6f20736b
Device Boot Start End BlocksId System
/dev/sdb1 2 66 522112+b W95 FAT32
/dev/sdb2 67 83 136552+83 Linux
/dev/sdb3 84 117 2731055 Extended
/dev/sdb4 118 123 4819583 Linux
/dev/sdb5 84 100 13652183 Linux
/dev/sdb6 101 117 13652183 Linux
Command (m for help):w//分区完成,保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modifiedany DOS 6.x
partitions, please see the fdisk manualpage for additional
information.
Syncing disks.
nfs@ubuntu:~$sudomkfs.vfat /dev/sdb1//格式化分区
mkfs.vfat 3.0.3 (18 May 2009)
nfs@ubuntu:~$sudomkfs.ext3 /dev/sdb2//格式化分区
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
34272 inodes, 136552 blocks
6827 blocks (5.00%) reserved for the superuser
First data block=1
Maximum filesystem blocks=67371008
17 block groups
8192 blocks per group, 8192 fragments pergroup
2016 inodes per group
Superblock backups stored on blocks:
8193,24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystemaccounting information: done
This filesystem will be automaticallychecked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
nfs@ubuntu:~$sudomkfs.ext3 /dev/sdb4//格式化分区
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
12048 inodes, 48192 blocks
2409 blocks (5.00%) reserved for the superuser
First data block=1
Maximum filesystem blocks=49545216
6 block groups
8192 blocks per group, 8192 fragments pergroup
2008 inodes per group
Superblock backups stored on blocks:
8193,24577, 40961
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystemaccounting information: done
This filesystem will be automaticallychecked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
nfs@ubuntu:~$sudomkfs.ext3 /dev/sdb5//格式化分区
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
34136 inodes, 136520 blocks
6826 blocks (5.00%) reserved for the superuser
First data block=1
Maximum filesystem blocks=67371008
17 block groups
8192 blocks per group, 8192 fragments pergroup
2008 inodes per group
Superblock backups stored on blocks:
8193,24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystemaccounting information: done
This filesystem will be automaticallychecked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
nfs@ubuntu:~$sudomkfs.ext3 /dev/sdb6//格式化分区
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
34136 inodes, 136520 blocks
6826 blocks (5.00%) reserved for the superuser
First data block=1
Maximum filesystem blocks=67371008
17 block groups
8192 blocks per group, 8192 fragments pergroup
2008 inodes per group
Superblock backups stored on blocks:
8193,24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystemaccounting information: done
This filesystem will be automaticallychecked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
nfs@ubuntu:~$
分区完成
将我们所用到的镜像文件全部放在同一个目录下(这里以test为例),将做好分区的SD卡插入PC,以下为下载镜像操作
nfs@ubuntu:~$cd/home/nfs/test/
nfs@ubuntu:~/test$sudo dd if=u-boot-no-padding.bin of=/dev/sdb bs=1K seek=1//下载uboot
154+1 records in
154+1 records out
158652 bytes (159 kB) copied, 0.283056 s,560 kB/s
nfs@ubuntu:~/test$sudo sync
nfs@ubuntu:~/test$sudodd if=uImage of=/dev/sdb bs=1M seek=1
2+1 records in
2+1 records out
2520588 bytes (2.5 MB) copied, 0.8403 s,3.0 MB/s
nfs@ubuntu:~/test$sudosync
nfs@ubuntu:~/test$sudodd if=uramdisk.img of=/dev/sdb bs=4M seek=1
0+1 records in
0+1 records out
213111 bytes (213 kB) copied, 0.16925 s,1.3 MB/s
nfs@ubuntu:~/test$sudosync
nfs@ubuntu:~/test$sudodd if=system.img of=/dev/sdb2
207128+0 records in
207128+0 records out
106049536 bytes (106 MB) copied, 25.4979 s,4.2 MB/s
nfs@ubuntu:~/test$sudo sync
nfs@ubuntu:~/test$sudo dd if=recovery.img of=/dev/sdb4
9200+0 records in
9200+0 records out
4710400 bytes (4.7 MB) copied, 8.25522 s,571 kB/s
nfs@ubuntu:~/test$sudosync
nfs@ubuntu:~/test$
将下载了镜像文件的SD卡插入i.MX51 EVK ,设置拨码开关为SD卡启动,连接i.MX51 EVK于PC串口,打开超级终端设置波特率为115200,进入U-Boot命令行后输入以下命令设置启动变量
BBG U-Boot > setenv bootcmd 'runbootcmd_SD1 bootcmd_SD2'
BBG U-Boot > setenv bootcmd_SD1 'runbootargs_base bootargs_android bootargs_SD'
BBG U-Boot > setenv bootcmd_SD2 'mmcread 0 ${loadaddr} 0x800 0x1800;mmc read 0 ${rd_loadaddr} 0x2000 0x258;bootm${loadaddr} ${rd_loadaddr}'
BBG U-Boot > setenv bootargs_base'setenv bootargs console=ttymxc0,115200'
BBG U-Boot > setenv bootargs_SD 'setenvbootargs ${bootargs}'
BBG U-Boot > setenv bootargs_android'setenv bootargs ${bootargs} init=/init androidboot.console=ttymxc0 di1_primarycalibration ip=dhcp'
BBG U-Boot > setenv loadaddr 0x90800000
BBG U-Boot > setenv rd_loadaddr0x90B00000
BBG U-Boot > saveenv
分区要点:
1.各个区的容量,要视情况而定,而不能照搬,例如放多媒体文件的区要越大越好,安装系统文件的区也尽量大一些,以便以后安装软件
2.一个区的编号应该尽量紧挨另一个区的编号
3.以上是1G的卡的分区分配情况,其他卡的分区容量要自己根据实际情况分配好
分区步骤
1.最windows的磁盘管理器进行格式化,和删除分区工作。
2.到Linux下进行分区,并保存
3.格式化
4.烧写镜像
磁盘容量的计算
对应一个磁盘来说:有盘面(side)(也就是磁头数的个数,一个盘面有一个磁头(header)),磁道(track),扇区(sector)组成,相同的磁道数构成一个柱面(clinders),一个扇区有固定的字节组成,一个是512个字节。
联想到磁盘的物理结构可知:
磁盘的容量=512*扇区数*磁道数*盘面数=一个柱面的所含的字节数*柱面个数(也就是磁道数)
等效的关系:柱面的个数=磁道数
盘面数=磁头数
一个柱面所含的字节数=512*扇区数*磁头数
对应我们8G的SD卡,卡的信息参数是
Disk /dev/sdb: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders
Units = cylinders of 15190 * 512 = 7777280bytes
Disk identifier: 0x00000000
我们的分区情况是
1.预留一个柱面用来存放MRB,uboot和kernel,uramdisk根文件系统。(即7M系统盘,类似于PC机的C盘,但是不对它进行分区,不存在文件系统)
2./dev/sdb1 基本分区用来存放多媒体文件,采用的是发热贴fat32 windows兼容的文件系统,即可以在windows里面进行访问(其他文件系统(ext3)不能再windows访问,他们是Linux特有的文件系统。我们给它分5G
3./dev/sdb2/ 基本分区是Android的系统文件,挂载成/system/目录,用来对存放Android的系统库,和安装.apk格式软件,我们给他分1G+128M=1128M
4./dev/sdb3/ 扩展分区512M
下面的逻辑分区为
/dev/sdb5/ 逻辑分区用来存放已安装的数据,如果应用程序安装过后的数据。挂载成
Mount as /data 挂载成/cache 我们分配256M
/dev/sdb5/逻辑分区 用来做Android缓存的,我们分配256M
5./dev/sdb4/ 基本分区 用来在恢复模式下使用,挂载成Mount as / in recovery mode。我们分配剩下的分区 (即384M,不需要我们手动设置)
Android程序的安装有两种方式:
1.拷贝安装法:类似于PC的程序安装法
拷贝安装法又有两种方法
一. 系统安装法,
该方法就像系统附带的程序一样安装,把.apk文件直接放到/system/app/下即可,这样我们安装的程序就跟系统自带的程序放在一起,在开机时自动安装启动。注意该方法一次性只能安装一个程序,多个程序要多次安装。
二. 手动安装法
把APK安装包放在SD卡里,系统启动后进入SD卡(可以通过SD卡浏览器来进入),让后点击该.apk安装版就可以安装该程序,类似于PC机程序的安装方法
2.使用ADB工具在线安装方法
ADB全称Android?Debug?Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机).
它的主要功能有:
ADB是一个 客户端-服务器端?程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.
先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机上打开选项settings-applications-development-USBdebugging.
对于Mac和Linux用户, 下载好的sdk解压后, 可以放~或者任意目录. 然后修改~/.bash_profile文件,?设置运行环境指向sdk的tools目录.
具体是打开~/.bash_profile文件(如果没有此文件也可以自行添加), 在里面加入一行:
export PATH=${PATH}:<你的sdk目录>/tools
然后就可以使用adb命令了.
嫌安装麻烦的同学其实也可以省去上面安装步骤, 直接输入完整路径来使用命令
对于windows xp用户, 需要先安装usb驱动,然后如果你只打算使用adb而不想下载整个sdk的话, 可以下载这个单独的adb工具包,下载后解压, 把里面 adb.exe 和 AdbWinApi.dll 两个文件放到系统盘的 windows/system32 文件夹里就可以了
ADB常用的几个命令
1. 查看设备
这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示
2. 安装软件
这个命令将指定的apk文件安装到设备上
3.卸载软件
如果加 -k 参数,为卸载软件但是保留配置和缓存文件.
4. 登录设备shell
这个命令将登录设备的shell.
后面加<command命令>将是直接运行设备命令, 相当于执行远程命令
5. 从电脑上发送文件到设备
用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)
6. 从设备上下载文件到电脑
用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑
7. 显示帮助信息
这个命令将显示帮助信息
删除Android系统Rom自带的软件
Android系统没有卸载Rom自带软件的功能.可能有些同学很想删除废了武功的Youtube,想删除墙那边的Twitter.
加上Android的快捷方式没法修改没法自己排序没法分页.
安装的程序太多就会发现原来找到自己想要的东西很难.
综上所述,我觉得告知各位菜鸟同学如何删除自带的程序是很有必要的一件事情.
1.确定手机root了,取得了root权限才能删除系统文件呀.
2.下载Android_db.rar,解压到%windir/%System32下.
3.手机连接数据线,在电脑上打开cmd,然后输入命令
adb remount
adb shell
su
执行完成之后,你会看到:
* daemon not running. starting it now *
* daemon started successfully *
4.接着就是Linux命令行模式了,输入
cd system/app
你会发现没啥变化,然后输入ls回车.
这时候列表显示了system/app里面的所有文件,也就是Rom集成的一些软件了.
5.开始删除吧.比如删除Youtube,他的文件名是Youtube.odex和Youtube.apk
我们要删除这2个文件,敲入以下命令:
rm Youtube.*
重启,Youtube已经删除掉了,注意各位同学千万不要删除你不知道是啥的东西.
指定允许AVD的内存大小:
emulator -avd avdName -partition-size 256
启动一个叫avdName的模拟器,允许内存最大为256M