KS 工作记录

EMMC
DDR
LCD LVDS LDB
FLASH UBOOT
V4L2 CALL FLOW
TS
CAMERA
ANDROID
MARKDONW
KGDB
QEMU
KERNEL
UBOOT
MISC
UBUNTU
MEMORY BARRIER
FEC
WIFI
IMX6
OpenCV

EMMC

MX6SDL SABRESD U-Boot > mmc list //表示该芯片有4个SD接口,如下原理图所示:
FSL_USDHC: 0
FSL_USDHC: 1
FSL_USDHC: 2
FSL_USDHC: 3

emmc1

emmc2

从原理图上可以知道,EMMC接到的是第四个接口上,所以要操作EMMC的话需要切换到相应的接口:
MX6SDL SABRESD U-Boot > mmc dev 3 //UBOOT里从0开始计数
mmc3(part 0) is current device

MX6SDL SABRESD U-Boot > mmc part //显示EMMC上的分区情况:
Partition Map for UNKNOWN device 3 – Partition Type: DOS
Partition Start Sector Num Sectors Type
1 16384 16384 83
2 32768 16384 83
3 49152 2211840 5 Extd
4 2260992 13090816 83
5 49153 1048575 83
6 1097729 1048575 83
7 2146305 16383 83
8 2162689 16383 83

MX6SDL SABRESD U-Boot > mmcinfo // 显示EMMC的信息:
Device: FSL_USDHC
Manufacturer ID: 45
OEM: 100
Name: SEM08
Tran Speed: 25000000
Rd Block Len: 512
MMC version 4.0
Clock: 52000000
High Capacity: Yes
Capacity: 7818182656 Bytes
Bus Width: 8-bit DDR
Current Partition for boot: Boot partition 1 //从这里可以知道启动分区是在第一个分区上

所以要切换到启动分区的话:
MX6SDL SABRESD U-Boot > mmc dev 3 1
switch to partition #1, OK
mmc3(part 1) is current device
MX6SDL SABRESD U-Boot > mmc part // 可以看到BOOT分区没有逻辑分区

Partition Map for UNKNOWN device 3 – Partition Type: DOS

Partition Start Sector Num Sectors Type
bad MBR sector signature 0x0000

在第一个分区才能看到有逻辑分区,可以知道这个分区应该是UDA分区:
MX6SDL SABRESD U-Boot > mmc dev 3 0
switch to partition #0, OK
mmc3(part 0) is current device

参考文章http://blog.csdn.net/simonjay2007/article/details/43198353.

MX6SDL SABRESD U-Boot > mmc part

Partition Map for UNKNOWN device 3 – Partition Type: DOS

Partition Start Sector Num Sectors Type
1 16384 16384 83
2 32768 16384 83
3 49152 2211840 5 Extd
4 2260992 13090816 83
5 49153 1048575 83
6 1097729 1048575 83
7 2146305 16383 83
8 2162689 16383 83

内核中看到的分区表信息
major minor #blocks name
179 0 7634944 mmcblk0
179 1 8192 mmcblk0p1
179 2 8192 mmcblk0p2
179 3 1 mmcblk0p3
179 4 6504448 mmcblk0p4
179 5 524287 mmcblk0p5
179 6 524287 mmcblk0p6
179 7 8191 mmcblk0p7
259 0 8191 mmcblk0p8
179 16 2048 mmcblk0boot1
179 8 2048 mmcblk0boot0

UBOOT里看到的分区表信息
Partition Start Sector Num Sectors Type
1 16384 16384 83
2 32768 16384 83
3 49152 2211840 5 Extd
4 2260992 13090816 83
5 49153 1048575 83
6 1097729 1048575 83
7 2146305 16383 83
8 2162689 16383 83

分析烧写工具里脚本知道:
boot.img烧写到了p1分区,对应UBOOT里的就是16384这个起始地址,转换为16进制就是4000

dd if=$FILE of=/dev/mmcblk0p1  

脚本里烧写IMX6DL ANDROID EMMC的内容:

clean up u-boot parameter:

dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1536 count=16

从这里知道参数存在偏移地址1536的地方,
既后面的blk=1536的十六进制(600),长度是16 * 512 = 2000(十六进制)

先要切换到part 0
MX6SDL SABRESD U-Boot > mmc dev 3 0
switch to partition #0, OK
mmc3(part 0) is current device
读参数分区(确保参数都已经写入到EMMC中了):
* Warning - bad CRC or MMC, using default environment //说明参数分区没有写入EMMC中
MX6SDL SABRESD U-Boot > save //保存参数分区到EMMC中

MX6SDL SABRESD U-Boot > mmc read 0x10800000 600 100 //这里最多读2000长度
显示:
MX6SDL SABRESD U-Boot > md.b 0x10800000 100
10800000: 71 de d3 09 62 6f 6f 74 64 65 6c 61 79 3d 33 00 q…bootdelay=3.
10800010: 62 61 75 64 72 61 74 65 3d 31 31 35 32 30 30 00 baudrate=115200.
10800020: 69 70 61 64 64 72 3d 31 39 32 2e 31 36 38 2e 31 ipaddr=192.168.1
10800030: 2e 31 30 33 00 73 65 72 76 65 72 69 70 3d 31 39 .103.serverip=19
10800040: 32 2e 31 36 38 2e 31 2e 31 30 31 00 6e 65 74 6d 2.168.1.101.netm
10800050: 61 73 6b 3d 32 35 35 2e 32 35 35 2e 32 35 35 2e ask=255.255.255.
10800060: 30 00 6c 6f 61 64 61 64 64 72 3d 30 78 31 30 38 0.loadaddr=0x108
10800070: 30 30 30 30 30 00 72 64 5f 6c 6f 61 64 61 64 64 00000.rd_loadadd
10800080: 72 3d 30 78 31 31 30 30 30 30 30 30 00 6e 65 74 r=0x11000000.net
10800090: 64 65 76 3d 65 74 68 30 00 65 74 68 70 72 69 6d dev=eth0.ethprim
108000a0: 65 3d 46 45 43 30 00 73 70 6c 61 73 68 69 6d 61 e=FEC0.splashima
108000b0: 67 65 3d 30 78 33 30 30 30 30 30 30 30 00 73 70 ge=0x30000000.sp
108000c0: 6c 61 73 68 70 6f 73 3d 6d 2c 6d 00 6c 76 64 73 lashpos=m,m.lvds
108000d0: 5f 6e 75 6d 3d 31 00 62 6f 6f 74 61 72 67 73 3d _num=1.bootargs=
108000e0: 63 6f 6e 73 6f 6c 65 3d 74 74 79 6d 78 63 30 2c console=ttymxc0,
108000f0: 31 31 35 32 30 30 20 69 6e 69 74 3d 2f 69 6e 69 115200 init=/ini

write U-Boot to sd card:

dd if=$FILE of=/dev/mmcblk0 bs=512 seek=2 skip=2

跳过了前 2 * 512 字节 = 1024字节 既0x400
切换到UBOOT的分区:为什么知道这个分区里烧的是UBOOT?
MX6SDL SABRESD U-Boot > mmc bootpart
Device 3: boot partition 1 is for boot //从这个信息得到,大胆猜测 part 1就是bootloader

切换到UBOOT的分区:
MX6SDL SABRESD U-Boot > mmc dev 3 1
switch to partition #1, OK
mmc3(part 1) is current device

