android 4.0.3 设置时间无法更新到RTC

1.跟踪执行路径:
packages/apps/Settings/src/com/android/settings/DateTimeSettings.java
onTimeSet(...) --> setTime(...) --> SystemClock.setCurrentTimeMillis(when)

frameworks/base/core/java/android/os/SystemClock.java
native public static boolean setCurrentTimeMillis(long millis);

frameworks/base/core/jni/android_os_SystemClock.cpp
static jboolean android_os_SystemClock_setCurrentTimeMillis(JNIEnv* env,jobject clazz, jlong millis) --> setCurrentTimeMillis(millis)

frameworks/base/libs/utils/SystemClock.cpp

int setCurrentTimeMillis(int64_t millis) --> ioctl(fd, ANDROID_ALARM_SET_RTC, &ts)

2.修改幷编译内核:
cd linux-3.4.2/
查看ANDROID_ALARM_SET_RTC定义:vi -t ANDROID_ALARM_SET_RTC
编译内核:./g
修改文件:vi drivers/staging/android/alarm-dev.c , 
重新编译:./g
将修改幷编译好的内核文件 vmlinuz 拷贝到远程服务器:scp vmlinuz 用户名@IP:/www/hxm/

3.加载修改后的内核到开发板上:
重启,出现开机选择菜单时按下字母键 c 进入pmon命令行界面,通过minicom在pmon命令行下:
ifaddr eth0 10.20.42.171
load http://IP/hxm/vmlinuz
g console=ttyS0,115200 root=/dev/sda5 init=/init androidboot.console=tty
进入android系统

4.修改幷编译android源码生成 libutils.so 文件:
cd ~/androidtoolchain
source run.sh
yeeloong
cd frameworks/base/libs/utils/
mm -B
在打印的信息中找到这一行 Install: out/target/product/yeeloong/system/lib/libutils.so,即为编译好的 .so 文件存放的路径

5.替换 libutils.so 动态库:
重启,出现开机选择菜单时按下字母键 c 进入pmon命令行界面,通过minicom在pmon命令行下:
设置IP,加载中标内核,进入中标系统:
ifaddr eth0 10.20.42.171
load http://IP/lx/vm.34.test.perf
g console=ttyS0,115200 root=/dev/sda1 3
root身份登录:
fdisk -l
挂载android系统所在分区:mount /dev/sda5 /mnt/
cd /mnt/system/lib/
ls libutils.so
备份 .so 库文件:mv libutils.so libutils.so.bk
在登录服务器[email protected]的终端将编译好的 .so 动态库拷贝至android系统:scp ../../../../out/target/product/yeeloong/system/lib/libutils.so [email protected]:/mnt/system/lib/
(若提示No route to host,先将其拷贝至本机[email protected],再通过 U 盘拷贝至android系统)
(或者先将编译好的 .so 动态库拷贝至笔记本:scp ../../../../out/target/product/yeeloong/system/lib/libutils.so [email protected]:~/adb/bin ,再push至android系统: adb push libutils.so system/lib/)
cd ../../../
umount /mnt/
重启以加载android内核,进入android系统:
ifaddr eth0 10.20.42.171
load http://IP/hxm/vmlinuz
g console=ttyS0,115200 root=/dev/sda5 init=/init androidboot.console=tty

6.通过adb查看服务器端实时日志:
(笔记本上)
cd adb/bin
./adb devices
adb connect 10.20.42.118
adb shell
root@android:/ # logcat

7.代码修改:

应用程序框架层中,对文件 ~/androidtoolchain/frameworks/base/libs/utils/SystemClock.cpp 中的修改见附件patch。
linux内核层中,对文件 ~/linux-3.4.2/drivers/rtc/rtc-dev.c 中的修改见附件patch。
在android系统分区的根目录下,更改 ueventd.rc 文件,增加一行:/dev/rtc0 0666 root root . 使得设备节点的权限由 600 改为 666.

显示系统时间:date
设置系统时间: date 月日时分年.秒
显示硬件时间:hwclock --show 或 clock --show
设置硬件时间:hwclock --set --date = "月/日/年 时分秒“ 或 clock --set --date = "月/日/年 时分秒“
硬件时间同步到系统时间:hwclock --hctosys 
系统时间同步到硬件时间:hwclock --systohc

8.Git提交代码

linux-3.4.2目录下:
1.查看提交版本的历史记录:git log
查看分支:git branch
2.查看是否有文件改动后未提交:git status
3.查看所有文件改动的具体内容:git diff | vi - (查看某个文件改动的具体内容:git diff 文件名)
此处可查看对那些文件修改了哪些内容,也可对原来调试加上的打印语句进行注释。
4.将改动添加到缓存区:git add -u (添加文件的改动到缓存区:git add 文件名)
5.实际提交文件的改动到仓库:git commit -m "对提交内容的说明" 
6.查看刚刚提交的版本号:git log
7.生成patch文件:git format-patch 版本号 -1

在android源码根目录下, .repo/manifest.xml文件中可查看哪些目录下可使用git 
linux只在源码根目录下可使用git


Git使用教程:
git - 简易指南: http://www.bootcss.com/p/git-guide/
手把手教你使用Git: http://blog.jobbole.com/78960
Git 的origin和master分析: http://lishicongli.blog.163.com/blog/static/1468259020132125247302/
Git版本恢复命令reset : http://blog.163.com/jianlizhao@126/blog/static/173251163201183045856216/
Git教程: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
MOOC学院视频:如何使用Git和Github: http://mooc.guokr.com/career/2250/How-to-Use-Git-and-GitHub/

你可能感兴趣的:(Android)