论文部分内容阅读
[摘 要] Android是一个专为移动设备设计的软件综合平台,凭借良好的可移植性、应用程序的硬件平台无关性及其开放性,迅速成为主流的手机平台之一。本文重点研究了基于Linux平台的开源操作系统Android移植到ARM11的过程。
[关键词] Android 移植 ARM11
1、引言
目前,随着移动通信技术的发展,移动终端正在向多媒体化和网络化的方向发展,手机操作系统已经成为嵌入式系统发展的一个重要方向。Google与开放手机联盟联合开发的一个专为移动设备设计的软件开放平台—Android。其凭借很强的开放性、可移植性和丰富的应用程序极大的满足了用户的需要以及技术的发展。本课题以ARM11系列的S3C6400开发板为系统移植目标平台,重点分析了Android的Linux内核的移植过程。
2、Android操作系统简介
Android 是Google于2007 年11月宣布的基于Linux平台开源手机操作系统名称,号称是首个为移动终端打造的真正开放和完整的移动软件。Google 重新设计Java虚拟机和系统,使得Android的Java应用更接近于底层系统效率更高;另外使用虚拟机技术使得 Android的应用在被监控的情况下运行,安全性更高。Android是一个对第三方软件完全开放的平台。其平台采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。操作系统的体系结构从上到下分为5个部分,分别是:应用程序、应用程序框架、程序库、Android运行环境、Linux核心层。Linux内核层用来提供系统的底层服务,位于硬件和其它软件层之间,采用 YAFFS2文件系统。Android运行库包含一组核心库和Dalvik虚拟机,Android提供丰富的数据库支持且大部分为开源代码,如采用嵌入式数据库SQLite。应用框架层为Android 开发人员提供了访问框架应用程序接口的全部权限,采用结构化设计简化了组件之间的重用。在应用程序层,Android本身附带了一些核心的应用程序,大大简化了Android应用程序的开发。
3、基于ARM11的Android的操作系统的移植
本课题采用ARM11系列的S3C6400为移植目标,主要过程:安装Linux环境 安装编译工具 下载Linux kernel 安装Android SDK 获得root file system 修改Linux kernel源码 配置Linux kernel 修改root file system 编译Linux kernel 下载kernel Image
1.安装 Linux环境
安装Ubuntu Linux系统,从网站上下载操作系统安装光盘映像,地址: http://mirror.lupaworld.com/ubuntu/releases/8.04/,下载ubuntu-8.04.2-desktop-i386.iso, 刻录成光盘安装, 安装可以在windows系统下进行,选取有15G 空间的硬盘安装,输入用户密码开始安装。这一步结束退出光盘重启进入Ubuntu系统,完成余下系统安装。
Linux安装完成,进入Ubuntu系统,确保电脑连接Internet,安装一些必要软件。
打开终端输入命令框,进行下面的操作: $ sudo apt-get install ssh
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-devbuild-essential zip curl $ sudo apt-get install valgrind $ sudo apt-get install sun-java6-jdk $ sudo apt-get install libncurses5-dev
所有软件系统会自动从网络下载安装,完成后可以开始Android的移植。
2.安装编译工具
下载: $ wget
http://www.codesourcery.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
安装:$ tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3.下载 Linux kernel
从下面地址获得:
http://code.google.com/p/android/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+Size+DownloadCount Kernel : linux-2.6.23-android-m5-rc14.tar.gz
解压文件:$ tar -xf linux-2.6.23-android-m5-rc14.tar.gz
4.安装 Android SDK
从网上下载linux版本的 Android SDK,如下:
http://dl.google.com/android/android-sdk_m5-rc15_linux-x86.zip
下载后解压,获得android-sdk_m5-rc15_linux-x86 文件
5.获得 root file system
⑴下载busybox工具从下面地址
http://benno.id.au/blog/2007/11/14/android-busybox(linux环境中下载)
⑵运行emulator 获取root file system
$ cd <目錄>/ android-sdk_m5-rc15_linux-x86/tools
$ ./emulator& 等待emulator启动,看到出现Android系统画面,进入菜单ALL/Dev Tools/Development Settings下,将Wait for debugger,Show running processes,Show screen updates这三项打勾,回到命令输入终端。通过busybox工具获得了emulator 的文件并打包,再建立root文件目录,最后Android root文件系统的initial_ram_disk就做好了。
6.修改 Linux kernel 源码
下载的kernel文件是不支持smdk6400开发板的,必须加入smdk6400的配置文件到kernel中,同时修改Kconfig和Makefile文件。
修改如下:
1>选择 /arch/arm/mach-s3c2410/Makefile.boot 改为下面内容,
zreladdr-$(CONFIG_PLAT_S3C24XX) := 0x30008000
params_phys-$(CONFIG_PLAT_S3C24XX) := 0x30000100
zreladdr-$(CONFIG_PLAT_S3C64XX) := 0x50008000
params_phys-$(CONFIG_PLAT_S3C64XX) := 0x50000100
2>从成熟的smdk6400平台文件中拷贝下面文件到kernel目录
/arch/arm/mach-s3c6400 /drivers/serial/s3c6400.c /drivers/input/touchscreen/s3c-ts.c
/drivers/usb/gadget
3>拷贝/drivers/android/ashmem.c 文件到相应目录下从另外的android kernel (The Android source code for 2.6.23 不包含此文件)
4>修改相应的Kconfig和Makefile文件,使最终能编译到加载的smdk6400文件。
7.配置Linux kernel
修改kernel后进行配置,用到第2步的编译工具 $ cd
$ make CROSS_COMPILE=/bin/arm-none-linux-gnueabi- ARCH=armmenuconfig
这时进入kernel配置画面,注意配置 Initramfs source file选项指定到 initial_ram_disk文件。
8.修改 root file system
配置Touchscreen使之能正常工作,initial_ram_disk文件下修改/etc/init.rc,加入下面内容
TSLIB_CONSOLEDEVICE none TSLIB_FBDEVICE /dev/graphics/fb0
TSLIB_TSDEVICE /dev/input/ts0 TSLIB_CALIBFILE /etc/pointercal
TSLIB_CONFFILE /etc/ts.conf TSLIB_PLUGINDIR /lib/ts
9. 编译 Linux kernel
$ make CROSS_COMPILE=/bin/arm-none-linux-gnueabi- ARCH=armzImage 編译成功,在arch/arm/boot下面是生成的zImage文件。
10.下载 kernel image
进入Windows系统,下载过程在Windows系统中完成。
①打开:程序\附件\通讯\超级终端,配置COM口,115200,8N1
②连接smdk6400开发板和电脑通过串口线,打开开发板电源,可以在超级终端中看到输出信息,bootloader启动,按空格键进入命令输入状态。
③板子上连接USB线到电脑,安装USB驱动程序
④运行dnw.exe程序,配置Configuration/Options,地址 0x57e00000,确定
⑤在超级终端中输入相应命令,开始下载
$ run bootup (下载bootloader) $ run kernelup (下载kernel Image)
$ run rootup (下载root file system)
⑥ 这里我们输入 $ run kernelup
等待dnw发送文件,dnw 显示[COM1,115200bps][USB:OK][ADDR:0x57e00000]说明连接成功,选择USB Port>Transmit,选取编译成功的zImage文件,开始下载。下载完成,重启开发板,等待,LCD上出现一些Android字符,一段时间白屏,出现一个左右滚动的红色滚动条,进入主界面,Android移植成功。
4、结束语
本文在简单介绍Android操作系统的基础上,详细分析了Android移植到S3C6400开发板的步骤。作为一个开源的、可移植性良好的操作系统,Android的发展会越来越好。
参考文献
[1]叶炳发. Android操作系统移植及关键技术研究. [硕士学位论文]. 暨南大学,2010.
[2]郭秋平. 基于ARM系统的Linux平台移植研究. [硕士学位论文]. 杭州:浙江大学,2006.
[3]郭宏志. Android应用开发详解[M]. 电子工业出版社, 2010.6.
[4]姚星星,刘卫国. Android的架构与应用开发研究[D]. 长沙:中南大学,2008.
[5]S3C6400/6410移植Android内核 ANDROID开发网, HTTP://ANDROIDOK.COM.
[关键词] Android 移植 ARM11
1、引言
目前,随着移动通信技术的发展,移动终端正在向多媒体化和网络化的方向发展,手机操作系统已经成为嵌入式系统发展的一个重要方向。Google与开放手机联盟联合开发的一个专为移动设备设计的软件开放平台—Android。其凭借很强的开放性、可移植性和丰富的应用程序极大的满足了用户的需要以及技术的发展。本课题以ARM11系列的S3C6400开发板为系统移植目标平台,重点分析了Android的Linux内核的移植过程。
2、Android操作系统简介
Android 是Google于2007 年11月宣布的基于Linux平台开源手机操作系统名称,号称是首个为移动终端打造的真正开放和完整的移动软件。Google 重新设计Java虚拟机和系统,使得Android的Java应用更接近于底层系统效率更高;另外使用虚拟机技术使得 Android的应用在被监控的情况下运行,安全性更高。Android是一个对第三方软件完全开放的平台。其平台采用了整合的策略思想,包括底层Linux操作系统、中间层的中间件和上层的Java应用程序。操作系统的体系结构从上到下分为5个部分,分别是:应用程序、应用程序框架、程序库、Android运行环境、Linux核心层。Linux内核层用来提供系统的底层服务,位于硬件和其它软件层之间,采用 YAFFS2文件系统。Android运行库包含一组核心库和Dalvik虚拟机,Android提供丰富的数据库支持且大部分为开源代码,如采用嵌入式数据库SQLite。应用框架层为Android 开发人员提供了访问框架应用程序接口的全部权限,采用结构化设计简化了组件之间的重用。在应用程序层,Android本身附带了一些核心的应用程序,大大简化了Android应用程序的开发。
3、基于ARM11的Android的操作系统的移植
本课题采用ARM11系列的S3C6400为移植目标,主要过程:安装Linux环境 安装编译工具 下载Linux kernel 安装Android SDK 获得root file system 修改Linux kernel源码 配置Linux kernel 修改root file system 编译Linux kernel 下载kernel Image
1.安装 Linux环境
安装Ubuntu Linux系统,从网站上下载操作系统安装光盘映像,地址: http://mirror.lupaworld.com/ubuntu/releases/8.04/,下载ubuntu-8.04.2-desktop-i386.iso, 刻录成光盘安装, 安装可以在windows系统下进行,选取有15G 空间的硬盘安装,输入用户密码开始安装。这一步结束退出光盘重启进入Ubuntu系统,完成余下系统安装。
Linux安装完成,进入Ubuntu系统,确保电脑连接Internet,安装一些必要软件。
打开终端输入命令框,进行下面的操作: $ sudo apt-get install ssh
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-devbuild-essential zip curl $ sudo apt-get install valgrind $ sudo apt-get install sun-java6-jdk $ sudo apt-get install libncurses5-dev
所有软件系统会自动从网络下载安装,完成后可以开始Android的移植。
2.安装编译工具
下载: $ wget
http://www.codesourcery.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
安装:$ tar -xjvf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3.下载 Linux kernel
从下面地址获得:
http://code.google.com/p/android/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+Size+DownloadCount Kernel : linux-2.6.23-android-m5-rc14.tar.gz
解压文件:$ tar -xf linux-2.6.23-android-m5-rc14.tar.gz
4.安装 Android SDK
从网上下载linux版本的 Android SDK,如下:
http://dl.google.com/android/android-sdk_m5-rc15_linux-x86.zip
下载后解压,获得android-sdk_m5-rc15_linux-x86 文件
5.获得 root file system
⑴下载busybox工具从下面地址
http://benno.id.au/blog/2007/11/14/android-busybox(linux环境中下载)
⑵运行emulator 获取root file system
$ cd <目錄>/ android-sdk_m5-rc15_linux-x86/tools
$ ./emulator& 等待emulator启动,看到出现Android系统画面,进入菜单ALL/Dev Tools/Development Settings下,将Wait for debugger,Show running processes,Show screen updates这三项打勾,回到命令输入终端。通过busybox工具获得了emulator 的文件并打包,再建立root文件目录,最后Android root文件系统的initial_ram_disk就做好了。
6.修改 Linux kernel 源码
下载的kernel文件是不支持smdk6400开发板的,必须加入smdk6400的配置文件到kernel中,同时修改Kconfig和Makefile文件。
修改如下:
1>选择 /arch/arm/mach-s3c2410/Makefile.boot 改为下面内容,
zreladdr-$(CONFIG_PLAT_S3C24XX) := 0x30008000
params_phys-$(CONFIG_PLAT_S3C24XX) := 0x30000100
zreladdr-$(CONFIG_PLAT_S3C64XX) := 0x50008000
params_phys-$(CONFIG_PLAT_S3C64XX) := 0x50000100
2>从成熟的smdk6400平台文件中拷贝下面文件到kernel目录
/arch/arm/mach-s3c6400 /drivers/serial/s3c6400.c /drivers/input/touchscreen/s3c-ts.c
/drivers/usb/gadget
3>拷贝/drivers/android/ashmem.c 文件到相应目录下从另外的android kernel (The Android source code for 2.6.23 不包含此文件)
4>修改相应的Kconfig和Makefile文件,使最终能编译到加载的smdk6400文件。
7.配置Linux kernel
修改kernel后进行配置,用到第2步的编译工具 $ cd
$ make CROSS_COMPILE=
这时进入kernel配置画面,注意配置 Initramfs source file选项指定到 initial_ram_disk文件。
8.修改 root file system
配置Touchscreen使之能正常工作,initial_ram_disk文件下修改/etc/init.rc,加入下面内容
TSLIB_CONSOLEDEVICE none TSLIB_FBDEVICE /dev/graphics/fb0
TSLIB_TSDEVICE /dev/input/ts0 TSLIB_CALIBFILE /etc/pointercal
TSLIB_CONFFILE /etc/ts.conf TSLIB_PLUGINDIR /lib/ts
9. 编译 Linux kernel
$ make CROSS_COMPILE=
10.下载 kernel image
进入Windows系统,下载过程在Windows系统中完成。
①打开:程序\附件\通讯\超级终端,配置COM口,115200,8N1
②连接smdk6400开发板和电脑通过串口线,打开开发板电源,可以在超级终端中看到输出信息,bootloader启动,按空格键进入命令输入状态。
③板子上连接USB线到电脑,安装USB驱动程序
④运行dnw.exe程序,配置Configuration/Options,地址 0x57e00000,确定
⑤在超级终端中输入相应命令,开始下载
$ run bootup (下载bootloader) $ run kernelup (下载kernel Image)
$ run rootup (下载root file system)
⑥ 这里我们输入 $ run kernelup
等待dnw发送文件,dnw 显示[COM1,115200bps][USB:OK][ADDR:0x57e00000]说明连接成功,选择USB Port>Transmit,选取编译成功的zImage文件,开始下载。下载完成,重启开发板,等待,LCD上出现一些Android字符,一段时间白屏,出现一个左右滚动的红色滚动条,进入主界面,Android移植成功。
4、结束语
本文在简单介绍Android操作系统的基础上,详细分析了Android移植到S3C6400开发板的步骤。作为一个开源的、可移植性良好的操作系统,Android的发展会越来越好。
参考文献
[1]叶炳发. Android操作系统移植及关键技术研究. [硕士学位论文]. 暨南大学,2010.
[2]郭秋平. 基于ARM系统的Linux平台移植研究. [硕士学位论文]. 杭州:浙江大学,2006.
[3]郭宏志. Android应用开发详解[M]. 电子工业出版社, 2010.6.
[4]姚星星,刘卫国. Android的架构与应用开发研究[D]. 长沙:中南大学,2008.
[5]S3C6400/6410移植Android内核 ANDROID开发网, HTTP://ANDROIDOK.COM.