版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、From: 文件:内核移植.rar大小:13KB下载:下载移植Android 到mini2440By Jeef2009年7月17日1 移植环境:Target:友善之臂mini2440HOST OS:Fedora 8kernel Version:Linux-2.6.25编译器:mini2440光盘所提供的编译器2 内核移植(一):2.1 参考资料感谢一下大侠提供的资料,链接如下./home/space.php?uid=5 2.2 进展与缺陷:时间:JUL,17th,2009进展:(1)能够显示Android的Home界面,大钟已经显示在屏幕上;(2)驱动程序方
2、面实现了,触摸屏、LCD,RTC的驱动缺陷:(1)触摸屏触摸后监管在控制台上打印坐标,不过Android无任何反应(2)时钟也静止在那里2.2 移植准备在移植之前要对移植的对象有一个大致的了解。如果你从网站上下载一个主线纯净的内核,这个移植主要要实现两个方面的内容,一是Android与主线内核不同的部分,二是与你移植的硬件平台相关的部分。我采用的思路是下载Android发布的内核,然后去了Android中与G1手机硬件平台相关的部分,留下Android内核对主线内核更改但与硬件平台无关的部分,并添加与mini2440硬件平台相关的部分。下载Android内核:关于Android内核与主线Lin
3、ux内核不同的地方,夜猫子大侠已经做了分析,分析的比较到位,现在拷贝在这里,标注红色的为与硬件相关的,标注蓝色的是硬件无关的,黑色的部分是笔者目前还不清楚的,有待研究: (1)基于ARM架构增加Gold-Fish平台,相应增加的目录如下: kernel/arch/arm/mach-goldfish kernel/include/asm-arm/arch-goldfish(2)增加了yaffs2 FLASH文件系统,相应增加的目录为:
4、 kernel/fs/yaffs2 实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包. 3. 增加了Android的相关Driver,相应目录为: kernel/drivers/android 主要分为:
5、; Android IPC系统: Binder (binder.c) Android 日志系统: Logger (logger.c) Android 电源管理:
6、0; Power (power.c) Android 闹钟管理: Alarm (alarm.c) Android 内存控制台: Ram_console (ram_console.c) &
7、#160; Android 时钟控制的gpio: Timed_gpio (timed_gpio.c) 4. 增加了switch处理, 相应的目录为: kernel/drivers/switch/ 5. 增加了一种新的共享内存处理方式, 相应增加的文件为: kernel/mm/ashmem.c 6. 其他为Linux-2.6.25内核所做的补丁等等,例如BlueToot
8、h, 在此不做详细分析 另外GoldFish平台相关的驱动文件如下: 1. 字符输出设备: kernel/drivers/char/goldfish_tty.c 2. 图象显示设备: (Frame Buffer) kernel/drivers/video/goldfishfb.c 3. 键盘输入设备: k
9、ernel/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卡设备: &
10、#160; 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设备: ker
11、nel/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-g
12、oldfish/pm.c 12. 时钟管理: kernel/arch/arm/mach-goldfish/timer.c2.3 移植过程:以下内容摘自mini2440论坛是通常内核移植的基本步骤,红色部分是我Anroid系统对内核的特性要求一、解压下载的内核,二、修改内核源码根目录下的Makefile文件 #ARCH ?= arm #CROSS_COMPILE
13、;?=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"
14、;, .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, &
15、#160; / SZ_2M*20 是我随便写的 不想再算了 呵呵 , 此处的分区一定要与supervivi的分区一致 我是用的 x bon part 0 320k 2368k 所以只分了三个区 (2) static struct s3c2410_platform_nand smdk_nand_info = .tacls
16、160; = 0, .twrph0 = 30, /这 三个数字要改的 以前是20 60 20 .twrph1 = 0, .nr_sets
17、160; = ARRAY_SIZE(smdk_nand_sets), .sets = smdk_nand_sets, ; 四、 修改drivers/mtd/nand/s3c2410.c,去掉nand flash 的ECC。 我的内核是通过UBOOT写到Nand Flash的, UBOOT 通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中N
18、and Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。 /此段引用别人的 我只是照此修改了 搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里,修改NAND_ECC_SOFT为NAND_ECC_NONE 五、增加Yaffs2文件系统的支持 解压Yaffs2并将其加入Linux内核(打补丁的方式)
19、60; #cd yaffs2 #./patch-ker.sh c /mnt/linux-/ 六、系统初始化时的芯片晶振频率的修改,修改arch/arm/mach-s3c2440/mach-smdk2440.c . static void _init smdk2440_map_io(void) s3c24xx_init_io(sm
20、dk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc); s3c24xx_init_clocks(12000000); s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs); 七、配置内核 先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程 &
21、#160; # cp arch/arm/configs/s3c2410_defconfig .config # make menuconfig 1.General setup -> * Configure standard kernel features (for small systems) ->
22、 选上这项,否则文件系统中的一些选项不会出现 2. System Type -> * S3C2410 DMA support * Support ARM920T processor S3C2410 Machines ->
23、 * SMDK2410/A9M2410 S3C2440 Machines -> * SMDK2440 * SMDK
24、2440 with S3C2440 CPU module接下来是配置Android内核部分:(一) 取消选择与Goldfish相关的内容Device Drivers -> Character devices -> < > Goldfish TTY DriverDevice Drivers -> Power supply class support -> < > Goldfish battery driver (NEW)Device Drivers -> Real Time Clock -> < > GOLDFISH (NE
25、W)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 -
26、> * Bootup logo -> * Standard black and white Linux logoDevice Drivers -> Graphics support -> * Bootup logo -> * Standard 16-color Linux logoDevice Drivers -> Graphics support -> * Bootup logo -> * Standard 224-color Linux logo(三) 选中Android内核必须选项Kernel Features -> * Use th
27、e ARM EABI to compile the kernelGeneral setup -> * Use full shmem filesystemGeneral setup -> * Enable Android's Shared Memory SubsystemSystem Type -> * Support Thumb user binariesDevice Drivers -> Android -> * Android log driverDevice Drivers -> Android -> <*> Binder I
28、PC Driver(四) 尽量选中Android内核可选选项Device Drivers -> Android -> * RAM buffer consoleDevice Drivers -> Android -> * Android timed gpio driverDevice Drivers -> Android -> * Only allow certain groups to create sockets(五)添加对触摸屏的支持Device Drivers-àINPUT-àTOUCHSCREEN-àS3C2410TS2
29、.4 经验教训一、Android需要配置成EABI特性,EABI改善了浮点运算的速度,是一种软件加速的方法.如果内核不用EABI编译,而BUSYBOX用EABI编译,内核启动后,不能进入控制台,无法调用BUSYBOX命令。我就遇到这样的事情,内核释放完初始化内存后,就停下来了,进不了命令行二、在移植的时候我是直接将MINI2440的2.6.29文件拷贝到2.6.25下,需要注意的是内核计划到2.6.29后头文件的位置发生了变化。需要做相应更改三、 S3C2410 Machines ->
30、60; * SMDK2410/A9M2410 S3C2440 Machines -> * SMDK2440
31、60;* SMDK2440 with S3C2440 CPU module这几个选项必须一起选才能编译过,这是不明白的地方四、如果使用mini2440自带的boot,需要注意SMDK2440与MINI2440所注册的MACHINE ID是不同的,只有内核和UBOOT的MACHINE ID一直才能启动。3 内核移植二触摸屏问题解决(初步)时间:JUL,20th,2009进展针对上次遗留问题(1)能够显示Android的Home界面,大钟已经显示在屏幕上;(2)驱动程序方面实现了,触摸屏、LCD,RTC的驱动缺陷:(3)触摸屏触摸后监管在控制台上打印坐标,不过Android无任何反应(4)时钟也静
32、止在那里遗留问题(1)已经解决,原因是没将其加入平台设备遗留问题(2)(3)已经基本解决,能够看到漂亮的画面,但是滚动条还是不好用添加了USB鼠标功能,但是好像只有ESC和HOME键有用,其他键没有用。下一步计划(1):解决滚动条触摸问题(2)添加SD卡驱动(3)由于能源管理的原因,系统经常进入休眠,没办法唤醒。用键盘上的键好像没作用触摸屏问题解决思路:(一) 在mini2440触摸屏驱动的基础上,将其变成平台设备,注意平台设备有一个很关键的地方需要注意,static struct platform_drivers 3c2410ts_driver = .driver =
33、 .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是源点,至于怎么获取,在笔
34、者的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 的
35、POWER选项一定要选上,我就在这上面折腾了好久,至于为什么,希望有高手能说明一下JUL,21th,2009SD卡移植今天成功的搞定了SD卡的移植,SD卡的驱动程序还是用了mini2440的驱动程序,不过因为移植到得内核是Linux2.6.25,所以需要做相应的头文件位置更改,另外在ARCH文件夹中要做如下更改:SC324XX.C中做如下更改:void _init s3c244x_map_io(struct map_desc *mach_desc, int size)/* register our io-tables */iotable_init(s3c244x_iodesc, ARRAY_S
36、IZE(s3c244x_iodesc);iotable_init(mach_desc, size);/* rename any peripherals used differing from the s3c2410 */ s3c_device_= "s3c2440-sdi"s3c_device_ = "s3c2440-i2c"s3c_device_ = "s3c2440-nand"s3c_device_ = "s3c2440-usbgadget"在commonsmdk.c中做如下更改:static struct platform
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机物料采购管理制度汇编
- 采购部门规范制度汇编
- 采购阳光化管理制度
- 采购项目督办制度模板
- 采购风险评估管理制度
- 重庆市分散采购管理制度
- 钢厂采购基地管理制度
- 礼仪规范演讲稿
- 老人与海的读后感(15篇)
- 销售年工作总结(15篇)
- 外贸服装业务部管理制度
- 中央预算资金34个细分领域资金分布比例及项目申报实操
- 2026青海海东公安招录32名人民警察备考题库及答案详解(夺冠系列)
- 2026西藏自治区教育考试院招聘非编工作人员11人备考考试题库及答案解析
- 2026年政府采购培训试题200道及参考答案【新】
- 家长安全培训内容文案课件
- 肿瘤学课件教学
- 高级程序设计题库及答案
- 2026年2月1日执行的《行政执法监督条例》解读课件
- 天天刷牙课件
- 2026年高考数学复习难题速递之圆锥曲线综合(2025年11月)
评论
0/150
提交评论