ANDROID平台嵌入式开发

  • 时间:
  • 浏览:1051
  • 来源:成都艾邦软件开发

想要做Android嵌入式开发你可以看看下面的内容

参考文档/zkycdy/article/details/8296384

一首先你必须了解ARM平台 Android 移植与驱动核心开发当然也可以是X86和其他的平台不过其他平台的Android智能终端开发并不是很多。
Android嵌入式智能操作系统是基于Linux内核和驱动的对于HTC、华为等公司开发Android操作系统时需要专门将Android移植到 特定硬件平台下同时将必要的驱动进行编写及开发。成为Android的核心层开发者在这种嵌入式设备厂商中谋得核心开发人员。

1. Android系统的开发框架和开发模型

   做Android嵌入式开发这个是必须的基础你必须清楚Android开发的整个框架知道一些必要的开发模型和程序模块这个有助于你快速的理解Android嵌入式开发


2. Android系统体系及移植相关工具
1.1Android操作系统体系结构介绍Android Linux内核移植介绍文件系统,toolbox等移植存储驱动移植。Bootloader相应方案与移植以及Android虚拟器Dalvik移植介绍。
1.2ARM处理器介绍。
ARMv5TJS。
ARM中断处理。
ARM体系结构与ARM处理器的体系结构。
IP核、芯片与开发板。
ARM处理器结构处理器模式。
. 寄放器。
. 流水线结构。
C语言内嵌汇编款式与编程实例。
1.3ARM指令系统。
.算术逻辑指令  .指令对状态寄放器的影响  .对比指令 .分支指令  .移位  .指令位图 .辨认机器指令。
1.4内存造访与内存把持。
.数据总线与地址总线的应用与实例。
.STR/LDR 。
1.5ARM历程调用标准。
.LDM/STM。
.反汇编。
.APCS。
.C语言函数与汇编的互相调用。
应用Android Linux patch进行Linux内核的构建
 3. AndroidLinux内核移植与核心开发
2.1ARM处理器的Android系统构建。
2.2输入输出设备驱动移植 。
2.3存储设备nand flashMMC/SD卡驱动移植。
2.4Framebuffer移植 。
2.5 Touchscreen移植 。
2.6 Open Binder IPC移植。

2.7在ARM处理器上移植Android实验 。
2.8编写Nand flash驱动。
2.9移植Framebuffer驱动。
2.10硬件相关部分键盘、触摸屏、LCD等。
4. Android相关环境库、以及Bionic系统移植
3.1libc移植 。
3.2libm移植 。
3.3libdl移植。
3.4libm移植。
3.5 busybox, toolbox移植。

1.移植glibc。
2.移植busybox和toolbox。
5. Android Dalvik移植一
4.1 JNI Call Bridge相关原理 。
4.2 dx, dalvitvm原理和应用。
4.3 Dalvik指令款式。
4.4 Dalvik履行款式dex 。
4.5 Java字节码款式。
6. Android Dalvik移植二
5.1 Dalvik Library原理 。
5.2 dalvit libcore核心库移植。
5.3 dalvit/vm/native移植。
5.4 Dalvik Interpreter原理 。
5.5 Dalvik Mterp。

7. ARMATT汇编
6.1ATT汇编语法详解 。
6.2gas工具的应用 。
6.3label标签的作用。
6.4数据与代码的散播。
8. 链接脚本ld-script
7.1 段地址的断定。
7.2 编写ld-script。
7.3 ELF款式与libc函数库的关系。
9. 时序电路根基
8.1电平信号 。
8.2 电路图分析。
8.3时序图分析。
8.4datasheet查看 。
8.5s3c2440的外围器件结构。
8.6GPIO操作。
 10. AMBA总线标准
9.1 AMBA总线标准 。
9.2 FCLK/HCLK/PCKL频率分配与设置。
9.3 Watchdog计时操作。
9.4 UART操作 。
9.5 ARM中断体系。
9.6 异常向量表。
9.7 ARM模式切换。
9.8 ARM中断把持器 。
9.9 软中断。
9.10 Linux系统调用的实现。
11. Nand Flash把持器
10.1 Flash原理。
10.2 Nand把持器原理及时序分板。
10.3k9f1208时序分析。
12. 内存把持器
11.1 s3c2440物理地址散播 。
11.2 SDRAM原理与时序。
11.3 内存把持器的物理连接。
11.4 地址对齐 。
11.5 SRAM造访。
13. 内存管理单元
12.1 MMU的原理 。
12.2ARM协处理器指令。
12.3 section模式。
12.4 small page模式 。
12.5 I D TLBs 。
12.6 I DCache。
12.7 哈佛结构的原理与实现。
14. DMA 直接内存造访的机制与应用
13.1 DMA的状态机 。
13.2 DMA的把持。
15. 触摸屏接口与ADC接口 与实例
14.1 ADC原理 。
14.1 触摸屏接口与把持。
16. LCD把持器
15.1 图形显示原理。
15.2 LCD把持器。
15.3 LCD时序。
15.4 LCD驱动相关的框架与体系 。

