一、目前进展

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

二、目前缺陷

1.触摸屏没有校准

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

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

三、移植步骤

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

1、从http://code.google.com/p/android/downloads/list上下载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、在http://www.codesourcery.com/gnu_toolchains/arm/portal/release644网站上下载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相关的内容

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内核

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、从http://www.rayfile.com/files/d4660882-de04-11dd-af0d-0014221b798a/下载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命令

系统制作完成,现在应该可以看到漂亮的大表了。首次启动需要创建文件,大约17分钟。然后每次启动只需要2分钟。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java211/archive/2009/02/02/3857595.aspx

更多相关文章

  1. 如何将打开res raw目录中的数据库文件?
  2. Android(安卓)Bluetooth HID实现详解
  3. Android(安卓)Studio 开发经验纵览
  4. android manifest 文件Activity配置节中的属性汇总
  5. android使用opensl es进行简单的音频播放
  6. Android默认闹钟-铃声-通知提示音修改
  7. android sdk 编译--如何将源代码加入android.jar,以及make原理 2
  8. 为什么ios比android流畅
  9. Android真机时Failed to install xxx.apk on device '...'(null)

随机推荐

  1. Android(安卓)摇一摇功能实现(类似微信)
  2. Android(安卓)图片加载 —— ImageLoader
  3. 解决 S5pv210 android system.img 烧写失
  4. android 获得一些设备信息的静态函数
  5. Android开发中遇到的bug(1)
  6. Manifest merger failed Suggestion: add
  7. android 读取资源文件的数据
  8. android backlight
  9. Android(安卓)开发调用系统拍照和图片选
  10. Android适配器之-----BaseAdapter(帮助文