免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 969 | 回复: 0
打印 上一主题 下一主题

s3c2410/2440(armv4t) 移植教程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 16:55 |只看该作者 |倒序浏览

Androidin首发
Androidin
Dev.Team 熊猫哥哥
ARMv4移植简单教程:
   
相信国内很多朋友手上都有s3c2410/2440的片子,基于armv4t(arm920t)的指令架构。在之前,因为android的一些底层代码含有armv5t的指令, 所以以前无法移植到这样的平台。
在这里也放出移植教程和已经编译好的image。 让更多的朋友可以在自己的开发板上亲身体验android。教程基于勤研qt2410以及扬创utu2440完成。
   
注意,移植是到armv4而不是armv4t,  原因应该是不开thumb支持会比较好移植一些(改动未涉及的库依然会用thumb代码,所以kernel依然要开thumb支持)。
  
  kernel移植及nfs配置的详细部分等请自行查阅相关文档,本文只做提点,另外需要些git的操作。
   
目前的image只是临时方案。主要是基于openmoko的
benno一些尚未正式发布的patch,整体来说已经比较完善和clean,我仅做了点小修改就能使用,由于部分库用c实现替换掉了arm实现,同时一些critical的armv5指令被armv4的替换,速度可能有点慢,尤其是2410上速度很慢。。对于严苛的android开发组来说,这些
patch部分尚未提交,部分在reviewing,还需要一些周期才会被接受进官方git。等这些patch被官方接受后,我会整理另一套正式一些的版本,同时可能会提供些优化方案。
A.  kernel的移植
  
  1. 移植,两个方案可以选。
        1).
将android的官方kernel的补丁打到自己的kernel上,这个方法对于kernel版本比较新的朋友比较合适,也很简单。比如2.6.24或以上。
  
          a. 下载android kernel,执行
git diff v2.6.25 HEAD > android.patch
            b. 进入你自己的kernl,执行 git
apply android.patch
            c.
一般都会出error,手动合并所有带error的文件,如果你是2.6.25的话很简单,2.6.24会费点周折,因为kobject/kset的一些改动造成android
power/ipv4等驱动不太好合。。
        2).
将自己kernel上的bsp移植到android官方kernel。适用于kernel比较旧的朋友。
           
因为2410/2440是linux原生支持,所以基本上只需要移植lcd/touchpanel/网卡等等的驱动,并打开2410/2440支持选项即可。这个目前网上已经有大量的资料详细阐明,
在此不再累述,但是出问题比较多的地方就在这里了。
    2. 这些步骤完成后,检查如下选项是否都已经打开(make menuconfig):
  
      CONFIG_AEABI=y   
        CONFIG_SHMEM=y   
     
   CONFIG_ASHMEM=y
        CONFIG_ARM_THUMB=y
     
   CONFIG_ANDROID_BINDER_IPC=y
        CONFIG_ANDROID_LOGGER=y
     
   以下不一定重要, 但能开就开,除非移植有问题,比如power驱动:
        CONFIG_ANDROID_POWER=y
     
   CONFIG_ANDROID_POWER_STAT=y
        CONFIG_ANDROID_POWER_ALARM=y
     
   CONFIG_ANDROID_RAM_CONSOLE=y
        CONFIG_ANDROID_TIMED_GPIO=y
     
   CONFIG_ANDROID_PARANOID_NETWORK=y
    3. 按需要make zImage,再生成uImage,烧写到nand。
B. 制作android nfs root
    1. 下载我做好的android_armv4 image包,见帖子下方
   
2. 准备好能启动的nfs root,设置好访问权限(重要!),资料请网上查阅,不再累述
    3.
拷贝包中的system目录到nfs_root/system, data目录到nfs_root/data, root目录到nfs_root/
(其他.img文件可以模拟器使用,同时也可以做真实文件系统,后话了)
    4.
设置nfs启动参数中的init=/init,既指向nfs_root下的init
    5. 删除nfs_root/init.rc,去掉除mount tmpfs tmpfs
/sqlite_stmt_journals size=4m之外所有的mount命令
C. 运行!
    跑跑看吧, 进入android
console之后可以运行logcat查看log。第一次启动会创建很多的数据,会比较慢,2410几乎是折磨了。。平常的启动速度2440大概在1分多钟,2410要5分钟了。看到漂亮的大手表,你就搞定了!!
常见问题:
1.
lcd不显示, 检查framebuffer..如果正常,查看nfs权限。
2. 非法指令,检查thumb,eabi选项。
3.
servicemanager异常退出,检查binder & ashmem选项。
其他的看kernel log和logcat自己分析吧~
呵呵~
简单流程就是如此,中间可能会遇到很多困难的!wish u luck!
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/49088/showart_1933873.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP