• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 手机设计 > 手机硬件设计交流 > windows mobile 学习日志

windows mobile 学习日志

录入:edatop.com     点击:

安装mobile 是学习的开始,也可是说是整个过程的最简单的部分。不过没有朋友的指点。
一开始还真有点手忙脚乱的。
安装的过程分为两步,第一步先装AK ,接下来安装AKU。和装通常的开发工具没有什么
区别,只有一点小的细节需要注意,首先你的操作系统最好是XP的,然后你最好为你的mobile
开发工具准备20G的空间。还有就是安装的时间比较长,要有点耐心。呵呵如果前面两条没注意
那耐心还要多一点,原因吗?很简单是你要多装两次了。不过mobile 还好了,如果你碰到NXP的
平台,如果你装的不顺,那才叫郁闷啦

废话少说,装好平台就开始一个工程吧,现看看怎么创建工程吧。先选择New Build Window wizard
菜单。在哪?不就在开始菜单->程序—>microsoft platform bulider for window moblie 下吗?
这么简单还要我说。选择你的工程目录再next 后到Cofingure Build windows parameters 界面,
选择你的BSP(如果你暂时还没有,就选择 DeviceEmulator),Release Tye (现选择Retail 吧)
和语言,显示尺寸。然后next再确认下就OK了。
最后开始编译刚才创建的工程,开始菜单选择运行,再敲CMD 命令,到命令行提示窗口.进入你的工程
目录进入BuildScripts 目录,这个目录里放的是你创建工程编译的批处理文件,一个工程一个目录。
在这个目录选择你刚才创建的目录,进去执行BuildAll.bat 批处理,下面的工作就是开始等待编译结果。
呵呵,慢慢等吧。

写的不错,顶一下

BSP 移植是mobile 开发的主要工作,了解下BSP的目录结构的同时也了解了
我们大致要做的工作。
我们要做的工作的代码主要放在platform 这个目录里,在这里存放各个BSP
,每个BSP一个目录,我的目录名称叫做B1 ,没有特别的含义,自己随便起的
但这个应该不是一个好的编程习惯,在实际的工作中应该避免。进入B1 目录,
当然发现几个目录和文件,挑几个自己认为重要的说吧。
dirs 文件,这个文件记录了需要参加编译的子目录,打开b1 下的dirs
文件,在最后会发现DIRS=src 这景,表示编译的子目录只有一个src .对啦
source 啊。
赶快进去吧,又发现一个dirs 文件,打开后发现DIRS=common drivers apps kernel bootloader
一看就清楚了,参见编译的是common ,driver ,apps ,kernel ,bootloader目录
我们最主要关心的就是 driver,kernel,bootloader 。从哪开始,bootloader吧。

不错不错,期待后续……

期待有续集。

bootloader 是什么呀?它是操作系统内核运用之前的一段小程序
通过这段小程序,可以初始化硬件设备,建立操作系统的内存空间影
射图,从而将系统的软硬件环境带到一个已经确定的状态,然后将操
作系统的内核加载的RAM中,并将系统的控制权交给内核。
进入bootloader 目录,打开bootloader 目录下的dirs 文件了解
到bootloader目录中 参加编译的子目录为DHCP,IPL 和EBOOT。其中
DHCP实现的是TCP/IP 的协议的DHCP 协议。暂时不先不考虑移植。
IPL目录主要实现的是IPL 功能。呵呵有点费话,谁不知道啊。
但IPL功能是什么啦?IPL是Initial Program Loader 的英文缩写。主
要功能是负责操作系统镜像的下载!
EBOOT 吗,从单词的名字来看,就是boot啦!用来初始化硬件和软件
的基本环境,为系统的引导作准备,和它功能相似的大概有uboot程序。你
可以通过eboot 来下载程序,这个在开发中非常方便。如果在指定时间没
有选择下载,EBOOT 可以通过IPL正常启动操作系统内核。系统开机的流程
大致是开机->芯片内部boot ROM->Eboot->IPL_OS呵呵,这就是bootloader
目录的大致情况,当然它的功能远远超过上面所述。不过这只是开始,就
先这样大概看一下吧。老猪又吃了遍人参果啊!
在正式的移植前,我们先build 下吧,确认当前的代码没问题。在保存
一个备份,这个是开发一个新系统的基本步骤。再buildAll,呵呵,受不了
啊!一两个小时啦。好在mobile有简便的方法。还是先进控制台模式,进入
工程目录下的BuildScripts。再进入自己的工程目录,这次不要BuildALl,了
运行下BaseOSEnv.bat 吧。这个时候编译环境变量已经设置好了。并且退到
工程模式的根目录下了,进入今天想编译的目录\platform\b1\src\bootloader
然后敲入build 命令。啊,这下编译快多了。

既然系统开机的流程是硬件开机->eboot-> IPL->OS 的内核,那么移植的工作就从eboot 开始吧。
进入eboot 的目录。里面就是EBOOT的源文件了,有些.c 文件和.S 文件。.C 文件是C 语言的源文
件,.S 是ARM 的汇编文件。
这边还有个比较特殊文件,需要简单的开一下-source 文件。在前面已经了解到DIRS 文件,这个
文件记录的是一个目录下参加编译的子目录。而source 文件就是记录该目录下参加编译的源文件。
打开eboot 下的source , 发现SOURCES= startup.s util.s main.c debug.c ether.c flash.c bitmap.c nand.c
这些就是参加编译的源文件。根据名称就能够看出来startup.s 就是开机最初调用的开始的ARM汇编。
和大多数ARM 程序文件一样,这个文件完成基本的硬件初始化后,将通过一条跳转指令跳到main函数
中。main 函数中主要调用BootloaderMain 函数。这个函数又会调用OEMDebugInit ,OEMPlatformInit
OEMPreDownload 和OEMLauch函数。EBoot 的移植工作大致就是对这些函数实现吧。一个有趣的现象需要
移植的函数的开头都有OEM ,明白了吧需要OEM 实现的啊!

