深度实战指南:3大场景解锁AMD SMUDebugTool性能调优技巧
2026/4/17 17:47:53
修改如下:
diff--git a/makepac.sh b/makepac.sh index b0b0dea86b4..6f01f22e438100755---a/makepac.sh+++b/makepac.sh @@-140,7+140,7@@if[-e"$code_path/incar.ini"];then echo" build_version : ${build_version}"if[["${build_variant}"=="user"&&"${build_version}"=="gms"]];thenif[["$project_name"=~"ums312"]];then-BOOT="boot-gki.img"+BOOT="boot.img"changeconfigfile"BOOT"fielsediff--git a/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c b/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c index2a37f9f3dba..235270f58cc100644---a/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c+++b/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c @@-11,6+11,109@@#include<linux/compat.h>#include"internal.h"+//add by lyw+#include<linux/path.h>+#include<linux/device-mapper.h>+#include<linux/string.h>+#include<linux/kernel.h>+//add end++#define INCAR_TARGET_SIZE128++/** + * get_dm_name_for_mountpoint - 获取挂载点对应的设备映射名称 + * add by lyw + * + * @mountpoint: 挂载点路径(如 "/data") + * @dm_name: 输出参数,返回设备名称(需调用方释放内存) + * + * 返回值:0 成功,负数错误码 + */+staticintget_dm_name_for_mountpoint(constchar*mountpoint,char**dm_name)+{+structpathpath;+structmapped_device*md=NULL;+intret=0;+constchar*name=NULL;+// 初始化输出参数+*dm_name=NULL;+// 1. 解析挂载点路径+if(kern_path(mountpoint,LOOKUP_FOLLOW,&path)){+ret=-ENOENT;// 路径不存在+gotoout;+}+// 2. 检查是否为设备映射设备(主设备号 253)+// if (MAJOR(path.dentry->d_sb->s_dev) != DM_MAJOR) {+// ret = -ENODEV; // 不是DM设备+// goto out_path;+// }+// 3. 获取设备映射对象+md=dm_get_md(path.dentry->d_sb->s_dev);+if(!md){+ret=-ENODEV;+gotoout_path;+}+// 4. 复制设备名称+name=dm_device_name(md);+*dm_name=kstrdup(name,GFP_KERNEL);+if(!*dm_name){+ret=-ENOMEM;// 内存不足+gotoout_md;+}+out_md:+dm_put(md);// 释放设备映射引用+out_path:+path_put(&path);// 释放路径引用+out:+returnret;+}++/** + * 字符串转数字 + * add by lyw + * + * @param str + */+staticintsafe_atoi(char*str){+intval;+intret=kstrtoint(str,10,&val);// 十进制转换+if(ret<0){+// 处理错误: -EINVAL(无效输入) 或 -ERANGE(溢出)+return-1;+}+returnval;// 返回有效整数+}++/** + * 提取dm-51中-后面的数字 + * 提取254:51中:后面的数字 + * add by lyw + * + * @param str aaa + * @return 提取成功返回正确值,不成功返回负数 + */+staticintextract_number(char*str){+// 查找 '-' 字符的位置+char*dash_pos;++//判断str这个字符串是否包含字符-+if(strstr(str,"-")!=NULL){+dash_pos=strchr(str,'-');+}elseif(strstr(str,":")!=NULL){+dash_pos=strchr(str,':');+}else{+return-2;+}+// 如果找不到 '-' 或 '-' 在字符串末尾+if(!dash_pos||!*(dash_pos+1)){+//fprintf(stderr, "未找到有效数字\n");+return-1;// 错误码+}+// 移动到 '-' 后的第一个字符+dash_pos++;+// 提取数字部分并转换为整数+returnsafe_atoi(dash_pos);+}+staticintflags_by_mnt(intmnt_flags){intflags=0;@@-56,6+159,19@@staticintstatfs_by_dentry(structdentry*dentry,structkstatfs*buf){intretval;+intmultiple=1;+intbk_size=0;+inttemp_size=0;+intclosest_size=0;+inthighestBit=0;++//add by lyw+char*dm_name=NULL;+intret;+intvalue1;+intvalue2;+//add end+if(!dentry->d_sb->s_op->statfs)return-ENOSYS;@@-64,6+180,63@@staticintstatfs_by_dentry(structdentry*dentry,structkstatfs*buf)if(retval)returnretval;retval=dentry->d_sb->s_op->statfs(dentry,buf);++//add by lyw+//adb shell "df -h /data"+//OTA升级前: /dev/block/dm-51+//-->/dev/block/dm-51 103G 2.6G 100G 3% /data+//-->/dev/fuse 59G 1.0M 59G 1% /storage/E913-1703+//OTA升级后重启: /dev/block/dm-72+//OTA升级后恢复出厂设置(多次恢复数字不变): /dev/block/dm-58+//新判断条件:分区大小大于112GB,且包含dm-,排除/storage/emulated+//printk("**lyw-128G current s_id is /data device s_id: %s\n", dentry->d_sb->s_id);+//strncmp第三个参数为要比较的最大字符数,如果相等则返回0+if(!strncmp(dentry->d_sb->s_id,"dm-",3)){//如果路径包含dm-+/** + * 50GB转换成16进制为0xC80000000 + * long value = 50 * 1024 * 1024 * 1024L; + * String hexString = Long.toHexString(value); + * System.out.println("hex = " + hexString);//hex = c80000000 + */+if(0xC80000000<=((buf->f_blocks)*(buf->f_bsize))){//并且容量大于50GB+// 调用查询函数+ret=get_dm_name_for_mountpoint("/data",&dm_name);//精确查询/data路径对应的dm_name,规避sdcard也作假问题+if(ret){+//printk("**lyw-128G Query failed: %d\n", ret);+}else{+//**lyw-128G Query success /data dm_name: 254:51+//printk("**lyw-128G Query success /data dm_name: %s\n", dm_name);+// 使用后必须释放内存+kfree(dm_name);++//方法1+value1=extract_number(dm_name);+value2=extract_number(dentry->d_sb->s_id);+if(value1>0&&value2>0&&value1==value2){+//**lyw-128G current s_id is /data device: dm-51+//printk("**lyw-128G current s_id is /data device s_id: %s\n", dentry->d_sb->s_id);++//----------原作假逻辑--------------+bk_size=((buf->f_blocks)*(buf->f_bsize))/1024/1024/1024;+temp_size=bk_size;+while(temp_size>0){+temp_size=temp_size>>1;+highestBit++;+}+closest_size=1<<highestBit;+if(closest_size<INCAR_TARGET_SIZE){+multiple=INCAR_TARGET_SIZE/closest_size;+}+buf->f_blocks=buf->f_blocks*multiple;+buf->f_bfree=buf->f_bfree*multiple;+buf->f_bavail=buf->f_bavail*multiple;+//----------原作假逻辑--------------+}+}+}+}+//add end+if(retval==0&&buf->f_frsize==0)buf->f_frsize=buf->f_bsize;returnretval;diff--git a/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c b/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c index fdb334ad4b9..994922e02e9100644---a/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c+++b/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c @@-6181,13+6181,13@@longsi_mem_available(void)if(available<0)available=0;-returnavailable;+returnavailable*2;}EXPORT_SYMBOL_GPL(si_mem_available);voidsi_meminfo(structsysinfo*val){-val->totalram=totalram_pages();+val->totalram=totalram_pages()*2;//运行内存作假:4GB-->8GBval->sharedram=global_node_page_state(NR_SHMEM);val->freeram=global_zone_page_state(NR_FREE_PAGES);val->bufferram=nr_blockdev_pages();diff--git a/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini b/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini index900c1c49eaa..720a78f2356100755---a/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini+++b/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini @@-468,7+468,7@@ DSP_LTE_CDMA=1@./vendor/sprd/release/unisoc_bin/4g_modem_22b/sharkl5_c2k/sharkl5 DFS=1@./bsp/sensorhub/public/build/sharkl5_cm4/sharkl5_cm4.bin Modem_GNSS=1@./vendor/sprd/release/unisoc_bin/gnss_20b_new/marlin3lite/marlin3lite_gnss_cm4_builddir/gnssmodem.bin Modem_WCN=1@./vendor/sprd/release/unisoc_bin/marlin3_20a/sc2355_marlin3_lite_ab_builddir/EXEC_KERNEL_IMAGE.bin-BOOT=1@./out/target/product/ums312_2h10/boot-gki.img+BOOT=1@./out/target/product/ums312_2h10/boot.img DTBO=1@./out/target/product/ums312_2h10/dtbo.img Super=1@./out/target/product/ums312_2h10/super.img UserData=1@./out/target/product/ums312_2h10/userdata.img可能会涉及到的几个修改文件:
sys\packages\apps\Settings\src\com\android\settings\deviceinfo\TopLevelStoragePreferenceController.java sys\frameworks\base\packages\SettingsLib\src\com\android\settingslib\deviceinfo\PrivateStorageInfo.java sys\frameworks\base\packages\SettingsLib\src\com\android\settingslib\deviceinfo\StorageManagerVolumeProvider.java sys\packages\apps\Settings\src\com\android\settings\deviceinfo\storage\StorageUsageProgressBarPreferenceController.java sys\frameworks\base\core\java\android\app\usage\StorageStatsManager.java sys\frameworks\base\services\usage\java\com\android\server\usage\StorageStatsService.java sys\frameworks\base\core\java\android\os\storage\StorageManager.java sys\frameworks\base\services\core\java\com\android\server\StorageManagerService.java sys\frameworks\base\core\java\android\os\StatFs.javaStorageUsageProgressBarPreferenceController.java-->longtotalBytes=mStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid());StorageStatsManager.java-->returnmService.getTotalBytes(convert(storageUuid),mContext.getOpPackageName());StorageStatsService.java-->场景一(小于等于512GB):finallongroundedUserspaceBytes=mStorage.getPrimaryStorageSize();-->场景二(大于512GB):finallongtotalBytes=mStorage.getInternalStorageBlockDeviceSize();StorageManager.java-->场景一(小于等于512GB):returnFileUtils.roundStorageSize(Environment.getDataDirectory().getTotalSpace()+Environment.getRootDirectory().getTotalSpace());-->场景二(大于512GB):returnmStorageManager.getInternalStorageBlockDeviceSize();StorageManagerService.java