标签: kernel

内核代码中的c语法及其工作原理

我对Linux内核代码中使用的语法有疑问.我对它的作用有直觉,但我想更正式地了解它.我正在使用内核v3.5.4

在文件/include/linux/sched.h中定义了以下内容

struct task_struct {
    volatile long state;
    //some more data members
};
Run Code Online (Sandbox Code Playgroud)

并在文件/include/linux/init_task.h文件中定义以下内容:

#define INIT_TASK(tsk) {
    .state     = 0,               \
    //some more initializations

}
Run Code Online (Sandbox Code Playgroud)

我对两件事感到困惑:

a)我觉得它用于初始化,但是任何人都可以为这种类型的结构初始化提出一些好的读数.

b)我不明白以下初始化是如何工作的.就像这个#define和相应的task_struct结构是如何相关的.

[编辑]我也注意到以下事项:c)是否\在必要的每一行的末尾.

d)内核doe的许多部分都包含在内#ifdef #endif.如果要初始化包含在其中的数据成员,#ifdef #endif我们可以使用这种形式的初始化.我的意思是我们可以像这样使用#ifdef #endif内部INIT_TASK()

#define INIT_TASK(tsk) {
    .state     = 0,               \

    //some more initializations
    #ifdef CX 
    .tickets   = 5,               \
    #endif

}
Run Code Online (Sandbox Code Playgroud)

c linux kernel linux-kernel

0
推荐指数
1
解决办法
461
查看次数

使printf语句在openCL内核代码中工作

在下面的代码片段中,我试图printf()在代码中尝试打印出input[i]计算结果,以便我可以看到它正常工作.

但这并不像我希望的那样有效,因为引号printf()与内核的字符串格式相混淆,导致整个程序无法编译.我已经尝试使用转义字符\",它允许我输入内核的字符串但是在编译时给出了预期的表达式和缺少的字符错误.

有谁知道如何解决这个问题?这是检查内核代码结果的最佳方法吗?

    const char *KernelSource =         "\n"
"__kernel void relax(                    \n"
"   __global double* input,                \n"
"   __global double* output,               \n"
"   __global int N)             \n"
"{                                        \n"
"   int i = get_global_id(0);             \n"
"   if(i > 0 && i < N-1){                         \n"
"       input[i] = 0.25*input[i-1]+0.5*input[i]+0.25*input[i+1];  \n"
"       printf("input[%d] %f \n", i, input[i] )\n"
"   }                                        \n"
"}                                        \n"
"\n";
Run Code Online (Sandbox Code Playgroud)

c string kernel escaping opencl

0
推荐指数
1
解决办法
5426
查看次数

有人可以解释这个OpenCL程序有什么问题吗?

我已经包含了主机程序的主要部分,我怀疑这里不正确:

http://pastebin.com/qVkv9E11

我的指针还不是很好,并且认为我可能错误地分配了一些变量.

这是内核程序,它应该让我知道我的程序正在尝试做什么:

    const char *KernelSource =           "\n"
"__kernel void sumElements(           \n"
"   __global float* input,            \n"
"   __global float output,            \n"
"   __global int N)                   \n"
"{                                    \n"
"   int i = get_global_id(0);         \n"
"   if(i < N)                         \n"
"       output += input[i];           \n"
"}                                    \n"
"\n";
Run Code Online (Sandbox Code Playgroud)

也许这会导致错误,因为我从未尝试过SIMT写入一个变量,如上所述.有可能做这样的事吗?我需要得到数组中所有元素的总和.

c multithreading kernel gpu opencl

0
推荐指数
1
解决办法
146
查看次数

为什么使用不同的指针类型

在很多标准的开源代码中,我在不同的地方看到使用不同的指针类型,如:

uint32 fooHash (uint8 *str, uint32 len)
Run Code Online (Sandbox Code Playgroud)

我没有得到以下内容: - 为什么要将int声明为uint32,uint8?所有这些都将在用户空间本身运行,那么为什么不留下自己呢?以后便携性不是一个问题吗?

  • 另外,如果你想在32位系统上运行开源代码,为什么指针为uint8*ptr?

c pointers kernel

0
推荐指数
1
解决办法
4909
查看次数

为什么我们有内核时需要驱动程序?

我目前正在做一个关于操作系统的课程.

我知道内核是操作系统的核心部分,它充当用户应用程序和计算机(如CPU)的数据处理元件之间的桥梁.

为什么我们需要驱动程序(例如触摸板驱动程序),内核是否控制所有计算机硬件?

operating-system kernel

0
推荐指数
1
解决办法
3000
查看次数

为什么在过程切换中发生模式切换?

是否process switch需要mode switch?如果是这样,为什么?

kernel

0
推荐指数
1
解决办法
1199
查看次数

如何打印32位值完成?

我想知道如何仅在C中打印整数值为0.

而我在内核空间,想在内核模块中打印一些值.

就像if a是32位整数那样

int a = 14

然后输出将是这样的

value of a = 0x0000000e

在十六进制中.

提前致谢.

c hex kernel

0
推荐指数
1
解决办法
2万
查看次数

运行时检查内核驱动程序完整性

我设法做objcopy来查看和提取.rodata段内容作为不可变完整性检查的引用,但是,我意识到内核驱动程序无法读取文件.从这个意义上说,我们如何编写驱动程序来确定它在运行时的自身完整性?

一些示例代码来制作一些插图会很好.

c kernel runtime

0
推荐指数
1
解决办法
1223
查看次数

arch中未发现内核错误

我运行这个命令:

sudo dkms autoinstall -k 3.11.6-1-ARCH
Run Code Online (Sandbox Code Playgroud)

并有错误:

Error! echo
Your kernel headers for kernel 3.11.6-1-ARCH cannot be found at
/usr/lib/modules/3.11.6-1-ARCH/build or /usr/lib/modules/3.11.6-1-ARCH/source.
Error! echo
Your kernel headers for kernel 3.11.6-1-ARCH cannot be found at
/usr/lib/modules/3.11.6-1-ARCH/build or /usr/lib/modules/3.11.6-1-ARCH/source.
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

linux kernel linux-kernel archlinux

0
推荐指数
1
解决办法
5850
查看次数

简单系统调用实现示例?

有趣的是,我在网上找不到任何简单的例子.你能分享一个简单的例子吗?我试图通过分析一个例子来理解以下内容.

?   Typically, 
?   a number associated with each system call
?   Number used as an index to a table: System Call table
?   Table keeps addresses of system calls (routines)
?   System call runs and returns
?   Caller does not know system call implementation
?   Just knows interface
Run Code Online (Sandbox Code Playgroud)

operating-system kernel system

0
推荐指数
1
解决办法
2046
查看次数