版权声明
更新:2017-06-07
博主:LuckyAlan
联系:liuwenvip163@163.com
声明:吃水不忘挖井人,转载请注明出处!
1 文章介绍
今天在进行Android分区修改的时候发现擦除后无法进入kernel,查了一下是因为bootargs_Hi3798MV200-emmc.txt文件中的bootcmd没有修改。这个参数与内核启动有关,需要用到mmc命令,因此多mmc相关的命令做一个学习总结。
2 开发平台
软件平台:Android系统。
硬件平台:hisi3798MV200
3 阅读须知
无
4 文章正文
4.1 打印当前mmc设备的信息
命令: mmcinfo
4.2 对mmc进行读写操作
4.2.1 命令说明
读操作命令: mmc read <device num> addr blk# cnt [partition]
写操作命令: mmc write <device num> addr blk# cnt [partition]
参数说明:
- device num:mmc的设备号,可以通过mmc list查询
- addr:内存地址
- blk# :mmc内的块号
- cnt:块数目
4.2.2 命令举例
读操作: mmc read 0x10800000 0x600 0x10
读操作说明:从第0个mmc设备块上1536*512个字节处开始(1536是0x600的十进制),读取16×512个字节(16是10的10进制)到内存0x10800000 处。以kernel为例,若前面的分区为94M(也就是kernel的分区从94M的地方开始),那么,0x600的地方的值应为:94*2*1024的十六进制0x2F000。
为何这样计算呢?我们在系统开始的时候可以看到如下打印信息:
在上图中可以看到,每个块是512Bytes,因此kernel的启动地址为94*1024*1024改为94*1024*1024/512=94*2*1024。下面的计算方法相同。
写操作: mmc write 0x90000000 0x600 0x10
写操作说明:把内存0x90000000开始,长度为16x512大小的数据,写入到第2个mmc设备块偏移位置为0x600处。
5 参考资料
1、《常用u-boot命令详解(全)》
2、《uboot中的mmc命令》
3、《mmc的命令里面write的参数是16进制却不需要写0x》