说明
应该是2016年之前的记录,之前没有写文档记录的习惯,都是随手记录的txt文件,所以没有图片、格式等。甚至现在看来有些地方逻辑不通(可能还因为年少轻狂,有些偏颇的话语),但是这些与现在的我不重要了,所以也不打算再复现、推理,重新编辑等,仅仅是在旧硬盘中发现,删除之前觉得可能还有点价值,记录下来吧。
1:应该是默认使用recovery。
界面和cm10.2的好像没什么差异,支持触摸,滑动触摸。
2:如果把recovery-cm改名recovery,删除原来的recovery编译完内核就停止了,没看到报错。测试编译boot发现:
device/xiaomi/aries/charger/charger.c:1358: error: undefined reference to ‘res_create_surface’
device/xiaomi/aries/charger/charger.c:1367: error: undefined reference to ‘res_create_surface’
collect2: error: ld returned 1 exit status
make: *** [/media/ubuntu/home/dong/cm/cm11.0/out/target/product/aries/obj/EXECUTABLES/charger_aries_intermediates/LINKED/charger_aries] 错误 1
make: *** 正在等待未完成的任务…
删除device的charger再编译就可以编译出recovery了,界面有些变化,没有recovery那么多的选项,不过可以滑动触摸和选项触摸选择,只是很混乱的感觉,只是想向下滚动,可是很可能就直接成了点击效果,很容易误操作。
3:在recovery中grep -rin res_create_surface .
./recovery/ui.c:546: int result = res_create_surface(BITMAPS[i].name, BITMAPS[i].surface);
./recovery/ui.c:558: int result = res_create_surface(filename, gProgressBarIndeterminate+i);
./recovery/ui.c:572: int result = res_create_surface(filename, gInstallationOverlay+i);
./recovery/minui/resources.c:44:int res_create_surface(const char* name, gr_surface* pSurface) {
./recovery/minui/minui.h:75:int res_create_surface(const char* name, gr_surface* pSurface);
./recovery/minui/minui.h:77: return res_create_surface(name, pSurface);
4:在charger的Android.mk中LOCAL_C_INCLUDES := bootable/recovery
charger.c引入了#include “minui/minui.h”
int main(int argc, char **argv)
{
int ret;
struct charger *charger = &charger_state;
int64_t now = curr_time_ms() - 1;
int fd;
int i;
list_init(&charger->supplies);
klog_init();
klog_set_level(CHARGER_KLOG_LEVEL);
dump_last_kmsg();
alarm_thread_create();
LOGI("--------------- STARTING CHARGER MODE ---------------\n");
gr_init();
gr_font_size(&char_width, &char_height);
ev_init(input_callback, charger);
fd = uevent_open_socket(64*1024, true);
if (fd >= 0) {
fcntl(fd, F_SETFL, O_NONBLOCK);
ev_add_fd(fd, uevent_callback, charger);
}
charger->uevent_fd = fd;
coldboot(charger, "/sys/class/power_supply", "add");
ret = res_create_surface("charger/battery_fail", &charger->surf_unknown);
if (ret < 0) {
LOGE("Cannot load image\n");
charger->surf_unknown = NULL;
}
for (i = 0; i < charger->batt_anim->num_frames; i++) {
struct frame *frame = &charger->batt_anim->frames[i];
ret = res_create_surface(frame->name, &frame->surface);
if (ret < 0) {
LOGE("Cannot load image %s\n", frame->name);
/* TODO: free the already allocated surfaces... */
charger->batt_anim->num_frames = 0;
charger->batt_anim->num_cycles = 1;
break;
}
}
ev_sync_key_state(set_key_callback, charger);
set_backlight(false);
gr_fb_blank(true);
charger->next_screen_transition = now - 1;
charger->next_key_check = -1;
charger->next_pwr_check = -1;
reset_animation(charger->batt_anim);
kick_animation(charger->batt_anim);
event_loop(charger);
return 0;
}
对比两个recovery的minui.h和resources.c,把charger.c中修改
//ret = res_create_surface(“charger/battery_fail”, &charger->surf_unknown);
ret = res_create_display_surface(“charger/battery_fail”, &charger->surf_unknown);
//ret = res_create_surface(frame->name, &frame->surface);
ret = res_create_display_surface(frame->name, &frame->surface);
编译通过,不过充电无法显示图片,只有电量数字,不装电池时不断启动第一屏。