OpenHarmony(10) —— “续下命”,然后还可以再挣扎一段时间
OpenHarmony3.0出来很久了,之前也研究了一点,主要是想从头开始,从linux启动init进程开始了解OpenHarmony(linux版)。
之前的一点研究 OpenHarmony: 了解OpenHarmony并移植再使用的记录 (gitee.com)
这里提一点,一开始以为xx_lite 方式比较合适,见README_learn.md,在研究了解并按自己想法改写(init作为主要程序,其他service以.so方式加载)时遇到一个fchmodat BUG问题
uid_t uid = getuid();
struct passwd *pswd = getpwuid(uid);
gid_t gid = getgid();
struct group *grp = getgrgid(gid);
INIT_LOGI(">>><<pw_name, gid, grp->gr_name);
uid = geteuid();
pswd = getpwuid(uid);
gid = getegid();
grp = getgrgid(gid);
INIT_LOGI(">>><<pw_name, gid, grp->gr_name);
pswd = getpwuid(sockopt->uid);
grp = getgrgid(sockopt->gid);
INIT_LOGI(">>><<< sock %s uid %u(%s) gid %u(%s)",
addr.sun_path, sockopt->uid, pswd->pw_name, sockopt->gid, grp->gr_name);
if (fchmodat(AT_FDCWD, addr.sun_path, sockopt->perm, AT_SYMLINK_NOFOLLOW)) {
unlink(addr.sun_path);
close(sockopt->sockFd);
init_lite fchmodat 95 操作不允许,为何不行?euid还是0root,设置1036logd权限还不行?
原因见 宋宝华 的 Linux阅码场 - Linux内核月报(2020年09月)_宋宝华的博客-CSDN博客
尝试文中提及的修复方式,但由于工具链libc库问题,无法实现。
于是更改方向,研究xxx_standard,见README.md
学习了Parcelable二进制序列化(真的够语言底层,了解真实的数据存储结构),改写出简单(只分配一个page,使用中不够时再增加)的IPC binder 通信机制。
C相关的内容,我都能一点点研究(抠)出来,
然后到了ACE JS运行环境初始化,需要quickjs flutter
这些对于一个C用户来说,想要了解清楚机制并使用起来还是很有难度的。
OpenHarmony之路暂时卡在这里了。。。。。。