You are on page 1of 142

android

Android1
Android

Mail:booklinbook@hotmail.com
TEL :13167032980

web
http://source.android.com/
http://source.android.com/source/download.html
http://www.hiapk.com/bbs/
http://www.ubuntu.com/
https://www.codeaurora.org/wiki/QAEP

1.Ubuntu linux
2.Apple Mac
3.windowsCygwin
ubuntu

ubuntu
http://www.ubuntu.com/desktop/getubuntu/download

ubuntuiso
usb

1.

2.update

3. oracle

vm virtualboxwinxp
flash

http://www.virtualbox.org/wiki/Linux_Downloads

iptux wine~~

$ sudo apt-get update

ubuntu
android
1.
$ sudo apt-get install git-core gnupg sun-java6-jdk flex bison
gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential
zip curl libncurses5-dev zlib1g-dev

sun-java6-jdk.
java6
$ sudo add-apt-repository "deb http://archive.canonical.com/
lucid partner"
$ sudo apt-get update

sun-java5-jdk

1./etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse

java5
sudo apt-get update
sudo apt-get install sun-java5-jdk.

javajavac
sunjdk jdk
update-alternatives --config java
java- 1.6.0-sun
2 java ( /usr/bin/java)

-----------------------------------------------------------------------------------------*0
/usr/lib/jvm/java-6-openjdk/jre/bin/java 1061

1
/usr/lib/jvm/java-1.6.0-sun/jre/bin/java 53

2
/usr/lib/jvm/java-6-openjdk/jre/bin/java 1061

[*]1
java
java -version
java version "1.6.0_22
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0_22-b03)
Java HotSpot(TM) Client VM (build 1.6.0_22-b03, mixed mode, sharing)

update-alternatives --config

javac javacversion

java
andriodsun java5.
androidjava6
android build/core/main.mk

sun

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
ifeq ($(strip $(java_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of java.)
$(info $(space))
$(info Your version is: $(shell java -version 2>&1 | head -n 1).)
$(info The correct version is: 1.6.)
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)http://source.android.com/download)
$(info ************************************************************)
$(error stop)
endif

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
ifeq ($(strip $(javac_version)),)
$(info ************************************************************)
$(info You are attempting to build with the incorrect version)
$(info of javac.)
$(info $(space))
$(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
$(info The correct version is: 1.6.)
$(info $(space))
$(info Please follow the machine setup instructions at)
$(info $(space)$(space)$(space)$(space)http://source.android.com/download)
$(info ************************************************************)
$(error stop)
Endif

android
java6 sun-java6-jdkjava5
sun-java5-jdk
main.mkandroidjava
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')

2.
sudo apt-get install valgrind
repo
$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

~/bin/ PATH

sudo gedit ~/.bashrc


.bashrc
PATH=$PATH:~/bin

android

myandroid
$ cd myandroid
$repo init -u git://android.git.kernel.org/platform/manifest.git
$repo sync

okppt

linux

$ grep . -rn color #


grep ANDROID_ROOT . rn color
$export = #
export ARCH = arm
export CROSSC_COMPILE= opt/bin
$echo $ #
echo $PATH

ppt

android

Android2
qualcomm msm7627

Mail:booklinbook@hotmail.com
TEL :13167032980

Agenda
MSM7627
Android
Amss

Arm11

Arm9


Msm7627 chip
ARM9
modem

~~~

ARM11
android

--android

--AMSS

Arm9arm11 share memory

dsp

msm7627

arm9,arm11amss(modem)android

arm11android

1.
https://www.codeaurora.org/wiki/QAEP

platform

Branch
()

Tag

$ repo init -u git://codeaurora.org/platform/manifest.git -b eclair -m M76XXTSNCJNLYA5210.xml


$ repo sync

2.eclair M76XXTSNCJNLYA5210.xml
android
$ repo init -u git://codeaurora.org/platform/manifest.git -b eclair -m
M76XXTSNCJNLYA5210.xml
$ repo sync

3.qualcomm

patch

5210patchHY11-VU969-3_5.2.10

qcom-proprietaryandroid
vendor

Cd /bin
Sudo rm sh
Sudo ln s bash sh //sh

4.

<1> source build/envsetup.sh


<2> choosecombo 1 1 9 3
<3> make j2

out/target/product/msm7627_surf
img

(1)bootloader
(2)appsboot.mbn
(3)appsboothd.mbn
(4)boot.img
(5)recover.img
(6)system.img

Android4
1. https://www.codeaurora.org/wiki/QAEP

2.

<1> repo init -u git://codeaurora.org/platform/manifest.git -b eclair -m


M76XXTSNCJNLYA5210.xml
<2> repo sync

3.patchandroidvendor
4.

<1> source build/envsetup.sh


<2> choosecombo 1 1 7 3
<3> make j2

Amss arm9

Amss

Amss

friendly

10
qualcomm
m(jb)k
turn-key
solution

1.IntelAMD
ARMRVCT
2.ARMRVCT2.2build 593patch
3.ActivePerl5.8.6.811
4.Cygwinwindowlinux
5.Python2.4.3(linux)

Amsswindow
1. cygwin
Cygwinpython

Install
default

Python

2.python2.4.3

python2.4.3python
cygwin
usr/local/bin

python

cygwinpython-2.4.3
./configure make
make install
usr/local/bin python

Python
usr/local/binpython.exe1kb
python_old.exe
python2.4.exe
python.exe. tnn

Python -V

Python 2.4.3,

3.RVCT

Rvctintel
cC:\ARM

crack\keygen.exe
licenselicense

windowsbuild
593patch
crack\patch.exe
crackreadme.txt
cmd.exe
cd c:\arm\rvct\programs\2.2\349\win_32-pentium
copy armcc.exe tcc.exe
copy armcc.exe armccp.exe
copy armcc.exe tcpp.exe

rvct
patch

amsswindow

cygwindos

cygwin
1.cygwin
cygwin/home/xxx../.bashrc
export ARMROOT=C:\\ARM
export ARMINCLUDE=$ARMROOT\\RVCT\\Data\\2.2\\349\\include\\windows
export ARMTOOLS=RVCT221
export ARMLIB=$ARMROOT\\RVCT\\Data\\2.2\\349\\lib
export ARMINC=$ARMINCLUDE
export ARMBIN=$ARMROOT\\RVCT\\Programs\\2.2\\349\\win_32-pentium
export PATH=$PYTHON_PATH:$ARMBIN:$PATHexport ARMHOME=$ARMROOT

2.cygwin../AMSS/products/76XX/build/ms

./TFNCKNLYM.cmd

hostdl_gen

..\AMSS\products\76XX\drivers\flash\tools\src\hos
tdl\hostdl_gen.

dosdos

1.
a.amss\products\76xx\build\ms\rvct22.bat

@echo off
REM ======================================================
rem Sets path for RVDS210, GNU and PERL

set ARMTOOLS=RVCT221

set ROOT_DRIVE=C:
set APPS_DIR=ARM
set APPS_PATH=%ROOT_DRIVE%\%APPS_DIR%

set ARMROOT=%APPS_PATH%
set UTILROOT=%ROOT_DRIVE%
set GNUPATH=%UTILROOT%\cygwin\bin
set PERLPATH=%UTILROOT%\perl\bin
set ARMPATH=%ARMROOT%\RVCT\Programs\2.2\349\win_32-pentium
set EMAKE_ROOT=../../../../..
rem
rem ARM Include and Path Variables
rem
set ARMLIB=%ARMROOT%\RVCT\Data\2.2\349\lib
set ARMINCLUDE=%ARMROOT%\RVCT\Data\2.2\349\include\windows
set ARMINC=%ARMROOT%\RVCT\Data\2.2\349\include\windows
set ARMBIN=%ARMROOT%\RVCT\Programs\2.2\349\win_32-pentium
REM set ARMCONF=%ARMROOT%\RDI\armperip\1.3\50
REM set ARMDLL=%ARMROOT%\RDI\rdimsvr\1.3.1\91\win_32-pentium;%ARMROOT%\RDI\Targets\Remote_A\1.3.1\98\win_32-pentium
set ARMHOME=%ARMROOT%
REM this is for BOULDER only!
REM set ARMLMD_LICENSE_FILE=8224@redcloud
REM San Diego's advertised program RVCT 2.0 installer should set this:
REM set ARMLMD_LICENSE_FILE=7117@license-ice1;7117@license-ice2;7117@license-ice3
rem
rem Path for RVCT, GNU, Perl tools
rem
set path=.;%PERLPATH%;%PYTHONPATH%;%GNUPATH%;%ARMPATH%;%UTILROOT%;%path%
REM ======================================================

b.amss\products\76xx\build\ms\TSNCJNLYM.cmd
BUILD_UNIX=yes USES_BUILD_NATIVELINUX_MODEM=yes

c.
\AMSS\products\76XX\secboot\cfg_data\Config_Gen.mak
\AMSS\products\76XX\services\fota\tools\fotapacker.mak
\AMSS\products\76XX\tools\headergen\image_auth.mak
\AMSS\products\76XX\tools\headergen\image_header.mak
\AMSS\products\76XX\tools\headergen\norimgtool.mak
\AMSS\products\76XX\tools\headergen\pboot_utils.mak
-mno-cygwin

2.dos cmd
cd amss\products\76xx\build\ms\
rvct22.bat
TSNCJNLYM

3.
amss\products\76xx\build\ms\ bin

windows
arm9
gitppt

ubuntuarm9

android

Android3
Qualcomm MSM7627 Boot(1)

Mail:booklinbook@hotmail.com
TEL :13167032980

Agenda

bootloader

Qct

Download

ARM9ARM11boot

Bootloaderbootloader
ppt

QCT Download

Arm9

Qcsbl boot
Oemsbl boot
Amss

Appsboot

Arm11

androidfastboot
Arm11 android

boot.img
bootloaderlinux kernelram disk
system.img
Android Root FS


Amss Arm9
Image

Android Arm11
Image

copy

Appsboot.mbn
bootloader

Qualcomm

QCSBL
-Continue to setup the hardware.

- For NAND, find active multi-image boot block. nand

- Load OEM-SBL header. oemsblmibib

- Load OEM-SBL image. oemsbl


- Authenticate OEM-SBL.OEM-SBL
- Execute OEM-SBL image.OEM-SBL
- Load AMSS header.AMSS
- Load AMSS image.AMSS
- Authenticate AMSS if required.AMSS
-Transfers control to the AMSS image

amss

OEMSBL
-
usbmmubus mpu~~
- DownloadQct downloader
oemsbl
- ARM11 appsbootarm11.

oemsbl
AppsbootArm11 Android
ppt2
Amssarm9 modem

Multi image Mibib Image Header ~~~


ppt

qcsbl.s

oemsbl.s

qcsbl.s

oemsbl.s

qcsbl.scl

From qcsbl.scl

oemsbl.scl

From Oemsbl.scl

oemsbl_mc.c

oemsbl_aarm_boot.c

Image

Header (hex)

Little end

oemsblhd.mbn

0x00062640 oemsbl image

0x0d740000

oemsbl

0x0d740000+ 0x00062640= 0xD7A2640

In targtfncknlym.h
#define SCL_EBI1_MEM_TOTAL_SIZE 0x10000000
#define SCL_MODEM_TOTAL_SIZE 0x2700000
#define SCL_MODEM_CODE_BASE ((SCL_EBI1_MEM_TOTAL_SIZE) - (SCL_MODEM_TOTAL_SIZE))
//0x10000000-0x2700000=0x0D900000
#define SCL_OEMSBL_TOTAL_SIZE 0x001C0000
#define SCL_OEMSBL_CODE_BASE ((SCL_MODEM_CODE_BASE) - (SCL_OEMSBL_TOTAL_SIZE))
//0xD900000-0x001C0000=0x0D740000

Image

Header
amsshd.mbn

appsboothd.mbn
typedef struct
{
image_type image_id;
miheader.h
uint32 header_vsn_num;
uint32 image_src
uint8* image_dest_ptr;
uint32 image_size;
uint32 code_size;
uint8* signature_ptr;
uint32 signature_size;
uint8* cert_chain_ptr;
uint32 cert_chain_size;
} mi_boot_image_header_type;

header

mibib

header
image_header.exe
image_header.c).

Appsbootheaderandroid
mkheadermkheader.c

G--Point(guan jian point)


qcsbl.s
AREA QCSBL_ENTRY, CODE, READONLY
CODE32
ENTRY

__main
_main
.
.
ldr
blx

qcsbl.s

r1, =qcsbl_main_ctl
r1

In qcsbl_mc.c
void qcsbl_main_ctl(void)
{
qcsbl_create_vector_table();
qcsbl_hw_init( &msm_hw_id );
if ( flash != NOR_FLASH )
{qcsbl_find_mibib( flash, &old_mibib_page_num,
&mibib_page_num );}
image_header.image_id = OEM_SBL_IMG;
qcsbl_load_header( flash,&image_header, mibib_page_num );
qcsbl_load_image( flash, &image_header );
sbl = (sbl_func_tbl_ptr_type)image_header.image_dest_ptr;
sbl->init( &qcsbl_interface );
qcsbl_create_bad_block_list( flash );
sbl->setup_trusted_platform();
sbl->pre_amss_load();
sw_vsn_id = (uint64) AMSS_SW_ID;
amss_func_ptr = (func_ptr_type)
qcsbl_load_amss_image( flash,&msm_hw_id,&sw_vsn_id);
sbl->post_amss_load();
(*amss_func_ptr)();
}

qcsbl_hw_init

qcsbl_load_header();
qcsbl_load_image();
sbl->init();
oemsbloemsbl
qcsbl_main_ctl
sbl->pre_amss_load();
Appsboot
arm11 android oemsbl
qcsbl_load_amss_image( );
amss iamge

(*amss_func_ptr)();
amss

Qcsbl

Oemsbl.s

PRESERVE8
AREA OEMSBL_FUNCTION_TABLE, DATA, READONLY
DCD oemsbl_bad_block_check
DCD oemsbl_read_page
DCD oemsbl_write_page
DCD oemsbl_is_erased
DCD oemsbl_erase_block
DCD oemsbl_error_handler
DCD oemsbl_init
DCD oemsbl_setup_trusted_platform
DCD oemsbl_pre_amss_load
DCD oemsbl_post_amss_load
DCD oemsbl_disable_data_cache
DCD oemsbl_re_enable_data_cache
DCD oemsbl_read_mpages

qcsbl_load_header();
qcsbl_load_image();
sbl->init();
oemsbloemsbl

sbl->pre_amss_load();
Appsboot
arm11 android oemsbl

oemsbl_init oemsbl_init_func_tbl[i]();
oemsbl_dload_check //qct download

oemsbl_setup_trusted_platform() //arm11

Oemsbl

oemsbl_pre_amss_load() //arm11 appsboot


oemsbl_load_aarm_bootloader,
oemsbl_create_aarm_partition_tbl,
..
oemsbl_boot_aarm //arm11

axi mpu ram


Usb charge~~~

In oemsbl_aarm_boot.c
// appsboot
void oemsbl_load_aarm_bootloader( void )
{
/* Load the aARM boot loader header from flash into RAM. */
image_header.image_id = APPSBL_IMG;
qcsbl_ptr->load_image_header( qcsbl_ptr->boot_flash,
&image_header,
qcsbl_ptr->active_mibib_page_number );
.
apps_image_start_addr = (uint32) image_header.image_dest_ptr;
.
}

In oemsbl_aarm_boot.c
//arm11
void oemsbl_boot_aarm( void )
{
HWIO_OUTM( MSM_RAIL_CLAMP_IO,
HWIO_FMSK( MSM_RAIL_CLAMP_IO, VDD_APC_CLAMP ),
0x0 );
..
HWIO_OUTM( A11_RESET,HWIO_FMSK( A11_RESET, POR ),
0x0 );
..
HWIO_OUT( APPS_ARM_DEBUG_CTL, 0x01 );
..
HWIO_OUT( A11_RESET, 0x0 );
} /* oemsbl_boot_aarm() */

Amss

arm9

arm9 amss

Seeyou byebye

android

Android4
Qualcomm MSM7627 Boot2
-----Arm11lk (appsboot) bootloader

Mail:booklinbook@hotmail.com
TEL :13167032980

Agenda

1 Arm9 Arm11 Release

2 Arm11lk (appsboot) bootloader


3

arm9 arm11 release

android_3.pdf

oemsbl_pre_amss_load() //arm11 appsboot


oemsbl_load_aarm_bootloader,
oemsbl_create_aarm_partition_tbl,
..
oemsbl_boot_aarm //arm11
Arm9 amss

android_3.pdfarm9

arm9arm11

arm9

arm11

1.oemsbl_load_aarm_bootloader
appsboot.mbnRAM

oemsbl_load_aarm_bootloader
..\AMSS\products\76XX\secboot\oem
sbl\oemsbl_aarm_boot.c

APPSBL_IMG

appsboothd.mbn

appsboot
ram0x00000000spec

con
2.appsboot.mbn

oemsbl_create_aarm_partition_tbl

oemsbl_create_aarm_partition_tbl

Arm11arm11

partition table
Android_5_mibib.ppt

static struct ptentry board_part_list[] = {


{
.start = 0,
.length = 40,
.name = "boot",
},
{
.start = 40,
.length = 680 /* 85MB */,
.name = "system",
},
{
.start = 720,
.length = 40 /* 5MB */,
.name = "cache",
},
{
.start = 760,
.length = 40 /* 5MB */,
.name = "recovery",
},
{
.start = 800,
.length = 720 /* 90MB */,
.name = "userdata",
},
};

con

3.oemsbl_get_bad_block_table
nand flash
arm11Nand flash

con
4.oemsbl_get_wm_uuid
window mobilelinux
androidmark

5.
oemsbl_boot_aarm

HWIO_A11_RESET_ADDR 0xa860020c
HWIO_MSM_RAIL_CLAMP_IO_ADDR 0xa8600290

MSM_RAIL_CLAMP_IO

1arm11reset
0

arm11release

appsboot

(appsboot)
bootloaderarm11

Arm11lk

lk (appsboot) bootloader
Lklittle kernelarm11
bootloaderusbbootloader5340
lkLittle kernel
bootloader
os
linux

Lk
fastbootimageflash
~~~
lk

lk

lk

crt0.s

lk

_start

crt0.s

Kmain()

kernel\main.c

void kmain(void)
{

1.lk
ppt
thread_init_early();

2.cachemmuarch

arch_early_init();

3.msm7227 76277x30
uart~~~
platform_early_init();

4.

target_early_init();

5.

call_constructors();

kmain

//lk
heap_init();
//
thread_init();
//dpclkevent
ppt
dpc_init();
//lk,
timer_init();
//boot

bootstrap2();

kmainc

kmain
lklk
os

thread_init_earlyheap_initthread_init
dpc_inittimer_init~~.
bootarch_early_init
platform_early_init bootstrap2

mmucache

mmu(Memory Management Unit

Cpu
core

m
m
u

Cpu
core

m
m
u

mmu

mmu

0x08048000
0x080ef000

mmu
a

Mmu
0xXXXXXXXX

0x08048000

m
m
u

0x080ef000

0xXXXXXXXX
0xXXXXXXXX
0xXXXXXXXX
0xXXXXXXXX
0xXXXXXXXX

VAPA
b

mmu
1.cpummu
cpu
mmucpu
mmummu

2.mmu

3.mmu
4.arm7mmuarm9
5.mmulk bootloader
mmubootloader

cache

1.cachecpuram
ram

2.cachecpu

cache

3.mmucache
4.msm7227 cpummucache
cp15ARM9

cp15

mmucachemmu
cachecp15cp15
mmucache

mmuarch_disable_mmu();
mrc p15, 0, r0, c1, c0, 0
//cp15c1cpur0
bic r0, r0, #(1<<0)
//
mcr p15, 0, r0, c1, c0, 0
//cp15c1

mrc
mcr

cp15c10
mmuEnable mmu

cache(arch_disable_cache(); )

cache-ops.S

mrc

p15, 0, r1, c1, c0, 0 //c1

Bic

r1, #(1<<2)//22

mcr

p15, 0, r1, c1, c0, 0//c1

Mmu(arm_write_ttbr(uint32_t val) )

mcr

p15, 0, r0, c2, c0, 0

C2

5340android2.1.kernelconfig
MSM_UART3_DEBUG
lk

Cache-ops.s

Mmu

ldr r0, =0x80000016


mcr p15, 0, r0, c15, c2, 4

arm

MSM_UART3_DEBUG

CONFIG_MSM_DEBUG_UART=3

#elif CONFIG_MSM_DEBUG_UART == 3
#define MSM_DEBUG_UART_PHYS MSM_UART3_PHYS
#endif //debug uart uart3
static void putc(int c) mach\uncompress.h
{
#if defined(MSM_DEBUG_UART_PHYS)
unsigned base = MSM_DEBUG_UART_PHYS;
while (!(readl(base + 0x08) & 0x04)) ;
writel(c, base + 0x0c);
#endif
} // kernelputc

MSM_UART3_DEBUG

1. ldr r0, =0x80000016 mcr p15, 0, r0, c15, c2, 4


cp15io
2. Linuxmmu

3. Kernel low-level debugging functions


CONFIG_DEBUG_LL

4.
ppt


1.arch_early_init2. platform_early_init3. bootstrap2.

arch_early_init()

arch_early_init()mmucache
mmu cachearm_mmu_init()
arm_mmu_init()

arch_disable_cache(UCACHE);

arm_mmu_init();
arch_enable_cache(UCACHE);

arch_early_initmmuplatform_early_init
uart
platform_early_init()
uart3_clock_init();
uart_init();
platform_init_interrupts()

uartuart3
uart3
821uart2
uart2lk

platform_init_timer();

TCXO/4uart
TCXO

platform_early_init()
uart3_clock_init();
uart_init();
platform_init_interrupts()

platform_init_timer();

0~31032~N1(N
)VIC_INT_XXX0, VIC_INT_XXX1 .
1.VIC_INT_SELECT0VIC_INT_SELECT1FIQIRQ

IRQFIQIRQ

2.VIC_INT_TYPE0VIC_INT_TYPE1edge
level

edge
3.VIC_INT_ENCLEAR0VIC_INT_ENCLEAR1
VIC_INT_ENSET0VIC_INT_ENSET1
lk

platform_early_init()
uart3_clock_init();
uart_init();
platform_init_interrupts()

platform_init_timer();

DGT

timer

bootstrap2.
kmainbootstrap2
thread_resume(thread_create("bootstrap2", &bootstrap2, NULL,
DEFAULT_PRIORITY, DEFAULT_STACK_SIZE));
platform_init

bootstrap2

target_init

apps_init

Platform
acpu_clock_initarm11
acpu_clock_init

target_init7227_ffa
partition table
target_init

Apps_initlkapp
aboot_init
linuxaboot_init

acpu_clock_init

void acpu_clock_init(void)
{
int *modem_stat_check = (MSM_SHARED_BASE + 0x14);
while (readl(modem_stat_check) != 1); //share memoryarm9
while
writel((1 << 7) | (VDD_LEVEL << 3), VDD_SVS_PLEVEL_ADDR);//arm11 VDD

i = readl(A11S_CLK_SEL_ADDR) & 1;
clk = readl(PLL2_L_VAL_ADDR) & 0x3F;//arm11
for(; i < ARRAY_SIZE(clk_cntl_reg_val_7627); i += 2)
{
if(clk == ACPU_800MHZ)//7x27a800
writel(clk_cntl_reg_val_7627A[i], A11S_CLK_CNTL_ADDR);
else //7x27600
writel(clk_cntl_reg_val_7627[i], A11S_CLK_CNTL_ADDR);
writel(clk_sel_reg_val[i], A11S_CLK_SEL_ADDR); //
}
}

target_init
void target_init(void)
{
keys_init();
keypad_init();//
..
if (target_is_emmc_boot()) return;//emmcnand
..
ptable_init(&flash_ptable);//arm11partition
smem_ptable_init();//arm9partition
...
flash_init();//flash
..
flash_info = flash_get_info();//flash
..
offset = smem_get_apps_flash_start();
total_num_of_blocks = flash_info->num_blocks;
smem_add_modem_partitions(&flash_ptable);
flash_set_ptable(&flash_ptable);//arm9arm11partitiontable
..
}

apps_init
void apps_init(void)
{
const struct app_descriptor *app;
for (app = &__apps_start; app != &__apps_end; app++) {
if (app->init) app->init(app);//section(apps)
}//aboot_init()
for (app = &__apps_start; app != &__apps_end; app++) {//.
if (app->entry && (app->flags & APP_FLAG_DONT_START_ON_BOOT) == 0) {
start_app(app);
}//
}

}
#define APP_START(appname) struct app_descriptor _app_##appname __SECTION(".apps") = { .name = #appname,
#define APP_END };

APP_START(aboot)
.init = aboot_init,
APP_END
In aboot.c

APP_START(shell)
.init = shell_init,
.entry = shell_entry,
APP_END
In shell.c

lk
bootstrap2,bootstrap2
app()
linuxAboot
appaboot
linux kernel
aboot_init

void aboot_init(const struct app_descriptor *app)


{
display_init();//splashlcd
page_size = flash_page_size(); //page 2k
.. //fastbootrecovery
if (keys_get_state(KEY_HOME) != 0){boot_into_recovery = 1;}
if (keys_get_state(KEY_BACK) != 0){goto fastboot;}
if (keys_get_state(KEY_CLEAR) != 0){goto fastboot;}
reboot_mode = check_reboot_mode(); //
if (reboot_mode == RECOVERY_MODE) { boot_into_recovery = 1;}//recovery
else if(reboot_mode == FASTBOOT_MODE) {goto fastboot;}//
get_power_on_reason();//arm9~~~
recovery_init();
boot_linux_from_flash();//nandlinux kernel <-----------fastboot: //fastbootfastbootppt
if(!disp_init) { display_init();}
else { fbcon_clear();}
udc_init(&surf_udc_device);
fastboot_register("boot", cmd_boot); fastboot_register("erase:", cmd_erase);
..
udc_start();//usb
target_battery_charging_enable(1, 0);
}

boot_linux_from_flash()
linux Kernel


boot.img1.kernel 2.kernel3.ramdisk, 4.second stage()
+-----------------+
| boot header | 1 page
+-----------------+
| kernel
| n pages
+-----------------+
| ramdisk
| m pages
+-----------------+
| second stage | o pages
+-----------------+


256M Hdr->kernel_addr=0x208000 kernel
Hdr->ramdisk_addr =0x1200000 .
ppt

lk

linux kernel

ppt

lkppt

lk

1.lknand

flash

lk\platform\nand.c
static struct flash_identification supported_flash[] =
{
/* Flash ID ID Mask Density(MB) Wid Pgsz Blksz oobsz onenand Manuf */
{0x00000000, 0xFFFFFFFF,
0, 0,
0,
0, 0, 0},
{0x1500aaec, 0xFF00FFFF, (256<<20), 0, 2048, (2048<<6), 64, 0}, /*Sams*/
{0x5500baec, 0xFF00FFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Sams*/

{0x5580baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Hynx*/


{0x005c00ec, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 1}, /*Sams*/
{0x005800ec, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 1}, /*Sams*/
{0x6600bcec, 0xFF00FFFF, (512<<20), 1, 4096, (2048<<6), 128, 0}, /*Sams*/
{0x5500bcec, 0xFF00FFFF, (512<<20), 1, 2048, (2048<<6), 64, 0}, /*IQ820 Sams*/

};

2.lk

In lk\target\msm7627_ffa\keypad.c
static unsigned int halibut_row_gpios[] = { 31, 32, 33};
static unsigned int halibut_col_gpios[] = { 38, 39, 40 };
static const unsigned short halibut_keymap[ARRAY_SIZE(halibut_col_gpios) * ARRAY_SIZE(halibut_row_gpios)]

[KEYMAP_INDEX(0, 0)] = NOKEY,


[KEYMAP_INDEX(0, 1)] = KEY_BACK,
[KEYMAP_INDEX(0, 2)] = NOKEY,
[KEYMAP_INDEX(1, 0)] = NOKEY,
[KEYMAP_INDEX(1, 1)] = KEY_HOME,
[KEYMAP_INDEX(1, 2)] = NOKEY,
[KEYMAP_INDEX(2, 0)] = NOKEY,

={

//retrun
//vol+(KEY_VOLUMEUP), now as up
//research(?), now as right
//home(230), now as enter
//vol-(KEY_VOLUMEDOWN) , now as center
//send(?), now as left
//menu

3.lkarm11

In lk\target\msm7627_ffa\init.c
static struct ptentry board_part_list[] = {
{ .start = 0, .length = 40 /* 5MB */,
.name = "boot",},
{ .start = 40, .length =960 /* 120MB */, .name = "system",},
{.start = 1000, .length = 40 /* 5MB */, .name = "cache",},
{.start = 1040,.length = 40 /* 5MB */,.name = "recovery",},
{.start = 1080,.length = 12 /* 1.5MB */,.name = persist",},
{.start = 1092,.length = 2400,.name = "userdata", },
};

4.lk
In lk\project\msm7627_ffa.mk

DEFINES += WITH_DEBUG_UART=1
In lk\platform\msm_shared\uart.c

5.lklcdsplash.img

1 In lk\target\msm7627_ffa\rules.mk
DEFINES += DISPLAY_TYPE_MDDI=0
DEFINES += DISPLAY_TYPE_LCDC =1 //821lcdc
DEFINES += DISPLAY_SPLASH_SCREEN =1

2 In lk\platform\msm_shared\lcdc.c
lcd struct fbcon_config *lcdc_init(void)
820 700
lcdgpiolk
lkgpiolk\platform\msm7k\gpio.clcdc
lcdc_init
3table splashboard_part_list[]
4565splash.img fastboot

6.lkdebug
splashlklcdc

lk\project\msm7627_ffa.mk
DEFINES += WITH_DEBUG_FBCON=1

You might also like