discuz 做论坛与网站,asp.net mvc5 网站开发实践,学校网站建设的要点,wordpress账号创建0. 版本说明
本文提供了OPPO手机r9s的内核编译方法#xff0c;并开机支持docker。用的是开源lineage14.1的rom。
我这边基于开源lineage14.1#xff0c;打了一个docker内核编译镜像(17380582683/r9s)#xff0c;大家可以在容器里#xff0c;手动打出完整的rom包zip文件。…0. 版本说明
本文提供了OPPO手机r9s的内核编译方法并开机支持docker。用的是开源lineage14.1的rom。
我这边基于开源lineage14.1打了一个docker内核编译镜像(17380582683/r9s)大家可以在容器里手动打出完整的rom包zip文件。
背景网上找了一圈好多只提供了内核源码但尝试了一下总是编译出错。少有能编译出来的刷上手机里也没能正常开机。好在最终还是找到了一个可用的版本。
oppo r9s刷机资料1https://pan.baidu.com/s/1Mik8slkXpkKOctnCI5n9xg?pwd56e9 oppo r9s刷机资料2https://pan.huang1111.cn/s/b6QaHY?path/ 成品rom卡刷包github请给个Star谢谢https://gitub.com/hengwu0/lineage14.1-oppo-r9s-docker-enabled/releases/download/v1.0.0/lineage-14.1-20240221-UNOFFICIAL-r9s.zip
1. 环境准备
需要一台磁盘容量至少80G内存16G的x64机器然后安装好dockerd。
2. 拉取docker容器
拉取命令docker pull 17380582683/r9s 拉取大小15.3GB解压镜像后大小27.8GB 镜像id2e0246dfe168
3. 启动docker容器然后进入容器 ~:/ docker run -itd --name r9s 17380582683/r9s bash
WARNING: The requested images platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
7a74104e517e3355429f34965ca0c130a2ed8622b80ccf608db1ad7b1e46a244
~:/ docker exec -it r9s bash 上面的warning可以直接忽略。是因为我的镜像就是在r9s手机搭的环境里上传的所以把它认为是一个arm64平台的镜像。其实这个镜像只能在x64机器上跑。
4. 修改内核支持docker
现在容器中的内核已经是修改过了支持docker的版本。我的修改内容记录如下 diff --git a/arch/arm64/configs/r9s_defconfig b/arch/arm64/configs/r9s_defconfig
index 552b8313944..58898b6ea44 100644
--- a/arch/arm64/configs/r9s_defconfigb/arch/arm64/configs/r9s_defconfig-1,4 1,88
-CONFIG_LOCALVERSION-Jerry
CONFIG_NAMESPACESy
CONFIG_NET_NSy
CONFIG_PID_NSy
CONFIG_IPC_NSy
CONFIG_UTS_NSy
CONFIG_CGROUPSy
CONFIG_CGROUP_PIDSy
CONFIG_CGROUP_CPUACCTy
CONFIG_CGROUP_DEVICEy
CONFIG_CGROUP_FREEZERy
CONFIG_CGROUP_SCHEDy
CONFIG_CPUSETSy
CONFIG_MEMCGy
CONFIG_KEYSy
CONFIG_VETHy
CONFIG_BRIDGEy
CONFIG_BRIDGE_NETFILTERy
CONFIG_IP_NF_FILTERy
CONFIG_IP_NF_TARGET_MASQUERADEy
CONFIG_NETFILTER_XT_MATCH_ADDRTYPEy
CONFIG_NETFILTER_XT_MATCH_CONNTRACKy
CONFIG_NETFILTER_XT_MATCH_IPVSy
CONFIG_NETFILTER_XT_MATCH_BPFy
CONFIG_NETFILTER_XT_MARKy
CONFIG_IP_NF_NATy
CONFIG_NF_NATy
CONFIG_POSIX_MQUEUEy
CONFIG_NF_NAT_IPV4y
CONFIG_NF_NAT_NEEDEDy
CONFIG_CGROUP_BPFy
CONFIG_USER_NSy
CONFIG_SECCOMPy
CONFIG_SECCOMP_FILTERy
CONFIG_CGROUP_PIDSy
CONFIG_MEMCG_SWAPy
CONFIG_MEMCG_SWAP_ENABLEDy
CONFIG_MEMCG_KMEMy
CONFIG_IOSCHED_CFQy
CONFIG_CFQ_GROUP_IOSCHEDy
CONFIG_BLK_CGROUPy
CONFIG_BLK_DEV_THROTTLINGy
CONFIG_CGROUP_PERFy
CONFIG_CGROUP_HUGETLBy
CONFIG_NET_CLS_CGROUPy
CONFIG_CGROUP_NET_PRIOy
CONFIG_CFS_BANDWIDTHy
CONFIG_FAIR_GROUP_SCHEDy
CONFIG_RT_GROUP_SCHEDy
CONFIG_IP_NF_TARGET_REDIRECTy
CONFIG_IP_VSy
CONFIG_IP_VS_NFCTy
CONFIG_IP_VS_PROTO_TCPy
CONFIG_IP_VS_PROTO_UDPy
CONFIG_IP_VS_RRy
CONFIG_SECURITY_SELINUXy
CONFIG_SECURITY_APPARMORy
CONFIG_EXT4_FSy
CONFIG_EXT4_FS_POSIX_ACLy
CONFIG_EXT4_FS_SECURITYy
CONFIG_BRIDGE_VLAN_FILTERINGy
CONFIG_IPVLANy
CONFIG_VXLANy CONFIG_BRIDGE_VLAN_FILTERINGy
CONFIG_CRYPTOy CONFIG_CRYPTO_AEADy
CONFIG_CRYPTO_GCMy
CONFIG_CRYPTO_SEQIVy
CONFIG_CRYPTO_GHASHy CONFIG_XFRMy
CONFIG_XFRM_USERy
CONFIG_XFRM_ALGOy
CONFIG_INET_ESPy
CONFIG_INET_XFRM_MODE_TRANSPORTy
CONFIG_IPVLANy
CONFIG_MACVLANy
CONFIG_DUMMYy
CONFIG_NF_NAT_FTPy
CONFIG_NF_CONNTRACK_FTPy
CONFIG_NF_NAT_TFTPy
CONFIG_NF_CONNTRACK_TFTPy
CONFIG_AUFS_FSy
CONFIG_BTRFS_FSy
CONFIG_BTRFS_FS_POSIX_ACLy
CONFIG_BLK_DEV_DMy
CONFIG_DM_THIN_PROVISIONINGy
CONFIG_OVERLAY_FSyCONFIG_LOCALVERSION-perfCONFIG_AUDITyCONFIG_NO_HZyCONFIG_HIGH_RES_TIMERSy-25,6 109,7 CONFIG_TASK_IO_ACCOUNTINGyCONFIG_OPPO_RTC_DET_SUPPORTy#endif /*VENDOR_EDIT*/CONFIG_CGROUPSy
CONFIG_CGROUP_PIDSyCONFIG_CGROUP_FREEZERyCONFIG_CGROUP_CPUACCTyCONFIG_RESOURCE_COUNTERSy-32,8 117,8 CONFIG_CGROUP_SCHEDyCONFIG_RT_GROUP_SCHEDyCONFIG_SCHED_HMPyCONFIG_NAMESPACESy
-# CONFIG_UTS_NS is not set
-# CONFIG_PID_NS is not set
CONFIG_UTS_NSy
CONFIG_PID_NSyCONFIG_BLK_DEV_INITRDyCONFIG_RD_BZIP2yCONFIG_RD_LZMAy-102,6 187,7 CONFIG_NET_KEYyCONFIG_INETyCONFIG_IP_ADVANCED_ROUTERyCONFIG_IP_MULTIPLE_TABLESy
CONFIG_DEVPTS_MULTIPLE_INSTANCESyCONFIG_IP_ROUTE_VERBOSEyCONFIG_IP_PNPyCONFIG_IP_PNP_DHCPy-176,6 262,25 CONFIG_NETFILTER_XT_MATCH_STATISTICyCONFIG_NETFILTER_XT_MATCH_STRINGyCONFIG_NETFILTER_XT_MATCH_TIMEyCONFIG_NETFILTER_XT_MATCH_U32y
CONFIG_NETFILTER_XT_SETy
CONFIG_IP_SETy
CONFIG_IP_SET_MAX256
CONFIG_IP_SET_BITMAP_IPy
CONFIG_IP_SET_BITMAP_IPMACy
CONFIG_IP_SET_BITMAP_PORTy
CONFIG_IP_SET_HASH_IPy
CONFIG_IP_SET_HASH_IPMARKy
CONFIG_IP_SET_HASH_IPPORTy
CONFIG_IP_SET_HASH_IPPORTIPy
CONFIG_IP_SET_HASH_IPPORTNETy
CONFIG_IP_SET_HASH_IPMACy
CONFIG_IP_SET_HASH_MACy
CONFIG_IP_SET_HASH_NETPORTNETy
CONFIG_IP_SET_HASH_NETy
CONFIG_IP_SET_HASH_NETNETy
CONFIG_IP_SET_HASH_NETPORTy
CONFIG_IP_SET_HASH_NETIFACEy
CONFIG_IP_SET_LIST_SETyCONFIG_NF_CONNTRACK_IPV4yCONFIG_IP_NF_IPTABLESyCONFIG_IP_NF_MATCH_AHy-628,6 733,8 CONFIG_MSM_TZ_LOGyCONFIG_EXT2_FSyCONFIG_EXT2_FS_XATTRyCONFIG_EXT3_FSy
CONFIG_EXT3_FS_SECURITYy
CONFIG_EXT3_FS_POSIX_ACLy# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not setCONFIG_EXT4_FSyCONFIG_EXT4_FS_SECURITYy-755,4 862,9 CONFIG_WLAN_FEATURE_11WyCONFIG_QCOM_VOWIFI_11RyCONFIG_ENABLE_LINUX_REGyCONFIG_WLAN_OFFLOAD_PACKETSy
-CONFIG_QCOM_TDLSy
\ No newline at end of file
CONFIG_QCOM_TDLSyCONFIG_IKCONFIG_PROCy
CONFIG_NAMESPACESy
CONFIG_PID_NSy
CONFIG_IPVLANy
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 7658abf4249..f17243e4ce3 100644
--- a/net/ipv4/af_inet.cb/net/ipv4/af_inet.c-124,7 124,8 static inline int current_has_network(void){
- return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);// return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);return 1;}#elsestatic inline int current_has_network(void)
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index da2ced93228..9f232ebeb55 100644
--- a/net/ipv6/af_inet6.cb/net/ipv6/af_inet6.c-69,7 69,8 static inline int current_has_network(void){
- return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);// return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);return 1;}#elsestatic inline int current_has_network(void)
diff --git a/net/netfilter/xt_qtaguid.c b/net/netfilter/xt_qtaguid.c
index ebf383466f7..0e00952dd1f 100644
--- a/net/netfilter/xt_qtaguid.cb/net/netfilter/xt_qtaguid.c-784,7 784,7 static int iface_stat_fmt_proc_show(struct seq_file *m, void *v){struct proc_iface_stat_fmt_info *p m-private;struct iface_stat *iface_entry;
- struct rtnl_link_stats64 dev_stats, *stats;struct rtnl_link_stats64 *stats;struct rtnl_link_stats64 no_dev_stats {0}; -792,13 792,8 static int iface_stat_fmt_proc_show(struct seq_file *m, void *v)current-pid, current-tgid, from_kuid(init_user_ns, current_fsuid()));iface_entry list_entry(v, struct iface_stat, list);stats no_dev_stats;- if (iface_entry-active) {
- stats dev_get_stats(iface_entry-net_dev,
- dev_stats);
- } else {
- stats no_dev_stats;
- }/** If the meaning of the data changes, then update the fmtX* string.5. 开始编译rom
进入容器内部执行如下命令进行内核编译。 cd /root/r9s;
./mybuild.sh;
# 等待编译成功 6. 刷入自己编译的rom
重启手机并进入twrp这个第三方recovery。然后选择刷入编译出的rom包zip文件即可。
7. 再次重新编译rom
因为一般修改rom会频繁的进行重编、刷机、测试、再重编的反复过程。所以想再次重编rom可以删除此目录即可清理掉之前的编译中间文件。命令为 rm -rf /root/r9s/out 8. root新编译出的rom
当前编译出来的rom已经自带root开启功能。只需开机后在“设置-开发者模式-root授权(应用和adb)”进行开启即可。
9. 已经改造好的支持docker功能的rom卡刷包
考虑到有些同学只需要最终结果包就行了也不会去折腾编内核。这边贴上我已改造好支持docker的rom包github请给个Star谢谢
https://github.com/hengwu0/lineage14.1-oppo-r9s-docker-enabled/releases/download/v1.0.0/lineage-14.1-20240221-UNOFFICIAL-r9s.zip
10. 手机上安装dockerd的步骤
这个请看下一篇文章安卓手机部署ubuntu的lxc容器并安装好dockerd
11. 鸣谢
感谢xiaocheng20,wuxianlin提供的源码wudilsr提供的刷机帮助工具。
12. 遗留问题
如果要拿手机当服务器来跑docker还需要解决电池的问题。因为既然是跑服务肯定是24小时接电源适配器的这样时间长了手机电池绝对遭不住。轻则鼓包漏气、后盖起翘重则起火就得不偿失了。本人可不承担请自行承担后果哦。
但古人有言祸福相依手机的电池并非只会带来坏处。如果我们处理得当相当于给我们的服务器自带了一个UPS岂不美哉。 方法暂不公开了如需技术协助可以邮件我w._heng163.com50 for 啤酒。