S3C2440的开发板能移植android系统吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S3C2440的开发板能移植android系统吗相关的知识,希望对你有一定的参考价值。

  (一)成为android高手必须掌握的8项基本要求

  【1】 Android操作系统概述

  1. Android系统架构。

  2. Android利用设计理念。

  3. Android 开源知识。

  4. Android 参考网站与权威信息。

  【2】 Android SDK及其开发环境搭建

  1. Android SDK的版本发布。

  2. ADT插件的安装和更新。

  3. Android利用程序架构。

  4. 建立第一个Android项目(HelloAndroid!)。

  5. 通过Eclipse导入一个开源项目

  6. 可视化的界面开发工具

  7. 布置利用程序到Android模仿器或手机

  【3】Android源代码开发环境搭建与源码结构分析

  1.开发系统主机环境搭建。

  2. 安装软件包Required Packages。

  3.Ubuntu 6.06 (Dapper)。

  4. Ubuntu 8.04。

  5. Ubuntu 7.10。

  6.Install javva。

  7.源码结构分析Android source (kernel / platform/application)。

  8. Android build system。

  9. Android bring up。

  【4】 Android 利用程序设计模型

  1. drawable。

  2. layout 。

  3. values(strings.xml、colors.xml、style.xml 、arrays.xml等)。

  4. R.java分析及应用 。

  5. AndroidManifest.xml。

  6. Android.mk。

  7. Activity 。

  8. Intent。

  9. Service 。

  10.ContentProvider。

  【5】 Android 利用程序界面(一)

  1. TextView的应用。

  2. drawable的应用 。

  3. 引用Drawable色彩常数及背风景。

  4. CharSequence数据类型与ResourceID利用。

  5. DisplayMetrics的应用。

  6. Style样式的定义。

  7. Button事件处理。

  8. setContentView的利用。

  9. Intent对象的应用。

  10. Bundle对象的实现。

  11. startActivityForResult法子。

  12. AlertDialog窗口。

  13. Button与TextView的交互。

  14. Typeface对象应用。

  15. Gallery对象。

  16. 多按钮利用。

  17. Menu功效菜单程序设计。

  18. ProgressDialog与线程利用。

  19. 动态产生按钮并最大化。

  20. 选择功效的对话框。

  21. Android主题(Theme)实现。

  22. 支撑多种分手率的屏幕。

  【6】 Android利用程序界面(二)

  1. EditText与setOnKeyListener事件。

  2.ImageButton的焦点及事件处理。

  3. Toast对象的应用。

  4. CheckBox的isChecked属性。

  5. 多选项CheckBox的利用。

  6. RadioGroup组与onCheckedChanged事件。

  7. ImageView的堆栈利用。

  8. Spinner与setDropDownViewResource。

  9. ArrayList与Widget的依附性。

  10. Gallery与衍生BaseAdapter容器。

  11. JavaI/O的利用。

  12.ImageButton选择特效。

  13. AutoCompleteTextView与数组。

  14. AnalogClock与DigitalClock的原理。

  15. DatePicker与TimePicker利用。

  16. ImageView点击事件与透明度处理。

  17. ProgressBar与Handler的整合利用。

  18. GridView与ArrayAdapter设计。

  19. ListView的布局。

  20. ListActivity与Menu整合技术。

  21. JavaI/O与ListActivity的联合。

  22. 应用decodeFile法子。

  23. 运用Matrix对象来缩放图文件。

  24. Bitmap与Matrix旋转ImageView。

  25. RadioButtonID。

  26. 对话窗口上的ICON图标。

  【7】Android 利用交互与手机模块把持

  1. PendingIntent与AlarmManager。

  2. PendingIntent 与 SmsManager 。

  3. Intent 与 Email。

  4. 数据存储法子。

  5. NotificationManager与Notification。

  6. Adapter对象与Cursor。

  7. TelephonyManager的利用。

  8. RunningTaskInfo的利用。

  9. Provider.Contact的应用。

  10.Provider.Calendar的应用。

  11. Service与Runnable整合并用。

  12.BroadcastReceiver与Intent 。

  13. receiver与intent-filter。

  14. Android网络编程。

  15. HTTP恳求与连接。

  16. WebView.loadUrl。

  17. Webkit 与 WebCore。

  18. HttpURLConnection与URLConnection和运行线程。

  19. Runnable混搭SurfaceView。

  20. Google ApI。

  【8】 Android 系统服务

  1. Activity Manager。

  2. Windows Manager。

  3. Surface Manager(surface flinger)。

  4. Package Manager。

  5. Telephony Manager。

  6. Content Provider。

  7.Resource Manager。

  8. AssetManager。

  9. View System。

  10.Location Manager。

  11. Notification Manager。

  12.AlarmManager。

  13. BatteryManager。

  14. HardwareManage。

  15. 如何添加一个新系统Service并开放API。

  16. 要害服务。

  17. Android系统启动流程。

  (二)成为Android高手必须掌握的20项进阶要求

  ARM平台 Android 移植与驱动核心开发

  Android嵌入式智能操作系统是基于Linux内核和驱动的,对于HTC、华为等公司开发Android操作系统时,需要专门将Android移植到特定硬件平台下,同时将必要的驱动进行编写及开发。本课程旨在让学员成为Android的核心层开发者,让学员在这种嵌入式设备厂商中谋得核心开发人员的职位。

  1. 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内核的构建

  2. AndroidLinux内核移植与核心开发

  2.1ARM处理器的Android系统构建。

  2.2输入输出设备驱动移植。

  2.3存储设备nand flash,MMC/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等)。

  3. Android相关环境库、以及Bionic系统移植

  3.1libc移植。

  3.2libm移植。

  3.3libdl移植。

  3.4libm移植。

  3.5 busybox, toolbox移植。

  【案例】

  1.移植glibc。

  2.移植busybox和toolbox。

  4. Android Dalvik移植一

  4.1 JNI Call Bridge相关原理 。

  4.2 dx, dalvitvm原理和应用。

  4.3 Dalvik指令款式。

  4.4 Dalvik履行款式dex 。

  4.5 Java字节码款式。

  5. Android Dalvik移植二

  5.1 Dalvik Library原理 。

  5.2 dalvit libcore核心库移植。

  5.3 dalvit/vm/native移植。

  5.4 Dalvik Interpreter原理 。

  5.5 Dalvik Mterp。

  6. ARMAT&T汇编

  6.1AT&T汇编语法详解。

  6.2gas工具的应用。

  6.3label标签的作用。

  6.4数据与代码的散播。

  7. 链接脚本ld-script

  7.1 段地址的断定。

  7.2 编写ld-script。

  7.3 ELF款式与libc函数库的关系。

  8. 时序电路根基

  8.1电平信号。

  8.2 电路图分析。

  8.3时序图分析。

  8.4datasheet查看。

  8.5s3c2440的外围器件结构。

  8.6GPIO操作。

  9. 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系统调用的实现。

  10. Nand Flash把持器

  10.1 Flash原理。

  10.2 Nand把持器原理及时序分板。

  10.3k9f1208时序分析。

  11. 内存把持器

  11.1 s3c2440物理地址散播 。

  11.2 SDRAM原理与时序。

  11.3 内存把持器的物理连接。

  11.4 地址对齐。

  11.5 SRAM造访。

  12. 内存管理单元

  12.1 MMU的原理。

  12.2ARM协处理器指令。

  12.3 section模式。

  12.4 small page模式 。

  12.5 I & D TLBs 。

  12.6 I & DCache。

  12.7 哈佛结构的原理与实现。

  13. DMA 直接内存造访的机制与应用

  13.1 DMA的状态机 。

  13.2 DMA的把持。

  14. 触摸屏接口与ADC接口 与实例

  14.1 ADC原理。

  14.1 触摸屏接口与把持。

  15. LCD把持器

  15.1 图形显示原理。

  15.2 LCD把持器。

  15.3 LCD时序。

  15.4 LCD驱动相关的框架与体系 。

  16. I2S音频总线

  16.1音频硬件原理。

  16.2 I2S时序。

  16.3 s3c2440上I2S的操作。

  16.4音频设备的裸驱动讨论。

  17. CS8900网卡把持

  17.1 逻辑链路层与MAC层。

  17.2 CS8900原理与时序分析。

  17.3后续网卡裸驱动讨论与体系结构。

  18. TCP/IP协议栈移植,与网络体系结构

  18.1 LwIP TCP/IP协议栈简介 。

  18.2 LwIP配置与编译。

  18.3 tftp配置与编译。

  19. 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制作启动镜像文件。

  20. ARM-Linux原理与移植

  20.1ARM-Linux的配置、编译。

  20.2ARM-Linux启动代码分析。

  20.3ARM-Linux 地址映射的关系。

  20.4 Busybox的配置、编译 。
