当前位置: 首页 > news >正文

实时系统优先级设置与修改

实时系统优先级设置与修改

当我想使用sched_setscheduler,直接在驱动中修改实时线程的优先级时,我发现会报一个错误,ERROR: modpost: “sched_setscheduler” [/home/orangepi/gpio/interrupt/interrupt.ko] undefined!
我去查找/lib/modules/6.1.43/build/kerbel/sched/下面只有一个Makefile,sched_setscheduler的具体实现应该是在该目录下有一个core.c里才有,但是这个文件并未出现,经过我的查找,宋宝华的这篇文章内核优先级设置中写了,有个大神为了避免有人瞎设置内核优先级,他将这些接口全部删掉了,只保留了三个。
sched_set_fifo§
sched_set_fifo_low§
sched_set_normal(p, nice)
但是sched_set_fifo只能设置默认实时优先级为50,sched_set_fifo_low设置为1,sched_set_normal只能设置为普通策略,不能是实时策略,所以我们先选择将优先级设置成50,然后再用命令去修改。
当然我还找到了解决方案:
解决方案
I modify the file “kernel/sched/core.c” to add EXPORT_SYMBOL_GPL(sched_setscheduler) to test.
我修改了文件 “kernel/sched/core.c” 以添加 EXPORT_SYMBOL_GPL(sched_setscheduler) 进行测试。
Rebuild the kernel image then rebuild the driver, it did work.
但是这个我没试过。
重建内核镜像,然后重建驱动程序,它确实有效。
如果不想重新编译内核或者是想随时修改这个优先级,那么可以用下面的方法,参考沐多大神的文章添加链接描述,在你设置了默认中断优先级为50后。
临时去修改实时优先级的命令可以使用

gpio_interrupt是中断名称

ps -eLf | grep gpio_interrupt

在这里插入图片描述
然后会显示中断的进程号,查看中断优先级

chrt -p 12586

在这里插入图片描述
修改中断优先级

chrt -f -p 60 12586

在这里插入图片描述
可以看到你的优先级已经被修改到了60。
上面的是在命令行中修改,你也可以用rtirq去修改
安装rtirq
sudo apt install rtirq-init
默认会生成脚本/etc/default/rtirq,修改这个脚本

# IRQ thread service names
# (space separated list, from higher to lower priority).
# RTIRQ_NAME_LIST="rtc snd usb i8042" # old
RTIRQ_NAME_LIST="gpio_interrupt1 gpio_interrupt2" #这里写你的中断名称

# Highest priority.
RTIRQ_PRIO_HIGH=90   

# Priority decrease step.
RTIRQ_PRIO_DECR=5

# Lowest priority.
RTIRQ_PRIO_LOW=51

# Whether to reset all IRQ threads to SCHED_OTHER.
RTIRQ_RESET_ALL=0

# On kernel configurations that support it,
# which services should be NOT threaded 
# (space separated list).
RTIRQ_NON_THREADED="rtc snd"

# Process names which will be forced to the
# highest realtime priority range (99-91)
# (space separated list, from highest to lower priority).
# RTIRQ_HIGH_LIST="timer"

保存后选择执行

/etc/init.d/rtirq start 

在这里插入图片描述
优先级会按照最高优先级减步长递减到设置的中断名称上。
保存后以后会开机自启动。
附带我的驱动代码资源可以到资源里下载。
参考文章:
宋宝华文章
如何修改内核文章
沐多大神文章

相关文章:

  • system V信号量
  • [文献阅读] 可变形卷积DCN - Deformable Convolutional Networks
  • IMX6ULL学习整理篇——UBoot的一些基础知识(2. 启动流程)
  • 嵌入式C语言中堆栈管理与数据存储的精髓
  • 华为机试牛客刷题之HJ5 进制转换
  • /proc/sys/kernel/yama/ptrace_scope的作用
  • 网络爬虫【简介】
  • TMS320F28P550SJ9学习笔记13: 软件I2C_驱动AT24Cxx存储芯片
  • Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
  • Qt 中工具窗体与普通窗体在任务栏中的区别
  • 神聖的綫性代數速成例題1. 餘子式、代數餘子式的概念、行列式的行(列)展開
  • Type-C:智能家居的电力革命与空间美学重构
  • 简单实现京东登录页面
  • 精通游戏测试笔记(持续更新)
  • 蓝桥杯:信号覆盖
  • 常见的死锁情况分析
  • 前端小食堂 | Day16 - 前端监控の天眼通
  • 【leetcode100】全排列Ⅱ
  • 不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析
  • VSCode通过SSH远程登录Windows服务器
  • 北京P2P公司网站建设/收录优美图片官网
  • 做网站刷赞qq怎么赚钱/泰安做百度推广的公司
  • 佛山营销型网站设计/搜索引擎营销的主要方式有
  • 百度不收录我的网站/全球搜效果怎么样
  • 哪里有网站做爰视频/引擎seo优
  • 卫浴网站怎么做/百度医生