Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[smart][lwp_ipc] support file descriptor transmit #7318

Merged
merged 1 commit into from
Apr 21, 2023

Conversation

zhangsz0516
Copy link
Contributor

@zhangsz0516 zhangsz0516 commented Apr 19, 2023

拉取/合并请求描述:(PR description)

[

为什么提交这份PR (why to submit this PR)

进程间通讯,需要传递 文件描述符 fd,用于类似于 Linux dmabuf 的 内存共享机制

你的解决方案是什么 (what is your solution)

在 lwp_ipc 中,增加收发 文件描述符的操作,进程 A 发送: fd->dfs_vnode 进程B 接收 dfs_vnode->new_fd

在什么测试环境下测试通过 (what is the test environment)

rt-smart aarch64 平台测试通过

]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用formatting等源码格式化工具确保格式符合RT-Thread代码规范 This PR complies with RT-Thread code specification

@zhangsz0516
Copy link
Contributor Author

@BernardXiong @Guozhanxin

@BernardXiong
Copy link
Member

这部分应用端的简单sample是什么样的?

@zhangsz0516
Copy link
Contributor Author

zhangsz0516 commented Apr 20, 2023

这部分应用端的简单sample是什么样的?

@BernardXiong

  • 进程A发送 fd,这里的消息类型改为 RT_CHANNEL_FD
int send_fd(char *ch_name, int fd)
{
    int send_ch;
    struct rt_channel_msg ch_msg;

    send_ch = rt_channel_open(ch_name, O_RDONLY);
    if (send_ch == -1)
    {
        printf("Error, channel %s open failed!\n", ch_name);
        return -1;
    }

    ch_msg.type = RT_CHANNEL_FD;
    ch_msg.u.fd.fd = fd;
    rt_channel_send(send_ch, &ch_msg);
    rt_channel_close(send_ch);

    return 0;
}
  • 接收进程,接收的数据就是新的 fd(文件描述符)
int recv_fd(char *ch_name)
{
    int recv_ch;
    int fd;
    struct rt_channel_msg msg_text;

    /* create IPC channel */
    recv_ch = rt_channel_open(ch_name, O_CREAT);
    if (recv_ch == -1)
    {
        printf("Error: channel %s create failed!\n", ch_name);
        return -1;
    }

    rt_channel_recv(recv_ch, &msg_text);
    fd = msg_text.u.fd.fd;
    rt_channel_close(recv_ch);

    return fd;
}
  • 发送进程与接收进程使用同一个 channel 名字

  • 如果进程A 发送给多个进程,需要多个 channel 分别发送

@BernardXiong BernardXiong requested a review from geniusgogo April 20, 2023 08:57
@BernardXiong BernardXiong added +1 Agree +1 wait_+2 wait for "+2" to confirm labels Apr 20, 2023
@BernardXiong BernardXiong changed the title [lwp_ipc] support file descriptor transmit [smart][lwp_ipc] support file descriptor transmit Apr 20, 2023
@geniusgogo geniusgogo added the +2 Agree +2 label Apr 21, 2023
@mysterywolf mysterywolf removed the wait_+2 wait for "+2" to confirm label Apr 21, 2023
@BernardXiong BernardXiong merged commit 3f442bb into RT-Thread:master Apr 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
+1 Agree +1 +2 Agree +2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants