s3c2410/2440(armv4t) 移植Android

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包,在这里(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!
20081208修改:
最新进展, s3c2440上也已经跑起来了,能进idle, 触摸有kernel消息但是android还没认.
使用的是utu2440f平台, 扬创的..2410太慢啦..上2440咯!
前段时间太忙没来得及更新和放patch..
今天晚上直接放支持2410/2440的android image..
下载我做好的android_armv4 image包,在这里 http://www.androidin.com/bbs/viewthread.php?tid=2741&page=1&extra=page%3d1
原来的帖子(s3c2410):
目前已经能进入idle..但屏幕颜色显示还有问题..触摸驱动也还没有搞..
硬件配置为s3c2410 200mhz, 64m ram, 64m nand..
我的板子kernel比较老~直接用官方android kernel做的..于是所有驱动都得自己移植进来..后面估计有得搞了..
试了几个方案..感谢openmoko两位牛人..sean的patch没有跑起来..最终还是用的benno的patch..另外有些小修改..

华大半导体与华东师范大学共建“集成电路工程技术联合实验室”
低压电缆和高压电缆常见故障分析
采用RTX51操作系统根据车流量动态调节实现智能交通灯的设计
东风Honda电动化战略下的第二款纯电动SUV:东风Honda M-NV
汉枫HF-LPT120模块进行串口模式烧写流程
s3c2410/2440(armv4t) 移植Android
实施精确、低功耗、紧凑型温度监测的新方法
Modbus转Profinet网关实现Modbus设备与Profinet设备的无缝连接
CS5263替代PS176 DP转HDMI2.0转换器芯片
iPhone7和华为P9都输它? MWC2017最佳智能机是它
基于AVR Butterfly的电源设计能够很好地完成嵌入式系统的供电和测试
因为小米5X的存在,这款OPPOA77手机显得很尴尬
剑桥AI报告:谷歌成为全美最大AI雇主 知识产权集中在巨头
如何有效提高巡检工作质量,如何有效地将巡检数据信息化
开车给手机充电,你遇到过这样的问题吗?
一男子认为5G能监控,炸弹袭击AT&T大楼
智能家居是如何改变我们的生活?能为我们的日常生活带来什么?
如何使用相移时间延迟将DC/DC 降压稳压器的噪声性能
厉害了我的哥!S7 edge成功移植魅族Flyme 6系统
FPGA管脚分配时需注意的一些事项