最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

android移植到2440

来源:动视网 责编:小OO 时间:2025-10-02 18:48:27
文档

android移植到2440

移植Android到mini2440ByJeef2009年7月17日1移植环境:Target:友善之臂mini2440HOSTOS:Fedora8kernelVersion:Linux-2.6.25编译器:mini2440光盘所提供的编译器2内核移植(一):2.1参考资料感谢一下大侠提供的资料,链接如下.http://blog.chinaunix.net/u2/85263/showart_1729098.htmlhttp://blog.chinaunix.net/u/26691/showart
推荐度:
导读移植Android到mini2440ByJeef2009年7月17日1移植环境:Target:友善之臂mini2440HOSTOS:Fedora8kernelVersion:Linux-2.6.25编译器:mini2440光盘所提供的编译器2内核移植(一):2.1参考资料感谢一下大侠提供的资料,链接如下.http://blog.chinaunix.net/u2/85263/showart_1729098.htmlhttp://blog.chinaunix.net/u/26691/showart
移植Android 到mini2440

By Jeef

2009年7月17日1 移植环境:

Target:友善之臂mini2440

HOST OS:Fedora 8

kernel Version:Linux-2.6.25

编译器:mini2440光盘所提供的编译器

2 内核移植(一):

2.1 参考资料

感谢一下大侠提供的资料,链接如下.

http://blog.chinaunix.net/u2/85263/showart_1729098.html

http://blog.chinaunix.net/u/26691/showart_468007html

http://embstudy.org/home/space.php?uid=5

http://blog.csdn.net/tekkamanitachi

2.2 进展与缺陷:

时间:JUL,17th,2009

进展:

(1)能够显示Android的Home界面,大钟已经显示在屏幕上;

(2)驱动程序方面实现了,触摸屏、LCD,RTC的驱动

缺陷:

(1)触摸屏触摸后监管在控制台上打印坐标,不过Android无任何反应

(2)时钟也静止在那里

2.2 移植准备

在移植之前要对移植的对象有一个大致的了解。如果你从网站上下载一个主线纯净的内核,这个移植主要要实现两个方面的内容,一是Android与主线内核不同的部分,二是与你移植的硬件平台相关的部分。我采用的思路是下载Android发布的内核,然后去了Android 中与G1手机硬件平台相关的部分,留下Android内核对主线内核更改但与硬件平台无关的部分,并添加与mini2440硬件平台相关的部分。

内http://code.google.com/p/android/downloads/list上下载下载Android核:

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

关于Android内核与主线Linux内核不同的地方,夜猫子大侠已经做了分析,分析的比较到位,现在拷贝在这里,标注红色的为与硬件相关的,标注蓝色的是硬件无关的,黑色的部分是笔者目前还不清楚的,有待研究:

(1)基于ARM架构增加Gold-Fish平台,相应增加的目录如下:

kernel/arch/arm/mach-goldfish

kernel/include/asm-arm/arch-goldfish

(2)增加了yaffs2 FLASH文件系统,相应增加的目录为:kernel/fs/yaffs2

实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.

3. 增加了Android的相关Driver,相应目录为:

kernel/drivers/android

主要分为:

Android IPC系统: Binder (binder.c)

Android 日志系统: Logger (logger.c)

Android 电源管理: Power (power.c)

Android 闹钟管理: Alarm (alarm.c)

Android 内存控制台: Ram_console (ram_console.c)

Android 时钟控制的gpio: Timed_gpio (timed_gpio.c)

4. 增加了switch处理, 相应的目录为:

kernel/drivers/switch/

5. 增加了一种新的共享内存处理方式, 相应增加的文件为:

kernel/mm/ashmem.c

6. 其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth, 在此不做详细分析另外GoldFish平台相关的驱动文件如下:

1. 字符输出设备:

kernel/drivers/char/goldfish_tty.c

2. 图象显示设备: (Frame Buffer)

kernel/drivers/video/goldfishfb.c

3. 键盘输入设备:

kernel/drivers/input/keyboard/goldfish_events.c

4. RTC设备: (Real Time Clock)

kernel/drivers/rtc/rtc-goldfish.c

5. USB Device设备:

kernel/drivers/usb/gadget/android_adb.c

这里只要用了支持Android的ADB工具,用于调试

6. SD卡设备:

kernel/drivers/mmc/host/goldfish.c

7. FLASH设备:

kernel/drivers/mtd/devices/goldfish_nand.c

kernel/drivers/mtd/devices/goldfish_nand_reg.h

8. LED设备:

kernel/drivers/leds/ledtrig-sleep.c

9. 电源设备:

kernel/drivers/power/goldfish_battery.c

10. 音频设备:

kernel/arch/arm/mach-goldfish/audio.c

11. 电源管理:

kernel/arch/arm/mach-goldfish/pm.c

12. 时钟管理:

kernel/arch/arm/mach-goldfish/timer.c2.3 移植过程:

以下内容摘自mini2440论坛http://www.arm9home.com/bbs/read.php?tid-1342.html,我的内核版本是2.6.25,是通常内核移植的基本步骤,红色部分是我Anroid系统对内核的特性要求

一、解压下载的内核,

二、修改内核源码根目录下的Makefile文件

#ARCH ?= arm

#CROSS_COMPILE ?=arm-linux-

三、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。

(1)

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = "vivi

.size = SZ_16K*20,

.offset = 0,

},

[1] = {

.name = "kernel

.offset = SZ_16K*20, //SZ_16K*20开始为SZ_32K*10,不过make时出错,换成为SZ_16K*20就OK 了不知道为什么

.size = SZ_2M,

},

