为你的手机内核开启docker支持

您所在的位置:网站首页 手机刷内核需要root吗 为你的手机内核开启docker支持

为你的手机内核开启docker支持

2024-07-15 00:13:18| 来源: 网络整理| 查看: 265

注意:文章所述方法仅适用于非GKI或qgki的设备,新设备咱也不会搞。文章内所述手机为arm64架构,上古时期的32位架构请自行修改。注:pixel系列设备请换用repo工具以及官方构建工具并使用ThinLTO(在内存小于32G的设备上)。好了让我们开始吧喵!

首要前提: 手机能够解锁bl并获取root权限 手机内核开源,尽量是有大佬维护源码的 拥有一定Linux基础

如果设备或个人不满足以上条件者请自行退出喵!

前期准备:

你可能需要准备如下内容:

Linux系统环境(理论上手机电脑均可,电脑最佳) 熟练使用搜索工具 git和make以及代码编辑工具的使用 基本了解cpu架构差异

这些内容咱是不会教你的,毕竟这不是文章重点喵唔……当然最好有个脑子,可惜咱没有呜QAQ………

正式操作:0x0001 root手机,不必多说0x0002 获取手机代号和cpu代号

这一步请通过搜索工具进行。如小米10ultra代号cas,cpu代号SM8250。

0x0003 查找内核源码

可以去官方仓库,当然建议用第三方的,因为官方内核很多时候还不如第三方好跑呢。查找方式:官方仓库查找设备代号或github搜索关键字kernel + 设备代号或者反过来或者搜索cpu代号+手机厂商+kernel,各种组合和命名方式都试过了还找不到的话,多半是没有了,洗洗睡吧。

0x0004 编译工具选择

手机执行:

1cat /proc/version

示例输出:

1Linux version 4.19.260-Moe-hacker-g0bb1c026ee65-dirty (root@localhost) (Ubuntu clang version 14.0.6-2, GNU ld (GNU Binutils for Ubuntu) 2.39) #3 SMP PREEMPT Sun Oct 2 10:48:46 CST 2022

当然咱已经完成内核编译了,仔细观察会发现内核由clang-14编译。对应llvm版本也为14。于是你确认了要用的编译器版本。如果内核是由谷歌的安卓开发工具构建,请自行查找并下载。小技巧:使用原系统内核使用的编译器版本可以降低出错概率。

0x0005 源码获取:

使用git clone项目仓库,如果是官方仓库需要加入-b选项克隆机型独立的分支。国内用户访问github不方便的可以换用ssh协议(git clone [email protected]:用户or组织名称/代码仓库)或者换用镜像站kgithub.com或ghproxy.com等。

0x0006 依赖安装:

主要依赖有:clang/gcc构建工具,跨架构binutils工具(跨架构编译需要),make,python,libssl-dev,build-essential,bc,bison,flex,unzip,libssl-dev,ca-certificates,xz-utils,mkbootimg,cpio,device-tree-compiler,请自行安装,否则编译会出错。编译出现command not found大概率是工具没有安装。debian系的系统解决文件缺失推荐apt-file search命令。

0x0007 尝试编译:

进入项目目录

1ls arch/arm64/configs

康一康有没有你的机型代号相关的文件,一般是[机型代号]_defcofig,也有带stock或者perf的命名,选一个就行。没有的话也不要着急,再看一下vendor目录:

1ls arch/arm64/configs/vendor

桥豆麻袋,还是找不到啊!!!github去arch/arm64/configs目录下看看提交记录,最近变更最多的大概率是。比如nothing的三方内核源码配置文件是vendor/lahaina-qgki_defconfig。或者根据版本号,三方内核配置中CONFIG_LOCALVERSION值大概率不是默认。然后,呐,现在要开始编译了哦喵!

123export ARCH=arm64export SUBARCH=arm64make O=out CC=[clang/gcc-版本号] (vendor/)xxxxxx_defconfig [可选参数]

可选参数详解:

12345678910#非电脑跨架构编译省略ARCH=arm64CROSS_COMPILE=aarch64-linux-gnu- CROSS_COMPILE_ARM32=arm-linux-gnueabi-#基本没用到过,按需开启AR=llvm-ar-版本号OBJDUMP=llvm-objdump-版本号STRIP=llvm-strip-版本号NM=llvm-nm-版本号OBJCOPY=llvm-objcopy-版本号LD=ld.lld-版本号

以上可选参数可用于报错处理以及确保llvm工具版本与clang一致,酌情加入。然后,其他参数不变,删掉(vendor/)xxxxxx_defconfig这个,改为-j$(nproc),开始构建内核。

0x0008 基本异常处理:

找不到头文件:安装相应库。找不到命令:安装相应软件。-Werror,xxxxxxx:找报错的文件相应Makefile,把含有-werror的都删了(每一层目录都有Makefile,建议从报错文件那一层往父目录找),或者make选项改为CC=”[clang/gcc]-版本号 -w”未定义函数或其他未定义:查找函数定义开启所依赖的配置项一并开启,可能在头文件或kconfig/makefile中。最后一步生成vmlinux时报错大概率是因为配置没开全。

0x0009 玄学异常:

在编译pixel3内核时,咱删了一行源码成功生成内核,开机功能一切正常。在编译小米10Ultra内核时一行源码少了一个地址符&,手动添加后一切正常。遇到这种不可预知的玄学异常建议动用搜索工具,或者学会放弃。引用当年沨鸾在酷安的原文:会修的就修,修不了换源码,换编译器版本,手机电脑换着试,最后放弃就好了。如果你跨过了首次编译这道坎,那么恭喜,你离成功不远了喵!

0x000A 功能开启:

下载check-config.sh

1wget https://github.com/moby/moby/raw/master/contrib/check-config.sh

网络不好请使用kgithub镜像站,目前可用。然后:

1sh check-config.sh out/.config|grep missing|sed -E 's/\-//g'|sed -E "s/ //g"|sed -r 's/://'|sed -E "s/missing/=y/"

咱甚至帮大家写好了字符替换。于是你得到了内核未开启的的配置列表。

1234CONFIG_AUFS_FS=y/dev/zfs=yzfscommand=yzpoolcommand=y

以上这几个输出不用管,删了就好,这几个的源码实现均未并入linux4.x主分支。然后把缺失的config加入你的(vendor/)xxxxxx_defconfig中,并将里面带有is not set的字样全部删除,执行编译第一步,再次生成配置。这一步你可以更改local version值为你的名字或者你喜欢的单词。再次执行扫描命令,获取缺失项目。使用make menuconfig命令,按下/键搜索缺失项目的依赖与冲突,依赖添加开启选项,冲突关闭。注意:menuconfig配置默认不带CONFIG_头,需要手动添加。然后,将配置中所有=m替换为=y,目的是将内核模块built-in。请确认最终生成out/.config中不包含=m字样。

0x000B 再次编译:

请自行repeat上文所述编译步骤。生成文件在out/arch/arm64/boot/目录下,大部分命名为Image.xxx-dtb,但是注意,少数机型只能刷入Image.xx格式镜像。

0x000C 验证config:

scripts目录下有个extract-ikconfig,用它把Image的配置扫出来输出到一个文件,check-config.sh除上文所讲述的无法开启的配置全绿即可。如果遇到内核config和out/.config内容不一致,查找kernel/Makefile,找到$(obj)/config_data.gz:xxxxxxxxxx,把xxxxxxxx改成$(obj)/config_data

0x000D 刷入:

下载刷入工具:

1git clone https://github.com/osm0sis/AnyKernel3

编辑anykernel.sh,修改如下内容:

123device.name1=设备代号 block=/dev/block/bootdevice/by-name/boot; is_slot_device=如果是ab架构分区设备填1,否则填0

将Image.xxx-dtb复制到anykernel根目录下,打包anykernel根目录,twrp刷入。注意,少数机型只能刷入Image.xx格式镜像。于是你就到了最终环节:开机,验证。教程完毕,相信你也可以在手机上运行自己的内核了喵!

基本报错处理:

如果报错如下:

12345docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:326: applying cgroup configuration for process caused: mountpoint for devices not found: unknown.

那么您需要手动挂载cgroupfs(root权限执行):

123mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroupmkdir -p /sys/fs/cgroup/devicesmount -t cgroup -o devices cgroup /sys/fs/cgroup/devices

然后,重启docker即可。咱自己没有遇到过的两个异常解决方式:添加–iptables=false参数设置DOCKER_RAMDISK=true容器中没网可通过在容器中执行以下脚本解决root用户联网问题:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111# Fix networking and other permission issues on Android.# From Tmoe: https://github.com/2moe/Tmoegroupadd aid_system -g 1000 || groupadd aid_system -g 1074groupadd aid_radio -g 1001groupadd aid_bluetooth -g 1002groupadd aid_graphics -g 1003groupadd aid_input -g 1004groupadd aid_audio -g 1005groupadd aid_camera -g 1006groupadd aid_log -g 1007groupadd aid_compass -g 1008groupadd aid_mount -g 1009groupadd aid_wifi -g 1010groupadd aid_adb -g 1011groupadd aid_install -g 1012groupadd aid_media -g 1013groupadd aid_dhcp -g 1014groupadd aid_sdcard_rw -g 1015groupadd aid_vpn -g 1016groupadd aid_keystore -g 1017groupadd aid_usb -g 1018groupadd aid_drm -g 1019groupadd aid_mdnsr -g 1020groupadd aid_gps -g 1021groupadd aid_media_rw -g 1023groupadd aid_mtp -g 1024groupadd aid_drmrpc -g 1026groupadd aid_nfc -g 1027groupadd aid_sdcard_r -g 1028groupadd aid_clat -g 1029groupadd aid_loop_radio -g 1030groupadd aid_media_drm -g 1031groupadd aid_package_info -g 1032groupadd aid_sdcard_pics -g 1033groupadd aid_sdcard_av -g 1034groupadd aid_sdcard_all -g 1035groupadd aid_logd -g 1036groupadd aid_shared_relro -g 1037groupadd aid_dbus -g 1038groupadd aid_tlsdate -g 1039groupadd aid_media_ex -g 1040groupadd aid_audioserver -g 1041groupadd aid_metrics_coll -g 1042groupadd aid_metricsd -g 1043groupadd aid_webserv -g 1044groupadd aid_debuggerd -g 1045groupadd aid_media_codec -g 1046groupadd aid_cameraserver -g 1047groupadd aid_firewall -g 1048groupadd aid_trunks -g 1049groupadd aid_nvram -g 1050groupadd aid_dns -g 1051groupadd aid_dns_tether -g 1052groupadd aid_webview_zygote -g 1053groupadd aid_vehicle_network -g 1054groupadd aid_media_audio -g 1055groupadd aid_media_video -g 1056groupadd aid_media_image -g 1057groupadd aid_tombstoned -g 1058groupadd aid_media_obb -g 1059groupadd aid_ese -g 1060groupadd aid_ota_update -g 1061groupadd aid_automotive_evs -g 1062groupadd aid_lowpan -g 1063groupadd aid_hsm -g 1064groupadd aid_reserved_disk -g 1065groupadd aid_statsd -g 1066groupadd aid_incidentd -g 1067groupadd aid_secure_element -g 1068groupadd aid_lmkd -g 1069groupadd aid_llkd -g 1070groupadd aid_iorapd -g 1071groupadd aid_gpu_service -g 1072groupadd aid_network_stack -g 1073groupadd aid_shell -g 2000groupadd aid_cache -g 2001groupadd aid_diag -g 2002groupadd aid_oem_reserved_start -g 2900groupadd aid_oem_reserved_end -g 2999groupadd aid_net_bt_admin -g 3001groupadd aid_net_bt -g 3002groupadd aid_inet -g 3003groupadd aid_net_raw -g 3004groupadd aid_net_admin -g 3005groupadd aid_net_bw_stats -g 3006groupadd aid_net_bw_acct -g 3007groupadd aid_readproc -g 3009groupadd aid_wakelock -g 3010groupadd aid_uhid -g 3011groupadd aid_everybody -g 9997groupadd aid_misc -g 9998groupadd aid_nobody -g 9999groupadd aid_app_start -g 10000groupadd aid_app_end -g 19999groupadd aid_cache_gid_start -g 20000groupadd aid_cache_gid_end -g 29999groupadd aid_ext_gid_start -g 30000groupadd aid_ext_gid_end -g 39999groupadd aid_ext_cache_gid_start -g 40000groupadd aid_ext_cache_gid_end -g 49999groupadd aid_shared_gid_start -g 50000groupadd aid_shared_gid_end -g 59999groupadd aid_isolated_start -g 99000groupadd aid_isolated_end -g 99999groupadd aid_user_offset -g 100000# Fix root user's permissions.usermod -a -G aid_system,aid_radio,aid_bluetooth,aid_graphics,aid_input,aid_audio,aid_camera,aid_log,aid_compass,aid_mount,aid_wifi,aid_adb,aid_install,aid_media,aid_dhcp,aid_sdcard_rw,aid_vpn,aid_keystore,aid_usb,aid_drm,aid_mdnsr,aid_gps,aid_media_rw,aid_mtp,aid_drmrpc,aid_nfc,aid_sdcard_r,aid_clat,aid_loop_radio,aid_media_drm,aid_package_info,aid_sdcard_pics,aid_sdcard_av,aid_sdcard_all,aid_logd,aid_shared_relro,aid_dbus,aid_tlsdate,aid_media_ex,aid_audioserver,aid_metrics_coll,aid_metricsd,aid_webserv,aid_debuggerd,aid_media_codec,aid_cameraserver,aid_firewall,aid_trunks,aid_nvram,aid_dns,aid_dns_tether,aid_webview_zygote,aid_vehicle_network,aid_media_audio,aid_media_video,aid_media_image,aid_tombstoned,aid_media_obb,aid_ese,aid_ota_update,aid_automotive_evs,aid_lowpan,aid_hsm,aid_reserved_disk,aid_statsd,aid_incidentd,aid_secure_element,aid_lmkd,aid_llkd,aid_iorapd,aid_gpu_service,aid_network_stack,aid_shell,aid_cache,aid_diag,aid_oem_reserved_start,aid_oem_reserved_end,aid_net_bt_admin,aid_net_bt,aid_inet,aid_net_raw,aid_net_admin,aid_net_bw_stats,aid_net_bw_acct,aid_readproc,aid_wakelock,aid_uhid,aid_everybody,aid_misc,aid_nobody,aid_app_start,aid_app_end,aid_cache_gid_start,aid_cache_gid_end,aid_ext_gid_start,aid_ext_gid_end,aid_ext_cache_gid_start,aid_ext_cache_gid_end,aid_shared_gid_start,aid_shared_gid_end,aid_isolated_start,aid_isolated_end,aid_user_offset root# Fix apt.usermod -g aid_inet _apt 2>/dev/null# Fix gentoo emerge.usermod -a -G aid_inet,aid_net_raw portage 2>/dev/null 后记:

没有后记,散会!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