ちょっと前に書いた記事の続き。
【Android】Terminalから端末時間を変更する - adb shell date
date.cの実装
toolbox配下の**date.c**の実装を確認してみました。
http://tools.oesf.biz/android-4.4.4_r1.0/xref/system/core/toolbox/date.c#118
fd = open("/dev/alarm", O_RDWR);
ts.tv_sec = tv.tv_sec;
ts.tv_nsec = tv.tv_usec * 1000;
res = ioctl(fd, ANDROID_ALARM_SET_RTC, &ts);
//res = settimeofday(&tv, NULL);
if(res < 0) {
fprintf(stderr,"settimeofday failed %s\n", strerror(errno));
return 1;
}
まあ予想はしていましたが、/dev/alarmに書き込んでる。
/dev/alarmのPermission
ということで、/dev/alarmのPermissionを確認してみた。
root@vbox86p:/ # ll /dev/alarm
crw-rw-r-- system radio 10, 54 2014-10-10 20:57 alarm
ふむふむ。
system userが持ち主で、radio groupなら読み書きできると。
その他のuserは、読み込みだけですね。
まとめ
普通にadb shellで入るとdateコマンドの実行は反映されないのは、Permissionの問題ということです。
adb root等でRoot権限になればshellからでも変更できます。