移植Andorid4.0.4 - 步骤及问题汇总

本文详细介绍了如何将 Android 4.0.4 移植到 S5PC100 平台的过程,包括源码下载、环境配置、内核及驱动定制等内容,并分享了调试过程中可能遇到的问题及解决方法。

原文地址:http://blog.youkuaiyun.com/mr_raptor/article/details/7726750

转载者注:大牛人物,其他的不讲了

+ 华清远见 - MichaelTang

--------------------------------------------------------------------------------------------------------------------------------

开发板: FS_S5PC100

CPU: S5PC100,800Mhz,A8

MEM:256Mb

NAND: 256Mb

LCD:4.3

Android4.0.4源码:

linaro-android-12.06-release for origen

由于s5pc100官方只给出Android2.1的release版本,没有最新版本的,所以只能自己移植。

--------------------------------------------------------------------------------------------------------------------------------

1. 通过git下载源码

2. 设置编译环境为origen-eng

3. 修改device里的BoardConfig.mk

# 不编译内核和Uboot(默认编译会将Uboot和zImage一起编译出来)

# 去掉支持SMP(A8是单核)

# 去掉硬件加速和Gator的arm调试服务

4. 编译

由于android4.0.4 for origen是使用的CPUExynos 4210的猎户座CPU,该CPU是A9的,支持SMP和Mali-400 GPU,所以内核我们要自己进行重新编译针对S5PC100。

5. 编译内核

使用s5pc100的默认配置,编译内核,注意加上android的必要驱动。

Android驱动
# Android Binder:基于openBinder框架的驱动,进程间通信底层主要驱动,没有了它,android无法工作。
# Andorid Logger:是一个轻量级的日志系统,在内核里是misc设备驱动,它与logcat配合实现调试。
代码:driver/staging/android/logger.c
# Andorid Lowmemorykiller:低内存管理器,是linux标准OOM(Out Of Memory)改进版,当系统内存不足时,会杀掉一些不重要的进程,释放空间。
代码:driver/staging/android/lowmemorykiller.c
# Android Ram Console ram_console:辅助调试的内核机制,它用一段物理内存虚拟一个console设备,这样printk的时候会把调试信息写一份到这块ram,最后通过/proc文件系统输出。
#Android Timed Device timed_gpio:基于platform driver 实现的一个增强的gpio驱动,它与内核定时器绑定在了一起,实现了一种时钟控制的gpio
通过sysfs操作gpio,可以让gpio输出高、低电平,同时也可以指定一个定时器过期时间,当超时的时候,会去执行一个callback函数。目前支持vibrator和LED设备
对应代码:driver/staging/android/timed_gpio, time_output,对应文件系统(sys/class/timed_output/<dev_name>/enable)
# Androd Switch:它是android新引进的驱动,用于检查一些开关量,如耳机插入,USB设备插入,在sysfs里创建对应的entry(sys/class/switch/<dev_name>/stat),用户通过sysfs与之进行交互,同时,也可以使用uevent机制与其交互。
设备文件没有读写权限,没有加载对应的uevent.rc启动脚本文件(该脚本 文件为android的设备进行权限设置的)
对应代码:driver/switch/*
# Android Power Manager:基于标准linux电源管理系统的轻量级电源管理驱动
代码:kernel/power/*
# Android Ashmem:匿名共享内存,为进程间提供大块共享内存,同时为内核提供回收和管理这些内存的机制。
代码:mm/ashmem.c
# Android PMEM:用于向用户空间提供连续的物理内存,DSP和其它需要连续物理内存的设备需要它的提供服务。
代码:driver/misc/pmem.c
# Android alarm:提供一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一个即使在设备睡眠时也会运行的时钟基准。
代码:driver/rtc/alarm.c
# USB Gadget:一个基于标准Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gadget框架的。
代码:driver/usb/gadget/
# Yaffs2文件系统:Android采用Yaffs2作为 MTD Nandflash文件系统。

转载者注:这部分大致写出了android对标准linux内核修改的地方,很全面的说

平台设备

网卡:dm9000

http://blog.youkuaiyun.com/mr_raptor/article/details/7721171

LCD:显示

编译出内核来,将其放到tftp目录下,等待使用。

6. 制件根文件系统

使用nfs挂载

# 将out/target/product/origen/root里的内容拷贝到 nfs_root(根文件系统目录)

# 将out/target/product/origen/system拷贝到 nfs_root下

7. 测试文件系统:
# 能否挂上nfs ?不能的话,看下内核配置,网络, nfs root等
# 将init.rc的loglevel改为最低级7,目的是为了查看输出信息
# 能否启动init进程,如果看到常见的: Kernel panic no syncing kill init,很有可能是内核配置有错误。这个时候,先将自己编译的内核挂一个裸文件系统(只有busybox命令和基本库和命令行的fs),通过chroot挂我们的android文件系统,如果出错,可以通过strace来跟踪,查看原因。
# 能否出现sh console?不能的话:在init.rc里将要跟踪的服务加上strace 查看,如:
serice sh /system/bin/strace -f -F -o log /system/bin/sh
注: 一般strace在android里是没有这个命令的,要自己交叉编译出来,见xx章节,-f -F是指,strace命令跟踪当前程序创建出来的子进程,-o log,是指将跟踪信息输出到log文件里。

# 在sh里输入logcat ,来查看打印出来的log,分析android的本地服务是否正常启动?

注:
本地服务全部段错误异常退出,通过strace来跟踪查看什么原因造成的段错误 (最难调试的错误之一)
常见原因:
> NEON没有开启
init执行时,显示非法指令。
> 必要驱动没有安装,设备文件不存在,不能打开指定的设备,不能提供服务,如:binder等android必须依赖的驱动没有安装(见前面列出的android必要驱动)
> surfaceflinger自动重启
通常,硬件加速的代码是厂商提供的,一般是不开源的,所以你如果能拿到指定版本的硬件加速代码,可以开启硬件加速,如果没有对应版本的硬件加速代码,则只能使用超慢的软加速。
而Android系统默认会去system/lib/egl下去读取egl.cfg配置文件,里面0 0 android是使用软件加速, 0 1 xxx是表示硬件加速。如果没有硬件加速代码,将 0 1 xxx这行注释掉,虽然我有android2.1硬件代码库,但是不能用在Android4.0.4上面。

转载者注:在init.c中main方法中,如果不支持图形的话,默认在终端中打印一个字符,这个字符就是“android”

> 没有Android字样显示
在ANDROID_SRC/system/core/init/init.rc里,查找load_565rle_image函数,将其后面注释的代码去掉,然后在mmm编译init,拷贝到nfs_root中。

> 没有Android动画
确认init.rc里有没有关闭bootanim本地服务

> 看不到Android桌面
通过logcat查看surfaceflinger,看其是否正常启动,查看ActivityManger有没有启动Launcher

【多变量输入超前多步预测】基于CNN-BiLSTM的光伏功率预测研究(Matlab代码实现)内容概要:本文介绍了基于CNN-BiLSTM模型的多变量输入超前多步光伏功率预测方法,并提供了Matlab代码实现。该研究结合卷积神经网络(CNN)强大的特征提取能力与双向长短期记忆网络(BiLSTM)对时间序列前后依赖关系的捕捉能力,构建了一个高效的深度学习预测模型。模型输入包含多个影响光伏发电的气象与环境变量,能够实现对未来多个时间步长的光伏功率进行精确预测,适用于复杂多变的实际应用场景。文中详细阐述了数据预处理、模型结构设计、训练流程及实验验证过程,展示了该方法相较于传统模型在预测精度和稳定性方面的优势。; 适合人群:具备一定机器学习和深度学习基础,熟悉Matlab编程,从事新能源预测、电力系统分析或相关领域研究的研发人员与高校研究生。; 使用场景及目标:①应用于光伏电站功率预测系统,提升电网调度的准确性与稳定性;②为可再生能源并网管理、能量存储规划及电力市场交易提供可靠的数据支持;③作为深度学习在时间序列多步预测中的典型案例,用于科研复现与教学参考。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注数据归一化、CNN特征提取层设计、BiLSTM时序建模及多步预测策略的实现细节,同时可尝试引入更多外部变量或优化网络结构以进一步提升预测性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值