参考技术A 可以,首先移植linux内核,然后移植android
移植linux时注意使用android支持的内核
linux默认支持2440,所以第一步应该不是很难
不过我也没试过,纯属YY
参考技术B 能,好多年前的友善之臂2440就可以呀! 参考技术C s3c2440跑不了安卓系统。
6410的可以。
参考技术D 你好:
据我所知,s3c2440貌似跑不了安卓系统。
6410的可以。本回答被提问者和网友采纳

Android系统移植:驱动篇

 

 

【导语】在Android系统移植中,有很重要的一个部分工作,就是为新平台上的硬件设备移植驱动程序。因为Android系统是基于Linux kernel内核构建,所以这里说的移植驱动程序,其实就是基于Android系统平台开发适应移动设备的Linux内核驱动程序。

 

 

一. Android系统中Linux内核与设备驱动

Android系统中使用了Linux内核作为自己的操作系统,除了linux的通用代码之外,主要还包含三个方面的东西:

  • 体系结构和处理器 
    体系结构处理器和标准的设备驱动程序这两个方面是和硬件相关的,但是对于同一种硬件,在Android系统和标准的Linux系统中基本上是一样的。

  • Android专用的驱动程序 
    Android的专用驱动程序,通常是和硬件无关的驱动程序,仅仅在Android系统中使用。

  • 标准的linux设备驱动程序