读出UBOOT到DDR中:
MX6SDL SABRESD U-Boot > mmc read 0x10800000 2 100
显示读出的内容:
MX6SDL SABRESD U-Boot > md.b 0x10800000 200
10800000: d1 00 20 40 e0 06 80 27 00 00 00 00 2c 04 80 27 .. @…’….,..’
10800010: 20 04 80 27 00 04 80 27 00 00 00 00 00 00 00 00 ..’…’……..
10800020: 00 00 80 27 58 f5 06 00 00 00 00 00 d2 02 a0 40 …’X……….@
10800030: cc 02 9c 04 02 0e 07 74 00 0c 00 00 02 0e 07 54 …….t…….T
10800040: 00 00 00 00 02 0e 04 ac 00 00 00 30 02 0e 04 b0 ………..0….
10800050: 00 00 00 30 02 0e 04 64 00 00 00 30 02 0e 04 90 …0…d…0….
10800060: 00 00 00 30 02 0e 07 4c 00 00 00 30 02 0e 04 94 …0…L…0….
10800070: 00 00 00 30 02 0e 04 a0 00 00 00 00 02 0e 04 b4 …0…………
10800080: 00 00 00 30 02 0e 04 b8 00 00 00 30 02 0e 07 6c …0…….0…l
10800090: 00 00 00 30 02 0e 07 50 00 02 00 00 02 0e 04 bc …0…P……..
108000a0: 00 00 00 30 02 0e 04 c0 00 00 00 30 02 0e 04 c4 …0…….0….
108000b0: 00 00 00 30 02 0e 04 c8 00 00 00 30 02 0e 04 cc …0…….0….
108000c0: 00 00 00 30 02 0e 04 d0 00 00 00 30 02 0e 04 d4 …0…….0….
108000d0: 00 00 00 30 02 0e 04 d8 00 00 00 30 02 0e 07 60 …0…….0…`
108000e0: 00 02 00 00 02 0e 07 64 00 00 00 30 02 0e 07 70 …….d…0…p
108000f0: 00 00 00 30 02 0e 07 78 00 00 00 30 02 0e 07 7c …0…x…0…|
10800100: 00 00 00 30 02 0e 07 80 00 00 00 30 02 0e 07 84 …0…….0….
10800110: 00 00 00 30 02 0e 07 8c 00 00 00 30 02 0e 07 48 …0…….0…H
10800120: 00 00 00 30 02 0e 04 70 00 00 00 30 02 0e 04 74 …0…p…0…t
10800130: 00 00 00 30 02 0e 04 78 00 00 00 30 02 0e 04 7c …0…x…0…|
10800140: 00 00 00 30 02 0e 04 80 00 00 00 30 02 0e 04 84 …0…….0….
10800150: 00 00 00 30 02 0e 04 88 00 00 00 30 02 0e 04 8c …0…….0….
10800160: 00 00 00 30 02 1b 08 00 a1 39 00 03 02 1b 08 0c …0…..9……
10800170: 00 1f 00 1f 02 1b 08 10 00 1f 00 1f 02 1b 48 0c …………..H.
10800180: 00 1f 00 1f 02 1b 48 10 00 1f 00 1f 02 1b 08 3c ……H……..<
10800190: 42 48 02 48 02 1b 08 40 02 11 02 0b 02 1b 48 3c BH.H…@……H<
108001a0: 41 7f 02 11 02 1b 48 40 01 5d 01 66 02 1b 08 48 A…..H@.].f…H
108001b0: 4b 4c 50 4d 02 1b 48 48 49 4c 4f 48 02 1b 08 50 KLPM..HHILOH…P
108001c0: 3f 3f 2e 31 02 1b 48 50 2b 35 38 2b 02 1b 08 1c ??.1..HP+58+….
108001d0: 33 33 33 33 02 1b 08 20 33 33 33 33 02 1b 08 24 3333… 3333… 108001e0:33333333021b082833333333021b481c3333(3333..H.108001f0:33333333021b482033333333021b48243333..H3333..H

对比烧写的镜像文件,这里有点要注意的是,我们烧写的时候是跳过了镜像文件的前skip * 512字节的
也就是跳过了u-boot-6dl.bin的前0x400字节,所以要从u-boot-6dl.bin文件的0x400开始对比:
发现有段数据不一致?目前不知道为什么?从0x590开始才一样 //这里目前有个疑点

0000400: 3f00 2040 3f06 3f27 0000 0000 2c04 3f27 ?. @?.?’….,.?’
0000410: 2004 3f27 0004 3f27 0000 0000 0000 0000 .?’..?’……..
0000420: 0000 3f27 583f 0600 0000 0000 3f02 3f40 ..?’X?……?.?@
0000430: 3f02 3f04 020e 0774 000c 0000 020e 0754 ?.?….t…….T
0000440: 0000 0000 020e 043f 0000 0030 020e 043f …….?…0…?
0000450: 0000 0030 020e 0464 0000 0030 020e 043f …0…d…0…?
0000460: 0000 0030 020e 074c 0000 0030 020e 043f …0…L…0…?
0000470: 0000 0030 020e 043f 0000 0000 020e 043f …0…?…….?
0000480: 0000 0030 020e 043f 0000 0030 020e 076c …0…?…0…l
0000490: 0000 0030 020e 0750 0002 0000 020e 043f …0…P…….?
00004a0: 0000 0030 020e 043f 0000 0030 020e 043f …0…?…0…?
00004b0: 0000 0030 020e 043f 0000 0030 020e 043f …0…?…0…?
00004c0: 0000 0030 020e 043f 0000 0030 020e 043f …0…?…0…?
00004d0: 0000 0030 020e 043f 0000 0030 020e 0760 …0…?…0…`
00004e0: 0002 0000 020e 0764 0000 0030 020e 0770 …….d…0…p
00004f0: 0000 0030 020e 0778 0000 0030 020e 077c …0…x…0…|
0000500: 0000 0030 020e 073f 0000 0030 020e 073f …0…?…0…?
0000510: 0000 0030 020e 073f 0000 0030 020e 0748 …0…?…0…H
0000520: 0000 0030 020e 0470 0000 0030 020e 0474 …0…p…0…t
0000530: 0000 0030 020e 0478 0000 0030 020e 047c …0…x…0…|
0000540: 0000 0030 020e 043f 0000 0030 020e 043f …0…?…0…?
0000550: 0000 0030 020e 043f 0000 0030 020e 043f …0…?…0…?
0000560: 0000 0030 021b 0800 3f39 0003 021b 080c …0….?9……
0000570: 001f 001f 021b 0810 001f 001f 021b 480c …………..H.
0000580: 001f 001f 021b 4810 001f 001f 021b 083c ……H……..<
0000590: 4248 0248 021b 0840 0211 020b 021b 483c BH.H…@……H<
00005a0: 417f 0211 021b 4840 015d 0166 021b 0848 A…..H@.].f…H
00005b0: 4b4c 504d 021b 4848 494c 4f48 021b 0850 KLPM..HHILOH…P
00005c0: 3f3f 2e31 021b 4850 2b35 382b 021b 081c ??.1..HP+58+….
00005d0: 3333 3333 021b 0820 3333 3333 021b 0824 3333… 3333… 00005e0:33333333021b082833333333021b481c3333(3333..H.00005f0:33333333021b482033333333021b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值