作者:刘刘刘刘 | 来源:互联网 | 2023-08-26 18:08
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 &#61; geteuid();
pswd &#61; getpwuid(uid);
gid &#61; getegid();
grp &#61; getgrgid(gid);
INIT_LOGI(">>>###<<pw_name, gid, grp->gr_name);
pswd &#61; getpwuid(sockopt->uid);
grp &#61; getgrgid(sockopt->gid);
INIT_LOGI(">>>###<< 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 操作不允许&#xff0c;为何不行&#xff1f;euid还是0root&#xff0c;设置1036logd权限还不行&#xff1f;
原因见 宋宝华 的 Linux阅码场 - Linux内核月报(2020年09月)_宋宝华的博客-CSDN博客
尝试文中提及的修复方式&#xff0c;但由于工具链libc库问题&#xff0c;无法实现。
于是更改方向&#xff0c;研究xxx_standard&#xff0c;见README.md
学习了Parcelable二进制序列化&#xff08;真的够语言底层&#xff0c;了解真实的数据存储结构&#xff09;&#xff0c;改写出简单&#xff08;只分配一个page&#xff0c;使用中不够时再增加&#xff09;的IPC binder 通信机制。
C相关的内容&#xff0c;我都能一点点研究&#xff08;抠&#xff09;出来&#xff0c;
然后到了ACE JS运行环境初始化&#xff0c;需要quickjs flutter
这些对于一个C用户来说&#xff0c;想要了解清楚机制并使用起来还是很有难度的。
OpenHarmony之路暂时卡在这里了。。。。。。