Android系统中Linux内核与设备驱动的结构如下图示:

 

 

Android系统通常用于移动设备和其他的嵌入式设备,因此都基于ARM体系结构,在ARM体系结构具有多种处理器。因此,对于不同对的处理器,基于相同的外围设备,驱动程序也可能不一样。

需要说明的是上图中的Goldfish:

Android模拟器通过运行一个Goldfish的虚拟CPU ,Goldfish用来运行arm926t指令集(arm926t属于armv5构架),并且仿真了输入/输出,比如键盘输入和LCD 输出。这个模拟器其实是在qemu之上开发的,输入/输出是基于libSDL的。既然Goldfish是被模拟器运行的虚拟CPU,那么当Android在真实的硬件设备上运行时,我们就需要去掉它。

二. Android系统上的设备驱动

  • 基本图形用户界面(GUI)部分:包括显示部分、用户输入部分和硬件相关的加速部分,还包括媒体编解码和OpenGL等。
  • 音视频输入输出部分:包括音频、视频输出和摄像头等。
  • 连接部分:包括无线局域网、蓝牙、GPS等。
  • 电话部分:包括通话、GSM等。
  • 附属部件:包括传感器、背光、振动器等。

具体来说是有以下:

  • [x] Display显示部分:包括FrameBuffer驱动和Gralloc模块。
  • [x] Input用户输入部分:包括Event驱动和EventHub。
  • [x] Codec多媒体编解码:包括硬件Codec驱动和Codec插件,例如OpenMax。
  • [x] 3DAccelerator(3D加速器)部分:包括硬件OpenGL驱动和OpenGL插件。
  • [x] Audio音频部分:包括Audio驱动和Audio硬件抽象层。
  • [x] VideoOut视频输出部分:包括视频显示驱动和Overlay硬件抽象层。
  • [x] Camera摄像头部分:包括Camera驱动(通常是v4l2)和Camera硬件抽象层。
  • [x] Phone电话部分:包括Modem驱动程序和RIL库。
  • [x] GPS全球定位系统部分:包括GPS驱动(例如串口)和GPS硬件抽象层。
  • [x] Wi-Fi无线局域网部分:包括Wlan驱动和协议和Wi-Fi的适配层。
  • [x] BlueTooth蓝牙部分:包括BT驱动和协议及BT的适配层。
  • [x] Sensor传感器部分:包括Sensor驱动和Sensor硬件抽象层。
  • [x] Vibrator振动器部分:包括Vibrator驱动和Vibrator硬件抽象层。
  • [x] Light背光部分:包括Light驱动和Light硬件抽象层。
  • [x] Alarm警告器部分:包括Alarm驱动和RTC系统和用户空间调用。
  • [x] Battery电池部分:包括电池部分驱动和电池的硬件抽象层。

在实际应用中,通过下面的图,感受下一个量产的平板中用到了哪些硬件,体会下其中涉及到的驱动: 

 

 

三.Android系统专用驱动

看一下Google为基于Linux kernel而定制的Android系统专用驱动程序:

(1)Android Binder

Android Binder是基于OpenBinder框架的一个驱动,用于Android平台的进程间通信(InterProcess 
Communication,IPC)。原来的Linux系统上层应用的进程间通信主要是D-bus(Desktop bus),采用消息总线的方式来进行IPC。 
源代码位于drivers/staging/android/binder.c。

(2)Android电源管理

Android电源管理是基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做 
了很多优化。利用锁和定时器来切换系统状态,控制设备在不同状态下的功耗,已达到节能的目的。 
源代码位于: 
- [ ] kernel/power/earlysuspend.c 
- [ ] kernel/power/consoleearlysuspend.c 
- [ ] kernel/power/fbearlysuspend.c 
- [ ] kernel/power/wakelock.c 
- [ ] kernel/power/userwakelock.c

Android5.0版本引用JobSchedule调度程序,以便增加设备续航时间。

(3)低内存管理器(Low Memory Killer)

比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要 
杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

(4)匿名共享内存(Ashmem)

为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于 
mm/ashmem.c。

(5)Android PMEM(Physical)

PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物 
理内存上。 
源代码位于drivers/misc/pmem.c。

(6)Android Logger

一个轻量级的日志设备,用于抓取Android系统的各种日志,是Linux所没有的。 
源代码位于drivers/staging/android/logger.c。

(7)Android Alarm

提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会 
运行的时钟基准。源代码位于drivers/rtc/alarm.c。

(8)USB Gadget驱动

一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架的。 
源代码位于 
- [ ] drivers/usb/gadget/android.c 
- [ ] drivers/usb/gadget/f_adb.c 
- [ ] drivers/usb/gadget/f_mass_storage.c

(9)Android Ram Console

为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备 
里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

(10)Android timed device

提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于 
drivers/staging/android /timed_output.c(timed_gpio.c)。

(11)Yaffs2 文件系统

Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。 
Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比, 
Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表 
现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。

四.Android驱动开发主要工作

Linux系统将设备驱动分为以下三类:

  • (1)字符设备

    指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。

  • (2)块设备

    指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。

  • (3)网络设备

    为支持通过文件接口处理网络连接,Linux使用了源于BSD的套接字抽象,套接字keil看作应用程序、文件接口、内核的网络之间的代理。

驱动程序是介于系统和硬件之间的桥梁,实现硬件和系统之间的交互是我们底层开发的主要任务。在Android系统中,我们一般需要编写内核级和用户级的程序来完成具体的任务。

4.1 实现系统和硬件之间交互的几种方式

  • (1).编写自己的系统调用 
    系统调用是用户级程序访问内核最基本的方法,Linux提供了很多标准的系统调用(参见内核代码树中的include/asm-i386/unistd.h和arch/i386/kernel/entry.S文件),并且允许我们添加自己的系统调用来实现和内核的信息交换;

  • (2).编写驱动程序 
    Linux有一个重要的理念就是“一切皆文件”(everything is a file)。

    用户空间的应用程序通过系统提供的统一交互接口 open() —— read() —— write() —— ioctl() —— close()方法,访问文件系统中/dev/目录下的一个文件来访问运行于内核空间的驱动程序,并通过驱动程序中实现的功能达到对硬件的访问。

  • (3). 使用proc 文件系统

    proc是Linux提供的一种特殊的文件系统,推出它的目的就是提供一种便捷的用户和内核间的交互方式。proc 文件系统相对是比较简单的,不过proc文件的读写并不统一,读数据的buf指针直接指向的就是用户态的地址,可以用sprintf进行写入;而写方法却是内核态的地址,需要用get_user或者 copy_from_user之类的方法。

  • (4).使用虚拟文件系统

    有些内核开发者认为利用ioctl()系统调用往往会似的系统调用意义不明确,而且难控制。而将信息放入到proc文件系统中会使信息组织混乱,因此也不赞成过多使用。他们建议实现一种孤立的虚拟文件系统来代替ioctl()和/proc,因为文件系统接口清楚,而且便于用户空间访问,同时利用虚拟文件系统使得利用脚本执行系统管理任务更家方便、有效。

  • (5).使用内存映像

    Linux通过内存映像机制来提供用户程序对内存直接访问的能力。内存映像的意思是把内核中特定部分的内存空间映射到用户级程序的内存空间去。也就是说,用户空间和内核空间共享一块相同的内存。

4.2 内核空间和用户空间的交互

上面讲了系统与硬件交互的几种方式提到了,在具体的交互中,驱动程序驱动具体的硬件模块工作时涉及到一个内核空间和用户空间交互的概念。

 

现代的计算机体系结构中存储管理通常都包含保护机制。提供保护的目的,是要避免系统中的一个任务访问属于另外的或属于操作系统的存储区域。如在IntelX86体系中,就提供了特权级这种保护机制,通过特权级别的区别来限制对存储区域的访问。

基于这种构架,Linux操作系统对自身进行了划分:一部分核心软件独立于普通应用程序,运行在较高的特权级别上,(Linux使用Intel体系的特权级3来运行内核。)它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux将此称为内核空间 。

相对的,其它部分被作为应用程序在用户空间 执行。它们只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,不能直接访问硬件,不能直接访问内核空间,当然还有其他一些具体的使用限制。(Linux使用Intel体系的特权级0来运行用户程序。)

通过下面的图,看一下内核空间与用户空间的交互关系: 

 

 

 

版权声明:本文为博主【limin13215】原创文章,欢迎转载,转载请注明链接地址! https://blog.csdn.net/limin13215/article/details/72676518

 

以上是关于S3C2440的开发板能移植android系统吗的主要内容,如果未能解决你的问题,请参考以下文章

怎样移植u-boot和linux到s3c2440开发板

uboot在s3c2440上的移植

uboot在s3c2440上的移植

uboot在s3c2440上的移植

uboot在s3c2440上的移植

uboot在s3c2440上的移植