Android移植到FS2410开发板分析

时间:2011-07-04

  一、目前进展

  1.Android已经可以通过NFS在FS2410开发板上运行

  二、目前缺陷

  1.触摸屏没有校准

  2.Android中时钟停止,结束zygote进程,系统重启,时钟更新,但再次停止不动

  3.串口无法与GPRS模块通讯

  三、移植步骤

  一、移植Android内核到FS2410开发板上

  1、linux-2.6.25-android-1.0_r1.tar.gz

  2、将内核解压到用户目录,如/home/wangan/kernel.git

  3、进入kernel.git文件夹,如cd ~/kernel.git/

  4、修改arch/arm/plat-s3c24xx/common-smdk.c文件中的nand flash分区设置,如gedit arch/arm/plat-s3c24xx/common-smdk.c

  修改static struct mtd_partition smdk_default_nand_part[]结构体为:

  static struct mtd_partition smdk_default_nand_part[] = {

  [0] = {

  .name      = "Boot Agent",

  .size = SZ_256K,

  .offset     = 0,

  },

  [1] = {

  .name      = "Linux Kernel",

  .offset = SZ_256K,

  .size = SZ_2M - SZ_256K,

  },

  [2] = {

  .name      = "File System",

  .offset = SZ_2M,

  .size = SZ_32M - SZ_2M,

  },

  [3] = {

  .name      = "Other",

  .offset     = SZ_32M,

  .size = SZ_32M,

  }

  };

  5、在网站上IA32 GNU/Linux TAR。

  6、将文件解压到用户目录,如/home/wangan/arm-2008q3

  7、进入arm-2008q3/bin文件夹,如cd ~/arm-2008q3/bin/

  8、添加当前路径进入环境变量,如export PATH=$PWD:$PATH,或修改~/.bashrc文件并重新登录

  9、进入内核文件夹,如cd ~/kernel.git/

  10、修改Makefile文件,如gedit Makefile

  更改ARCH和CROSS_COMPILE

  #ARCH          ?= $(SUBARCH)

  ARCH            ?= arm

  #CROSS_COMPILE      ?= arm-eabi-

  CROSS_COMPILE       ?= arm-none-eabi-

  11、从华清远见Linux-2.6.8.1内核压缩包中提取。config文件(注意:config前面有个“。”)放入kernel.git文件夹

  12、运行make menuconfig

  (1) 确保System Type  ---> ARM system type ()中的内容为Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443

  (2) 确保System Type  ---> S3C2410 Machines  ---> [*] SMDK2410/A9M2410被勾选

  (3) 取消选择与Goldfish相关的内容

  Device Drivers  ---> Character devices  ---> < > Goldfish TTY Driver

  Device Drivers  ---> Power supply class support  ---> < >   Goldfish battery driver (NEW)

  Device Drivers  ---> Real Time Clock  ---> < >   GOLDFISH (NEW)

  Device Drivers  ---> Graphics support  ---> Support for frame buffer devices  ---> < >   Goldfish Framebuffer

  (4) 选择S3C2410 LCD相关的内容

  S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器可运行在203MHz。

  Device Drivers  ---> Graphics support  ---> Support for frame buffer devices  ---> <*>   S3C2410 LCD framebuffer support

  Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard black and white Linux logo

  Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard 16-color Linux logo

  Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]   Standard 224-color Linux logo

  (5) 选中Android内核必须选项

  Kernel Features  ---> [*] Use the ARM EABI to compile the kernel

  General setup  ---> [*] Use full shmem filesystem

  General setup  ---> [*] Enable Android's Shared Memory Subsystem

  System Type  ---> [*] Support Thumb user binaries

  Device Drivers  ---> Android  ---> [*] Android log driver

  Device Drivers  ---> Android  ---> <*> Binder IPC Driver

  (6) 尽量选中Android内核可选选项

  Device Drivers  ---> Android  ---> [*] RAM buffer console

  Device Drivers  ---> Android  ---> [*] Android timed gpio driver

  Device Drivers  ---> Android  ---> [*] Only allow certain groups to create sockets

  (7) 其余CONFIG选项,如系统支持请一并选择

  CONFIG_ANDROID_POWER =y

  CONFIG_ANDROID_POWER_STAT =y

  CONFIG_ANDROID_POWER_ALARM =y

  (可以在Kconfig文件中查找ANDROID_POWER等字段进行选择,或者直接修改。config文件)

  13、退出并保存。config

  二、移植LCD驱动到Linux-2.6.25内核

  Linux是的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天无数程序员正在为该计划无偿提供帮助。 技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。

  如果 Linux 内核的可移植性和效率还不够好,Linux 还提供了其他一些特性,它们无法划分到上面的分类中。作为一个生产操作系统和开源软件,Linux 是测试新协议及其增强的良好平台。Linux 支持大量网络协议,包括典型的 TCP/IP,以及高速网络的扩展(大于 1 Gigabit Ethernet [GbE] 和 10 GbE)。Linux 也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比 TCP 更的特性(是传输层协议的接替者)。

  Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。   Linux 的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了 KVM 的内核之上运行。除了运行 Linux 的其他实例之外, Microsoft? Windows? 也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令

  1、 进入kernel.git文件夹,如cd ~/kernel.git/

  2、 修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,如gedit arch/arm/mach-s3c2410/mach-smdk2410.c

  (1) 增加头文件#include <asm/arch/fb.h>

  (2) 增加两给结构体

  static struct s3c2410fb_display smdk2410_lcd_cfg __initdata = {

  .lcdcon5 = S3C2410_LCDCON5_FRM565 |

  S3C2410_LCDCON5_INVVLINE |

  S3C2410_LCDCON5_INVVFRAME |

  S3C2410_LCDCON5_PWREN |

  S3C2410_LCDCON5_HWSWP,

  .type = S3C2410_LCDCON1_TFT,

  .width = 320,

  .height = 240,

  .pixclock = 174757,

  .xres = 320,

  .yres = 240,

  .bpp = 16,

  .left_margin = 16,

  .right_margin = 59,

  .hsync_len = 9,

  .upper_margin = 2,

  .lower_margin = 6,

  .vsync_len = 16,

  };

  static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = {

  .displays = &smdk2410_lcd_cfg,

  .num_displays = 1,

  .default_display = 0,

  .gpccon = 0xaa955699,

  .gpccon_mask = 0xffc003cc,

  .gpcup = 0x0000ffff,

  .gpcup_mask = 0xffffffff,

  .gpdcon = 0xaa95aaa1,

  .gpdcon_mask = 0xffc0fff0,

  .gpdup = 0x0000faff,

  .gpdup_mask = 0xffffffff,

  .lpcsel = 0xf82,

  };

  (3) 在smdk2410_init()函数中增加s3c24xx_fb_set_platdata(&smdk2410_fb_info);

  三、移植触摸屏驱动到Linux-2.6.25内核(参见《基于linux-2.26.5内核的FS2410开发板触摸屏驱动移植》)并制作zImage文件,如make

  这里提一下,确保已经勾选Device Drivers  ---> Input device support  ---> <*>   Event interface,本人曾经在这里徘徊,感谢游老师悉心教诲!

  四、制作支持ARMv4的Android根文件系统

  1、从Android的ARMv4版本根文件

  2、在/dev下增加null和console两个设备节点

  mknod -m 660 null c 1 3

  mknod -m 660 console c 5 1

  3、在U-boot中修改启动参数init为/init,完整的命令行如:root=nfs nfsroot=169.254.7.118:/source/rootfs ip=169.254.7.119 console=ttySAC0,115200 init=/init

  4、修改/init.rc文件,去除除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外的所有mount命令



  
上一篇:ARM微处理器ISP升级程序设计与应用
下一篇:源代码开放浏览器设计与实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料