[2] = {

.name = "yaffs2

.offset = SZ_2M+SZ_16K*20,

.size = SZ_2M*20, // SZ_2M*20 是我随便写的不想再算了呵呵

},

此处的分区一定要与supervivi的分区一致我是用的 [x] bon part 0 320k 2368k 所以只分了三个区(2)

static struct s3c2410_platform_nand smdk_nand_info = {

.tacls = 0,

.twrph0 = 30, //这三个数字要改的以前是20 60 20

.twrph1 = 0,

.nr_sets = ARRAY_SIZE(smdk_nand_sets),

.sets = smdk_nand_sets,

};

四、修改drivers/mtd/nand/s3c2410.c,去掉nand flash 的ECC。

我的内核是通过U-BOOT写到Nand Flash的, U-BOOT 通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。 //此段引用别人的我只是照此修改了搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里,修改NAND_ECC_SOFT为NAND_ECC_NONE

五、增加Yaffs2文件系统的支持

解压Yaffs2并将其加入Linux内核(打补丁的方式)

#cd yaffs2

#./patch-ker.sh c /mnt/linux-2.6.22.2/

六、系统初始化时的芯片晶振频率的修改,修改arch/arm/mach-s3c2440/mach-smdk2440.c ......

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

s3c24xx_init_clocks(12000000);

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

七、配置内核

先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程

# cp arch/arm/configs/s3c2410_defconfig .config

# make menuconfig

1.General setup --->

[*] Configure standard kernel features (for small systems) --->

选上这项,否则文件系统中的一些选项不会出现

2. System Type ---->

[*] S3C2410 DMA support [*] Support ARM920T processor

S3C2410 Machines --->

[*] SMDK2410/A9M2410

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

接下来是配置Android内核部分:

(一) 取消选择与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

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

Device Drivers ---> Graphics support ---> Support for frame buffer devices ---> <*> S3C2410 LCD framebuffer supportDevice 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

(三) 选中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

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

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

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

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

(五)添加对触摸屏的支持

Device Drivers-ÆINPUT--ÆTOUCHSCREEN--ÆS3C2410TS

2.4 经验教训

一、Android需要配置成EABI特性,EABI改善了浮点运算的速度,是一种软件加速的方法.如果内核不用EABI编译,而BUSYBOX用EABI编译,内核启动后,不能进入控制台,无法调用BUSYBOX命令。我就遇到这样的事情,内核释放完初始化内存后,就停下来了,进不了命令行

二、在移植的时候我是直接将MINI2440的2.6.29文件拷贝到2.6.25下,需要注意的是内核计划到2.6.29后头文件的位置发生了变化。需要做相应更改 三、S3C2410 Machines --->

[*] SMDK2410/A9M2410

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

这几个选项必须一起选才能编译过,这是不明白的地方

四、如果使用mini2440自带的boot,需要注意SMDK2440与MINI2440所注册的MACHINE ID是不同的,只有内核和UBOOT的MACHINE ID一直才能启动。

Android计划系列文档

3 内核移植二————触摸屏问题解决(初步)

时间:JUL,20th,2009

进展

针对上次遗留问题

(1)能够显示Android的Home界面,大钟已经显示在屏幕上;

(2)驱动程序方面实现了,触摸屏、LCD,RTC的驱动

缺陷:

(3)触摸屏触摸后监管在控制台上打印坐标,不过Android无任何反应

(4)时钟也静止在那里

遗留问题(1)已经解决,原因是没将其加入平台设备

遗留问题(2)(3)已经基本解决,能够看到漂亮的画面,但是滚动条还是不好用

添加了USB鼠标功能,但是好像只有ESC和HOME键有用,其他键没有用。

下一步计划

(1):解决滚动条触摸问题

(2)添加SD卡驱动

(3)由于能源管理的原因,系统经常进入休眠,没办法唤醒。用键盘上的键好像没作用触摸屏问题解决思路:

(一) 在mini2440触摸屏驱动的基础上,将其变成平台设备,注意平台设备有一个很关键的地方需要注意,

static struct platform_drivers 3c2410ts_driver = {

.driver = {

.nam e = "s3c2410_ts

.bus = &platform_bus_type,

},

.probe = s3c2410ts_probe,

.remove = s3c2410ts_remove

};

struct platform_device s3c_device_ts = {

.name = "s3c2410_ts

注意红色的部分要匹配,后者无法注册

(二) 触摸屏的校准问题,触摸屏校准的关键是获取top-left和botton-right的坐标,并注意在Android的系统中,top-left是源点,至于怎么获取,在笔者的《mini2440触摸屏驱动中已经提供了测试程序,自己去试试便知道

(三) Android的校准一直以来很伤头,在获取top-left和botton-right的坐标后,就知道了X,Y轴的坐标范围了,采用下面的方法进行设置。

input_set_abs_params(mtouch->dev, ABS_X, MTOUCH_MIN, MTOUCH_MAX_XC, 0, 0);

input_set_abs_params(mtouch->dev, ABS_Y, MTOUCH_MIN_YC, MTOUCH_MAX_YC, 0, 0);

(四)Android 的POWER选项一定要选上,我就在这上面折腾了好久,至于为什么,希望有高手能说明一下

Author:JeefJiang Central South University

文档

android移植到2440

移植Android到mini2440ByJeef2009年7月17日1移植环境:Target:友善之臂mini2440HOSTOS:Fedora8kernelVersion:Linux-2.6.25编译器:mini2440光盘所提供的编译器2内核移植(一):2.1参考资料感谢一下大侠提供的资料,链接如下.http://blog.chinaunix.net/u2/85263/showart_1729098.htmlhttp://blog.chinaunix.net/u/26691/showart
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top