Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2118653
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: Android平台

2015-11-16 19:15:18

1. preloader的编译及源码
1.1 编译
  ./mk r pl
1.2 源码目录
preloader的代码在如下两个目录中:
   ./mediatek/custom/hqunited72_we_72_kk/preloader
   ./mediatek/platform/mt6572/preloader

2. preloader解析
2.1 开始
./mediatek/platform/mt6572/preloader/src/init/init.s
  1. a. 中断向量表
  2. b. SVC32 mode
  3. c. disable interrupt
  4. d. 关dcache与icache
  5. e. 关smp
  6. f. enable I+Z+SMP bits and disable D bit
  7. g. clear_bss
  8. h. setup_stk
  9. i. B main
2.2 main中
./mediatek/platform/mt6572/preloader/src/core/main.c
  1. main
  2.  --> bldr_pre_process
  3.    --> platform_pre_init
  4.    --> ptp_init
  5.    --> mtk_pll_init
  6.    --> mtk_uart_init
  7.    --> pmic_init

  8.  --> platform_init
  9.    --> mtk_wdt_init
  10.    --> set_kpd_pmic_mode
  11.    --> mt_mem_init         //mcp的初始化
  12.    --> boot_device_init


  13.  --> part_init
  14.    --> boot_device_init之后,从boot device中读取分区表
  15.    --> 这个分区表就是MT6572_Android_scatter.txt
  16.    --> sec_lib_init
  17.    --> mtk_uart_init    //串口的初始化

  18. --> bldr_handshake
  19.    --> 正常boot的情况下usb枚举完,需要

  20. --> bldr_load_part
  21.    --> 前面part_init己经读取了分区表,这儿按分区将lk(即uboot所在的分区)
  22.    --> 从设备读取到DRAM的0x80020000 (mem)
  23.    --> 读lk.bin时先读前512字节,解析出lk.bin的数据长度
  24.    --> 然后再把lk.bin中所有的数据读到DRAM中,而不是直接读取整个分区

  25. -->bldr_post_process
  26.    --> 将bootargs放在固定的内存地址处

  27. -->bldr_jump
  28.    --> 跳转到0x80020000处,参数的地址是BOOT_ARGUMENT_ADDR


三.文件lk.bin解析
1. 16进制打开lk.bin
  1. 0000000: 8816 8858 701d 0400 4c4b 0000 0000 0000 ...Xp...LK......
  2. 0000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  3. 0000020: 0000 0000 0000 0000 ffff ffff ffff ffff ................
  4. ...
  5. 00001f0: ffff ffff ffff ffff ffff ffff ffff ffff ................
[0-3]: 8816 8858    -->magic :0x58881688
[4-7]: 7013 0400    --> dsize  :0x041370
[8-40]: 4c4b 0000 ... --> name: LK
[40-43]: ffff  ffff      --> maddr: 这个地址没有用到

关于文件长度:
267632 = 267120+512
  1. cong@msi:/work/mtk/6572$ ls -l out/target/product/hqunited72_we_72_kk/lk.bin
  2. -rw-rw-r-- 1 cong cong 267632 Nov 12 17:46 out/target/product/hqunited72_we_72_kk/lk
2.
关smp的汇编代码
  1. .globl apmcu_disable_smp
  2. apmcu_disable_smp:
  3.     MRC p15,0,r0,c1,c0,1
  4.     BIC r0,r0,#0x040 /* SMP bit */
  5.     MCR p15,0,r0,c1,c0,1
  6.     BX lr


阅读(1691) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~