将Android移植到FS2410开发板上

Android 移植到FS2410 开发板上

                              转载请注明源自 嵌入式学习网 - 王安

                         http://embstudy.org/home/space.php?uid=5&do=blog&id=46

一、目前进展

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 分钟。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值