关于编译 TWRP 时遇到的一些小问题

本文针对Android自编译小白常遇的lex与flex错误,详述了'exportLC_ALL=C'解决办法,分析了报错原因并提供三种理解。关键在于理解本地化设置对编译的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来就是小白,这些问题肯定对大家来说没有什么难度,但是对于无基础自编译 Android 的小白们来说,或许有些意义

在编译时遇到的问题总结一下

最最重要的一点!!!!!!!!!!!!!!

 repo init --depth=1 'xxxxxxxxx.xxxxxxxxxxxxx.xxx/xzxxx.git'
repo sync -c -f --no-tags --no-clone-bundle -j'nproc'

1. 遇到 
Lex: checkpolicy <= external/selinux/checkpolicy/policy_scan.l
flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data: ?? 'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' ???
make: *** [build/core/binary.mk:646: /home/keisuke/twrp/out/host/linux-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_scan.cpp] 已放弃 (核心已转储)
实际上编译之前加一句 “export LC_ALL=C” 就好。
网上搜到三个个解释
1> 在 Ubuntu18 上使用交叉编译工具,报这个错。研究之下发现,工具的绝对路径过长, ubuntu18 对其优化,修改路径,导致报错。
2> 用 “export LC_ALL=C” 来去除所有本地化的设置,让命令能正确执行
3> 添加 “export LC_ALL=C” 是去除本地C化,使得 Android 的编译工具与本地工具不冲突。
 

<think>我们正在处理用户的问题:“twrp无法识别同型号cpu解决方案”。用户提到TWRP无法找到同型号CPU,这通常发生在尝试为特定设备编译或安装TWRP。根据引用内容,用户可能已经尝试过使用TWRP,但遇到了兼容性问题,甚至尝试了其他恢复模式如CWM(引用[2])。我们的目标是提供解决此问题的步骤。分析问题:1.TWRP官方可能没有为特定设备型号提供官方支持,特别是较新或较少见的设备。2.用户可能使用了错误的TWRP镜像(例如,针对不同硬件版本)。3.设备可能使用了非标准的启动方式或分区结构。解决方案:1.**检查官方支持**:首先,用户应访问TWRP官方网站(twrp.me)搜索设备型号。如果官方没有提供,可以查看XDA论坛等社区是否有非官方版本。2.**使用设备专用TWRP**:引用[2]提到用户转向使用CWM(ClockworkModRecovery),这表明TWRP可能不兼容。如果用户坚持使用TWRP,可以尝试寻找由社区开发者编译的版本。3.**手动编译TWRP**:如果社区没有现成版本,用户可以尝试自己编译TWRP。这需要一定的技术能力:-获取设备树(devicetree):需要找到或创建适合设备的设备树(如引用[3]中提到的设备树覆盖配置)。-配置编译环境:需要下载TWRP源代码,设置编译环境(如OmniROM或LineageOS的编译环境)。-编译:使用设备标识符进行编译。4.**使用通用镜像**:某些设备可以使用通用镜像(如针对特定芯片组,如高通、MTK等),但风险较高。5.**替代方案**:如果TWRP确实无法支持,可考虑其他恢复工具,如CWM(引用[2])或OrangeFoxRecovery。详细步骤(以手动编译为例):步骤1:准备编译环境-安装Ubuntu(推荐18.04或更高版本)。-安装依赖包:```bashsudoapt-getupdatesudoapt-getinstallopenjdk-8-jdkgit-coregnupgflexbisongperfbuild-essentialzipcurlzlib1g-devgcc-multilibg++-multiliblibc6-dev-i386lib32ncurses5-devx11proto-core-devlibx11-devlib32z-devccachelibgl1-mesa-devlibxml2-utilsxsltprocunzip```-安装Repo工具:```bashmkdir~/bincurlhttps://storage.googleapis.com/git-repo-downloads/repo>~/bin/repochmoda+x~/bin/repo```步骤2:获取TWRP源代码```bashmkdir~/twrpcd~/twrprepoinit-uhttps://github.com/omnirom/android.git-bandroid-9.0--depth=1reposync-j$(nproc)-c```步骤3:获取设备树、内核和厂商树-设备树(devicetree):需要找到与设备匹配的设备树。通常位于类似`device/<厂商>/<设备型号>`的路径。如果找不到,可能需要自行创建或修改(如引用[3]中修改设备树覆盖配置)。-内核(kernel):需要设备的内核源代码。-厂商树(vendortree):包含设备专有的二进制文件和配置。步骤4:配置编译-在twrp目录下执行:```bashsourcebuild/envsetup.shlunchomni_<设备型号>-eng```-如果设备型号不在列表中,需要检查设备树是否放置正确。步骤5:编译```bashmakerecoveryimage-j$(nproc)```-编译完成后,输出文件在`out/target/product/<设备型号>/recovery.img`。步骤6:刷入-使用fastboot刷入:```bashfastbootflashrecoveryrecovery.img```注意事项:-自行编译风险较高,可能导致设备无法启动(变砖)。-务必确保设备树、内核和厂商树与设备完全匹配。如果用户无法完成编译,建议:-在XDA论坛等社区寻求帮助。-使用其他恢复工具(如CWM)。引用说明:-引用[2]提到用户使用CWM成功,说明TWRP不是唯一选择。-引用[3]展示了设备树修改的示例,这可能是编译过程中需要调整的部分。相关问题:1.如何为安卓设备编译自定义内核?2.如何从零开始创建TWRP设备树?3.刷入错误恢复镜像导致设备变砖怎么办?最终回答应清晰、分步骤,并提醒用户操作风险。</think>### TWRP无法识别同型号CPU的解决方案 当TWRP无法识别同型号CPU,通常是由于设备树(Device Tree)配置不匹配或分区映射错误导致。以下是逐步解决方案: #### 步骤1:检查设备树覆盖配置 核心问题是设备树未正确描述CPU硬件。需修改设备树文件(.dts): ```dts &cpu0 { arm-supply = <&reg_arm>; soc-supply = <&reg_soc>; compatible = "arm,cortex-aXX"; // 替换为实际CPU型号 }; ``` 1. 确认CPU型号(如`arm,cortex-a76`) 2. 在设备树中明确指定`compatible`属性 3. 同步更新电源管理配置(`arm-supply`/`soc-supply`) [^3] #### 步骤2:修复分区映射 若CPU识别正常但分区挂载失败: ```bash # 在TWRP终端执行 mount /dev/block/by-name/system /system mount /dev/block/by-name/vendor /vendor ``` 1. 使用`ls /dev/block/by-name`查看分区表 2. 检查`/etc/recovery.fstab`中的分区映射 3. 确保分区名称与硬件匹配(如`mmcblk0p1`) #### 步骤3:重建TWRP镜像 1. 获取设备专属设备树(如`imx6q-sabresd.dts`) 2. 编译强制覆盖默认配置: ```makefile BOARD_KERNEL_DEVICETREE := device_override.dtb ``` 3. 添加CPU微架构支持: ```dts &gpc { fsl,ldo-bypass = <0>; // 禁用LDO旁路 fsl,wdog-reset = <1>; // 启用看门狗复位 }; ``` [^3] #### 步骤4:使用替代恢复工具 若TWRP持续失败: 1. 尝试ClockworkMod(CWM): - 通过ROM Manager安装(引用[2]) - 刷入兼容性更强的通用镜像 2. 使用厂商官方恢复工具 #### 步骤5:验证硬件兼容性 1. 检查芯片组文档(如NXP i.MX6系列) 2. 确认CPU指令集支持: ```bash cat /proc/cpuinfo | grep Features ``` 3. 测试内存地址映射: ```bash busybox devmem 0x020c8000 32 # 读取CPU寄存器 ``` > **重要提示**:操作前必须备份重要数据!错误的分区操作可能导致设备变砖。修改设备树需Linux环境和交叉编译工具链。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值