Tag: 内核

从用户模式增加线程量

在Linux内核3.0+上是否可以从用户模式增加线程的量子? 怎么样?

OpenCL是否支持随机访问的全局队列缓冲区?

我正在编写一个处理组合数据的内核。 因为这些问题通常都有很大的问题空间,大多数处理过的数据都是垃圾,有没有办法可以做到以下几点: (1)如果计算的数据通过某种条件,则将其置于全局输出缓冲区。 (2)输出缓冲区满后,数据将被发送回主机 (3)主机从缓冲区中获取数据的副本并清除它 (4)然后创建一个由GPU填充的新缓冲区 为简单起见,这个例子可以说是一个选择性的内在产品,我的意思是 __global int buffer_counter; // Counts void put_onto_output_buffer(float value, __global float *buffer, int size) { // Put this value onto the global buffer or send a signal to the host } __kernel void inner_product( __global const float *threshold, // threshold __global const float *first_vector, // 10000 float vector __global […]

为什么`synchronize_rcu()`在读取锁定块内调用时没有死锁?

synchronize_rcu()用于仅等待正在进行的RCU读取端关键部分完成。 如果是这样,它应该在读取块内调用时永远被阻止。 但是,以下代码在我的linux内核上运行良好,为什么? void port_range_clean( void ) { struct port_range *p; redo: rcu_read_lock(); list_for_each_entry_rcu(p, &port_rt->ports, list) { list_del_rcu(&p->list); synchronize_rcu(); rcu_read_unlock(); kfree(p); goto redo; } }

我们转换Descriptor + Descriptor-> SerialNumberOffset时序列号枚举失败

我有一个内核驱动程序,用于查找存储设备的序列号,但驱动程序存在问题。 Descriptor->SerialNumberOffset是103但是(LPCSTR)(UINT_PTR)Descriptor+(DWORD32)Descriptor->SerialNumberOffset为NULL 这是我的代码 NTSTATUS GetDeviceTypeAndUniqueID(IN PDEVICE_OBJECT StorageStackDeviceObject, cwDevices *lDeviceTypeArg, char *pszUidArg) { DWORRD lDeviceType=0; STORAGE_PROPERTY_QUERY Query; STORAGE_DEVICE_DESCRIPTOR Buffer[4]; NTSTATUS Status = STATUS_SUCCESS; ULONG uBusType=BusTypeUnknown; PSTORAGE_DEVICE_DESCRIPTOR Descriptor=NULL; PIRP NewIrp2=NULL; PIO_STACK_LOCATION NextIrpStack=NULL; IO_STATUS_BLOCK IoStatus; char szSptr[2]={‘_’,’\0′}; Query.PropertyId = StorageDeviceProperty;// first set the query properties Query.QueryType = PropertyStandardQuery; lDeviceType=0; if (KeGetCurrentIrql() > PASSIVE_LEVEL) { return STATUS_SUCCESS; } if(StorageStackDeviceObject […]

我执行AIX内核扩展程序时出错

我是AIX的新人。 编译内核扩展时遇到了很多错误。 在那之后,最后我编译并链接。 但是当我执行二进制文件时,我收到了这个错误。 bash# ./sysconfig_1 load ./question.exp Could not load program ./sysconfig_1: The program does not have an entry point or the o_snentry field in the auxiliary haeder is invalid. Examine file headers with the ‘dump -ohv’ command 谁能帮助我? //sysconfig_1.c #include #include #include #include main(int argc, char *argv[]) { struct cfg_load cl; struct cfg_kmod […]

尝试映射大页面时mmap失败(1GB)

我做了什么:1。用root启用大页面(我的系统支持1MB大页面) $echo 20 > /proc/sys/vm/nr_hugepages 2.将庞大的页面文件系统安装到/ mnt / hugepages $mount -t hugetlbfs nodev /mnt/hugepages 3.在巨大的页面文件系统中创建一个文件 $touch /mnt/hugepages/hello 然后使用mmap将大页面映射到地址0,如下面的代码所示 #define FILE_NAME “/mnt/hugepages/hello” #define PROTECTION (PROT_READ | PROT_WRITE) // page flag #define LENGTH (1024*1024*1024) // huge page size #define FLAGS (MAP_SHARED) //page flag #define ADDR (void *) (0x0UL) //starting address of the page fd = open(FILE_NAME, O_CREAT […]

C / C ++程序是运行CPU还是运行内核?

我现在已经编程好几年了,但是有一件事我从未理解过: 有两种类型的编程语言。 编译的和解释的,而编译的首先需要编译成解释语言,然后才能执行。 例如,在可以执行之前,需要首先将C / C ++编译为机器语言。 这就是我的问题:谁实际上运行已编译的C / C ++ Windows / Linux程序? 是直接由CPU解释,还是OS Kernel执行它并将命令传递给CPU? 如果CPU直接执行它,那么Windows内核如何拒绝一些调用呢? 否则,它是否意味着内核也理解机器语言,或者非内核C / C ++程序是否无法编译为机器语言?

Linux内核:scatterlist允许的最大“长度”是多少?

解决了我的Linux加密示例,我可以正确地调用aead密码,我遇到了一个有趣的问题。 我将散点图定义为: struct scatterlist sg[2]; sg_init_table(sg, 2 ); sg_set_buf(&sg[0], address, 512); sg_set_buf(&sg[1], mac, 16); aead_request_set_crypt(req, sg, sg, 512, iv); crypto_aead_encrypt(req); 这很有效。 但是,如果你将缓冲区大小从512增加到131072,那么它将“经常”出现恐慌。 BUG: unable to handle kernel paging request at ffffeb04000cea80 IP: [] scatterwalk_done+0x50/0x60 现在,由于所有密码最终都调用了scatterwalk_函数,我认为将sg-> length设置为大的是一个问题。 据推测,它有时会越过下一页。 在这做什么是正确的? 我是否必须将其拆分为多个分散列表,确保每个分散列表都不会转到下一页? 这听起来像一个麻烦,还是有一个function为我做这个? 或者我只是需要确保每个页面都“可用”?

从内核空间中的文件指针获取fd

给定一个struct文件,是否可以在linux内核空间中获取相关的文件描述符? 我正在尝试使用sys_chmod或sys_fchmod更改权限。 一个接受文件描述符,另一个需要来自用户空间的文件名。 我可以弄清楚如何获取文件名但是如何将其转换为用户空间指针? 谢谢

读取sysfs GPIO输入引脚(方向为“in”)始终打印固定值(0)

在内核设备驱动程序(内核版本3.10.92 )中启用GPIO设备支持后,我想通过GPIO sysfs读取GPIO扩展器的输入引脚的值。 导出并将方向设置为“in”后,在读取时,即使在事件发生后,该值也始终为0 ,这会将引脚值更改为1 。 虽然输出方向工作正常,但我可以通过将值更改为0或1来发光LED。 GPIO sysfs中我的GPIO扩展器的基地址是184.因此,根据GPIO sysfs读取引脚号22即引脚号206,我在内核中给出的命令是 echo 206> / sys / class / gpio / export echo“in”> / sys / class / gpio / gpio206 / direction cat / sys / class / gpio / gpio206 / value(总是将值赋值为0 ) 我正在使用PCA9505 GPIO扩展器 (40个I / O引脚),它连接到MPC8308微处理器并通过mpc I2C总线控制。