17. I2S音频总线
16.1音频硬件原理。
16.2 I2S时序。
16.3 s3c2440上I2S的操作。
16.4音频设备的裸驱动讨论。

18. CS8900网卡把持
17.1 逻辑链路层与MAC层。
17.2 CS8900原理与时序分析。
17.3后续网卡裸驱动讨论与体系结构。

19. TCP/IP协议栈移植与网络体系结构
18.1 LwIP TCP/IP协议栈简介 。
18.2 LwIP配置与编译。
18.3 tftp配置与编译。

20. Bootloader原理与移植
19.1u-boot的配置、编译 。
19.2u-boot启动历程分析。
19.3ARM-Linux的启动请求。
19.4 ARM-Linux kernel的ld-sript分析 。
19.5 u-boot到ARM-Linux的跳转代码分析 。
19.6应用mkimage制作启动镜像文件。

21. ARM-Linux原理与移植
20.1ARM-Linux的配置、编译 。
20.2ARM-Linux启动代码分析。
20.3ARM-Linux 地址映射的关系。
20.4 Busybox的配置、编译 。

22.ARM等平台的调试测试技巧

  会熟悉的使用一些测试脚本对自己的驱动进行测试或者对嵌入式硬件作简单的测试这个对于做Android嵌入式开发的开发人员十分的有必要
 
  最后需要说的是学会Android嵌入式开发最好的方法是实践你需要做的是不断的去实践这些知识参与一些开源的Android工程或者是最好可以进入一家做android开发的公司锻炼锻炼这是做好的方法了实践才能出真知没有实习机会或者工作机会的可以自己上网买一块嵌入式开发的开发板自己动手学习学习也是个不错的方法祝大家成功
 
 很好的参考资料/detail/canjianfantasy/5130587

嵌入式Linux主要有这几部分

Bootloader主要用于引导Linux内核到内存中让内核进行自解压并运行

zImage带自解压的Linux内核

Board.dtb每个型号的主板都有对应的设备树(保存对应的设备型号等信息实现驱动和设备分离)

rootfs.imgLinux根文件系统用于支持Linux内核运行的最小文件系统

(其实Android系统也是属于Linux文件系统的一种)

Android系统主要有这几部分

Bootloader主要用于引导Linux内核到内存中让内核进行自解压并运行

zImage经过修改的支持Android的带自解压的Linux内核

ramdisk.img与Linux根文件系统类似Linux内核启动后挂在这个文件系统

system.img这个是Android的文件系统(保存Android程序)Linux内核挂在ramdisk.img后才挂在这个文件系统继续启动Android系统的程序。

user.data用户数据文件相当于数据盘保存Android系统用户的数据信息。

Linux部分的编译

配置Linux内核

make  ARCHarm  CROSS_COMPILEarm-linux-  menuconfig

编译Linux内核

make  ARCHarm  CROSS_COMPILEarm-linux-  zImage

编译驱动模块

make  ARCHarm  CROSS_COMPILEarm-linux-  modules

Android部分的编译

编译完整的Android系统

source  build/envsetup.sh

lunch

make

单独编译Android的ramdisk.img

make ramdisk

单独编译system文件系统

make snod

单独编译Android模块

mmm 模块目录(需要有Android.mk)

Android系统启动流程

Bootloader 将zImage引导到内存后zImage开始进行自解压得到vmlinux然后开始初始化CPU、MMU等硬件初始化Linux运行环境挂在ramdisk.img根文件系统然后运行init进程init读取init.rc脚本文件启动各种系统进程和系统服务(其中包括Zygote服务)

Zygote进程初始化虚拟机并启动sysem_server进程system_server进程作为嫡长子进程会启动各种Android的framework服务实现Android系统的启动服务启动完毕后会通知Zygote进程启动HOME桌面应用程序。