免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2301 | 回复: 11
打印 上一主题 下一主题

[内核入门] 求助,内核函数使用方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-09 15:16 |只看该作者 |倒序浏览
本帖最后由 DVD0423 于 2015-04-09 15:19 编辑

rt,最近学习内核一直碰壁,很小的问题都要解决很久。
请问我想在模块中使用下面的函数,但是它的定义在kernel/sched/fair.c文件中,我怎么使用呢?
static inline struct task_struct *task_of(struct sched_entity *se)
{
#ifdef CONFIG_SCHED_DEBUG
    WARN_ON_ONCE(!entity_is_task(se));
#endif
    return container_of(se, struct task_struct, se);
}

问题2,我想在模块中包含一个头文件kernel/sched/sched.h应该怎么包含?我知道在include下的可以直接包含,但是这个不是在include目录下,我觉得包含绝对路径太傻了。

两个问题应该对有经验的人来说都很简单,但是我是入门者,所以请朋友帮帮忙。
@humjb_1983
@瀚海书香
@镇水铁牛
@......

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
2 [报告]
发表于 2015-04-09 16:20 |只看该作者
本帖最后由 amarant 于 2015-04-09 16:21 编辑

kernel/sched/sched.h 这个文件放在这个位置,就是不希望外面的人包含它。可以把它理解成私有的头文件。只给kernel/sched/目录下的文件使用的。

如果你要很不优雅地写,那么就这么做:
#include "../../kernel/sched/sched.h"

论坛徽章:
0
3 [报告]
发表于 2015-04-09 16:28 |只看该作者
原来如此,那另一个问题呢。谢谢了回复 2# amarant


   

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
4 [报告]
发表于 2015-04-09 16:29 |只看该作者
回复 3# DVD0423


    static的方法只有本模块能使用,这是c语言的特性。

论坛徽章:
0
5 [报告]
发表于 2015-04-09 16:32 |只看该作者
回复 4# amarant
那就只有自己再拷贝一份了。
还有个问题:
我包含了sched.h,然后调用cpu_rq();但是里面用到了DECLARE_PER_CPU(struct rq, runqueues);编译时显示runqueues未定义
怎么解决呢?


   

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
6 [报告]
发表于 2015-04-09 16:44 |只看该作者
回复 5# DVD0423


    兄弟,你c语言的书先仔细学习一下吧。。

论坛徽章:
0
7 [报告]
发表于 2015-04-09 17:23 |只看该作者
回复 6# amarant

我不是请教您static如何使用的,而且我说的自己实现这个函数也没错吧(“那就只有自己再拷贝一份了。”)

我的修改本意是不要实现模块的,直接改内核,只是因为怕把系统搞崩了,才想法把自己的代码提取出来。因为是内核菜鸟,所以又很多事不肯定而已。我用的只是cpu_rq(rq),然后包含了sched.h 但是系统提醒我runqueues未定义。我不知道原因,问问怎么了?现在好像知道了,可能是DECLARE_PER_CPU(type, name)和DEFINE_PER_CPU(type, name)的区别

版主达人,我很困惑为什么论坛发帖,动不动就给人这个意思:“你xxx都不知道,还是先XXX吧”。真受不了。我弱只说明内核方面弱,并不代表什么都不会好嘛。





   

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
8 [报告]
发表于 2015-04-09 18:55 |只看该作者
回复 7# DVD0423


    没有冒犯的意思。像编译时显示runqueues未定义,这一类是纯C的问题。内核对C的运用是非常灵活的。我建议你把C学扎实一点而已。

因为大家都很忙,都是工作的人,每天一堆的事情在头上,是没什么时间在BBS上的。希望理解
可能会让你很不舒服,但请见谅

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
9 [报告]
发表于 2015-04-09 20:32 |只看该作者
本帖最后由 镇水铁牛 于 2015-04-10 07:34 编辑

你再包含这几个头文件试试看
#include <linux/cpu.h>
#include <linux/cpuset.h>
#include <linux/percpu.h>
如果还不行,把那个per cpu变量extern试试看。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
10 [报告]
发表于 2015-04-10 08:02 |只看该作者
回复 9# 镇水铁牛


    它用的是declare,这个是extern的。。所以编译的时候找不到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP