Aloha~ 发表于 2022-3-24 17:25:05

pthread_setschedparam : Operation not permitted

需求:设置线程的运行优先级。

ffgo获得信息:

OS:       Ubuntu 18.04.5 LTS
MODEL:       Firefly RK3568-ROC-PC HDMI (Linux)
FIREFLY: v2.10-42-g50c7f0ac
DATE:       20210827-1534
KERNEL:       Linux version 4.19.193 (llq@tchip14) (latest: 2cff32a4f0f631284463e56b1b9ccebd6be88eb3) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05), GNU ld (Linaro_Binutils-2017.05) 2.27.0.20161019) #72 SMP Fri Oct 15 09:43:42 CST 2021

现象:
c++11设置不了线程的运行优先级。
相同代码在NX,虚拟机中可以以root权限运行。但是在我们提供的板子“Firefly RK3568-ROC-PC HDMI (Linux)”中没办法以root权限运行。
尝试过的方式为:sudo 可执行程序 ; sudo之后,执行可执行程序

虚拟机中的系统信息:Linux nx 4.15.0-171-generic #180-Ubuntu SMP Wed Mar 2 17:25:05 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
NX中的系统信息:Linux nx-desktop 4.9.201-tegra #15 SMP PREEMPT Wed Jun 16 19:21:38 CST 2021 aarch64 aarch64 aarch64 GNU/Linux

代码见附件。

编译命令:
g++ set_thread_param.cpp -o set_thread_param -lpthread

希望能帮忙解决。谢谢。


Aloha~ 发表于 2022-3-24 17:28:16

不知道下载附件要积分,
附上代码:

#include <iostream>
#include <unistd.h>
#include <thread>
#include <pthread.h>

int thread_run()
{
    printf("start thread_run\n");
    sleep(5);
    printf("end thread_run\n");
    return 0;
}

int main()
{

    std::thread t1(thread_run);
    sched_param sched;
    int res_policy;
    sched_param res_sched;

    pthread_getschedparam(t1.native_handle(),&res_policy,&res_sched);
    printf("orignal :\n res_policy %d\n res_sched %d\n",res_policy,res_sched.sched_priority);

    sched.sched_priority = sched_get_priority_max(SCHED_FIFO);
    int res;
    if(res = pthread_setschedparam(t1.native_handle(), SCHED_FIFO, &sched))
    {
      printf("error %d\n",res);
      perror("pthread_setschedparam error\n");   
    }

   

    pthread_getschedparam(t1.native_handle(),&res_policy,&res_sched);
    printf("after :\n res_policy %d\n res_sched %d\n",res_policy,res_sched.sched_priority);

    t1.join();

    return 0;
}

Liuth 发表于 2022-3-24 19:54:58

所使用的固件名称提供一下
我用最新的 ubuntu20 固件测试没有问题
sudo ./set_thread_param

Aloha~ 发表于 2022-3-25 10:54:15

Liuth 发表于 2022-3-24 19:54
所使用的固件名称提供一下
我用最新的 ubuntu20 固件测试没有问题
sudo ./set_thread_param

你好,我不是很清楚你说的固件名称指的什么。

我们使用的是Station P2产品8G+64G,Ubuntu 18.04(TF卡)版本。

然后参照发帖前的建议,使用ffgo看的信息是:
OS:       Ubuntu 18.04.5 LTS
MODEL:       Firefly RK3568-ROC-PC HDMI (Linux)
FIREFLY: v2.10-42-g50c7f0ac
DATE:       20210827-1534
KERNEL:       Linux version 4.19.193 (llq@tchip14) (latest: 2cff32a4f0f631284463e56b1b9ccebd6be88eb3) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05), GNU ld (Linaro_Binutils-2017.05) 2.27.0.20161019) #72 SMP Fri Oct 15 09:43:42 CST 2021

如果提供的信息不对,麻烦你举例说一下。
谢谢

Liuth 发表于 2022-3-25 11:09:15

就是你这个ubuntu18固件是哪里下载的,下载下来的文件名是什么
Station_P2_Ubuntu_18.04_GPT_RAW_20211015_1605.zip
是这个吗?

Aloha~ 发表于 2022-3-25 11:20:17

Liuth 发表于 2022-3-25 11:09
就是你这个ubuntu18固件是哪里下载的,下载下来的文件名是什么
Station_P2_Ubuntu_18.04_GPT_RAW_20211015 ...

嗯嗯,
我们是在https://www.stationpc.cn/download这个链接下载的文件。
文件名是:Station_P2_Ubuntu_18.04_GPT_20211015_1604.zip

Liuth 发表于 2022-3-25 11:58:03

测试发现那个固件确实有问题,可以用ubuntu20固件,ubuntu20测试正常

Aloha~ 发表于 2022-3-25 14:08:13

Liuth 发表于 2022-3-25 11:58
测试发现那个固件确实有问题,可以用ubuntu20固件,ubuntu20测试正常

哦哦,好的,谢谢。

请问Ubuntu18.04这个版本之后会修复这个问题么?
如果暂时没有修复的计划,能说明下造成这个问题可能的原因么?

另外我们提供的这个Ubuntu20固件支持打实时补丁么?

Liuth 发表于 2022-3-25 14:54:34

不清楚,可能是文件系统的原因
现在新的ubuntu18固件已经没有这个问题了

我们有提供 rtlinux 的固件,目前只有无桌面版
需要桌面版可以下载SDK自行打实时补丁实现,或者联系商务

Aloha~ 发表于 2022-3-25 15:00:32

Liuth 发表于 2022-3-25 14:54
不清楚,可能是文件系统的原因
现在新的ubuntu18固件已经没有这个问题了



意思是Station_P2_Ubuntu_18.04_GPT_RAW_20211015_1605.zip这个固件是没有我现在遇到的问题是么?
页: [1] 2
查看完整版本: pthread_setschedparam : Operation not permitted