|
本帖最后由 brainx 于 2018-2-7 15:33 编辑
------------------
最新进展
经过不断查询资料和分析 ,基本上已经 清楚了整个流程。
具体的整 个通信过程有望可以自己实现。
uhmi初始化,打开/dev/ttyS1(linux下串口设备 )
然后进行串口初始化的一系列操作, 这就是uhmi执行提示isatty sucessed的提示语原因之一。
之后创建一个dev_rx,dev_tx的线程,负责对接收到的数据 进行串口操作,屏幕就能正常显示了。
void *InitObjValue() //初始化全局数组和回调函数
{
void *result; // r0
result = memset(&g_uhmi_params, 0, 0x1A84u);
g_uhmi_params.dev_init = 0xA8CC; //初始化callback
g_uhmi_params.dev_rx = 0xAB48; // 接收线程callback
g_uhmi_params.dev_tx = 0xAC94;//发送线程callback
g_uhmi_params.dev_close = 0xA898;//退出callback
g_uhmi_params.isScreenShow = 1;
g_uhmi_params.ApplicationMode = 1;
g_uhmi_params.nWeatherRefresh = 0xE10;
return result;
}
int APP_INIT_MCU_DATA() //主要的调用逻辑
{
signed int v0; // r0
signed int v1; // r0
char v3; // [sp+0h] [bp-410h]
char v4; // [sp+1h] [bp-40Fh]
char dest; // [sp+2h] [bp-40Eh]
uhmi_data_crawler::host_table(&g_uhmi_params.pLinkDeviceTable);
nSysUpTime = uhmi_data_crawler::getUptime();
uhmi_data_crawler::verInfo((char *)&g_uhmi_params.stru_VerInfoFromNvram);
CpToShowVerInfo();
usleep(0x4E20u);
v0 = uhmi_data_crawler::wifi(&g_uhmi_params.pWifiInfo);
CpToShowWifiInfo(v0);
usleep(0x4E20u);
homeinfo((int)&g_uhmi_params.wan_homeInfo);
CpToShowWanInfo();
usleep(0x4E20u);
uhmi_data_crawler::wanTotal();
usleep(0x4E20u);
PortStatus(&g_uhmi_params.PortStatus);
CpToShowPortStatus();
usleep(0x30D40u);
v1 = uhmi_data_crawler::weather_info(g_uhmi_params.pCityInfo);
CpToShowCityInfo(v1);
usleep(0x30D40u);
memset(&v3, 0, 0x400u);
g_uhmi_params.nCurPage = 4;
v3 = 48;
v4 = 4;
memcpy(&dest, &g_uhmi_params.nCurPage, 4u);
CopyToShowBuffer(&v3, 6u);
usleep(0x4E20u);
return uhmi_data_crawler::checkScreenTimeInfo();
}
其中
1、第一页的版本信息来源于nvram的 hd_version,fw_version,product,sw_version,et0macaddr;
2、wifi信息来源于bsd_role,frequency,ure_disable,w10_bss_enabled,w10_ssid,w10_wpa_psk,vis_ssid_pwd,screen_2G5G_pwd_en等;
3、转圈圈页面的信息来源于 pingcheck,wan_txbytes,wan_rxbytes;
4、连接信息通过指令et port_status all,通过返回的内容判断(up /down)是连接还是断开;
5、天气信息是通过weather_code,weather_temp等 信息,通过weather进程取到信息会保存于nvram;
6、最后一页的网络连接信息是通过读取/tmp/udhcpd%d.leases,(JSON)通过解析得到MAC、IP等 信息,其中的图标是通过读取
/etc/out/vendor.json的MAC地址范围来判断是属于哪家厂商的,并显示相应的图标
目前进展就是这样,思路、数据来源和解决方案都有了,接下来就靠大神去编译实现了
若有不明白的地方,可以跟我联系。(PS ,即日起休假,欢迎加Q节后联系)
-----------------以下是串口的参数 设置
----------------------------------------
if ( tcgetattr(v1, &termios_p) )
{
perror("uart_init");
}
else
{
cfsetispeed(&termios_p, 0x1002u);
cfsetospeed(&termios_p, 0x1002u);
termios_p.c_lflag &= 0xFFFFFFE4;
termios_p.c_iflag &= 0xFFFFE2AF;
termios_p.c_cflag = (termios_p.c_cflag | 0x8B0) & 0x7FFFFEBF;
termios_p.c_oflag &= 0xFFFFFFF2;
termios_p.c_cc[5] = 0;
termios_p.c_cc[6] = 0;
tcflush(v1, 0);
result = tcsetattr(v1, 0, &termios_p);
if ( !result )
return result;
perror((const char *)&unk_103E0);
}
-----------------------------------------
论坛里面不缺各个高手,出了梅林、混血梅林、lede、官改等各个固件,但每个固件均存在屏幕和天气不能完美的问题。
官改固件由于内核问题,缺少了tun.ko,virtual**穿透(p p t p l2tp gre协议)的支持。并且界面功能稍简单
混血梅林软件中心存在冲突,lostlonger大侠的梅林、lede等固件屏幕不支持。
经过分析由于内核编译环境等原因,梅林的tun.ko等内核模块不能在官改中加载
官改的phi_speed、weather、nhmi等程序本人未测试在梅林等固件中的支持
但从大侠们的固件均不支持,应该是程序存在兼容问题
我是个逆向分析人员,愿意给大侠们提供些帮助。
若有必要,可以愿意从提供官方屏幕相关程序,分析出源代码,提供给众大侠们,出个完美 的修改固件
若有意向的大侠,可以Q33515932联系我,以便进行下一步工作
----------------------------------------------------------------------------------------------------------------------------------
经过目前初步 粗略的分析 ,
1、uhmi维护了一个全局0x1A84大小的结构体。通过uhmi_init进行初始化。uhmi_init调用的函数有InitObj,GetMcuVer(),hotPlugDetected(8,1),hotPlugDetected(7,0)。
2、uhmi_thread_create(),创建三个线程函数,分别为uhmi_pthread_rx(),uhmi_pthread_tx(),uhmi_pthread_event(),rx线程和tx线程,有调用一个处理函数,我猜测这也是梅林有些固件数据 不准确的原因之一;event()线程,接收共享内存的指令进行uhmi进程间通信。
3、uhmi似乎留有bootloader相关的代码 ,体现 在bootloader_task()。
4、 uhmi_application(),初步判断应该是关键的界面显示 的相关处理过程。
5、之前梅林混血的作者有提到mcuVER的版本 ,这个是读取/mcu/目录 下的app.X.X.XX.hex,得到minor、major、swver的值。
6、天气是调用weather程序进行调用,天气列表是可以从https://phiclouds.phicomm.com/weather/city/list。用crul带上token即可提取,相关天气参数是放在nvram进行控制
通过阅读uhmi的相关代码,屏幕的交互很可能是通过nvram进行传递。 由于以前处理的不是linux平台,对于很多东西尚不清楚 ,请各路大神指导
-----------------------------------------------------------------------------------------------------------------------------------------
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|