startup.s 是代码的开始,这段是用ARM 汇编编写的。哎,这段是比较头大的,毕竟ARM 汇编不熟悉啊
不过没办法,躲是躲不掉的。startup.s 的主要功能有哪些啦,大家都知道是初始化基本的硬件。但具体由
哪些啦。
让我们先看下mobile 的示例代码吧,找到LEAF_ENTRY 这个宏定义,这个是程序的开始,但是通常的ARM
的开始是ENTRY。 LEAF_ENTRY 是通过网上的提示在MSDN中查到的,This macro declares the beginning of
a routine that does not require any prolog code。 Remarks: A LEAF_ENTRY must have an associated
ENTRY_END.总之这就是开始,上来第一条语句就是条ARM 跳转指令 b ResetHandler.这表示跳转到 ResetH
andler 处去执行。
ARM 的跳转指令有4条。B BL BLX BX,其中 B 就是简单的跳转,BL 是在跳转的同时将 当前PC的值保存到
R14 寄存器中。BX 的作用是跳转的同时做状态切换,就是在Thumb 和ARM状态切换。BLX 是在跳转的的同时将
当前PC内容保存到R14 中,并进行状态转换,将工作状态由ARM切换到Thumb状态。
下面一段语句是 ; Make sure that TLB & cache are consistent
mov r0, #0
mcr p15, 0, r0, c8, c7, 0 ; flush both TLB
mcr p15, 0, r0, c7, c5, 0 ; invalidate instruction cache
mcr p15, 0, r0, c7, c6, 0 ; invalidate data cache
根据注释了解到这段代码的意思是保持TLB 和cache 数据的一致。 什么是TLB 啦?TLB:Translation lookaside
buffer 及旁路转化缓存或者说是页表缓存吧。再来分析下指令mov 这个是ARM 的 一条转移指令,表示叫立即数0
放到r0 寄存器中。mcr 也是arm 的一条转移指令。它的基本格式是mcr 协处理器编码 协处理操作码1源寄存器
目的寄存器1 目的寄存器2 协处理器操作码2 。表示将源寄存器的值放到协处理器的目的寄存器中。而两个操作码
就是要协处理器进行的操作。 mcr p15, 0, r0, c8, c7, 0就是把r0 的值放到P15 的C8 和C7 寄存器中,并
要求P15 作 0 0 两个操作码的操作。

楼主学学可以,但不要太认真了,现在智能手机市场不好。

接下来的语句就是
ldr r0, = GPFCON
ldr r1, = 0x55aa
str r1, [r0]
ldr 是 ARM 中的地址转移指令。它的作用是数据从内存某个地址的数据读到寄存器中。
如ldr r0, 0x12345678表示将地址为0x12345678 的内存的值放到r0 寄存器中。另外
ldr 也可以将立即数放到寄存器中,如ldr r0,=1 表示将1 放到r0 寄存其中。ldr 和
mov 的功能相似。和mov 的区别就是mov 只能在寄存器或者立即数之间操作,不能对内
存进行操作。str 在ARM 指令中,是ldr 的逆操作,表示将寄存器的值放到指定的内存
地址空间。str r1,[r0] 就是将r0 寄存器中的值作为内存的地址,将r1 的值放到 r0
寄存器保存值的地址上,呵呵间接寻址啦,话说得够啰嗦吧!上面三景的意思 就是将
GPFCON 地址上的值赋为0x55aa.GPFCON 定义在s3c2410.inc 中,是2410 的GPIOF的控制
寄存器。
下面这些语句如下,主要禁止了watch dog 配置了中断,以及clock ,ARM 语法和前
面是一样的
ldr r0, = WTCON ; disable watch dog
ldr r1, = 0x0
str r1, [r0]
ldr r0, = INTMSK
ldr r1, = 0xffffffff ; disable all interrupts
str r1, [r0]
ldr r0, = INTSUBMSK
ldr r1, = 0x7ff ; disable all sub interrupt
str r1, [r0]
ldr r0, = INTMOD
mov r1, #0x0 ; set all interrupt as IRQ
str r1, [r0]
ldr r0, = CLKDIVN
ldr r1, = 0x3 ; 0x0 = 1:1:1,0x1 = 1:1:2
; 0x2 = 1:2:2,0x3 = 1:2:4,
; 0x8 = 1:4:4
str r1, [r0]

支持楼主,我也是做wm手机开发的
不同意十楼的说法,智能手机市场不好只是暂时的,随着3g的展开以及手机电视国标的确定,三网合一的趋势已经势不可挡,而智能手机将是三网合并后的最佳终端。
楼主加油!顶!顶!顶!

上一篇:铅酸蓄电池充放电
下一篇:MTK6225闪屏问题

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

易迪拓培训课程列表详情>>

我们是来自于研发一线的资深工程师,专注并致力于射频、微波和天线设计工程师的培养。

  网站地图