Articles of 内核

Linux USB编程

我是Linux内核编程的新手。 我希望开发一个程序来读取USB驱动器信息,如制造商名称,容量等。我知道描述符及其属性。 但我不明白如何枚举连接到系统的USB驱动器。 我正在寻找启动内核和USB端口之间连接的function。 这怎么可能?

系统调用:sys_exit(),SYS_exit和exit()之间的区别

SYS_exit,sys_exit()和exit()有什么区别? 我明白: Linux内核提供了系统调用,这些man 2 syscalls在man 2 syscalls中列出。 glibc提供的系统调用的封装函数与系统调用的名称大多相似。 我的问题:在man 2 syscalls ,没有提及SYS_exit和sys_exit()。 他们是什么? 注意:这里的系统调用exit只是一个例子。 我的问题确实是:什么是SYS_xxx和sys_xxx()?

Linux CFS计划代码在哪里?

我有完整的Linux版本3.13的源代码。 我试图findCFS调度程序的源代码,根据stream行的书籍应该驻留在/kernel/sched.c中的基本调度程序代码和/kernel/sched_fair.c专门为CFS代码。 我只是在我的3.13 linux代码里面的这两个文件做了一个代码全局search,结果没有任何结果。 我还单独search了/linux-3.13/kernel文件夹和/linux-3.13/kernel/sched文件夹。 仍然没有运气。 我想让别人知道CFS在新的linux内核代码域(linux-3.13。*)中的位置。 请原谅,如果我在这里失去了一些东西。 我是一个初学linux内核的人。

未注册端口重组错误的nf_conntrack_helper_register

我有以下代码来注销和注册sip conntrack从内核3.18 static void __nf_conntrack_sip_fini(void) { int i, j; for (i = 0; i < ports_c; i++) { for (j = 0; j < ARRAY_SIZE(sip[i]); j++) { if (sip[i][j].me == NULL) continue; nf_conntrack_helper_unregister(&sip[i][j]); } } memset(sip, 0, sizeof(sip)); } static int __nf_conntrack_sip_init(void) { int i, j, ret; if (ports_c == 0) ports[ports_c++] = SIP_PORT; for […]

dynamic并行 – 启动许多小内核是非常缓慢的

我正在尝试使用dynamic并行来改进我在CUDA中的algorithm。 在我原来的CUDA解决scheme中,每个线程计算每个块通用的编号。 我想要做的是首先启动一个粗略(或低分辨率)的内核,在这个线程中,线程只计算一次公共值(就像每个线程代表一个块一样)。 然后每个线程创build一个1个块(16×16线程)的小网格,并为其传递公共值启动一个子内核。 从理论上讲,它应该更快,因为它可以节省许多冗余操作。 但实际上,解决scheme的工作非常缓慢,我不知道为什么。 这是代码,非常简单,只是想法。 __global__ coarse_kernel( parameters ){ int common_val = compute_common_val(); dim3 dimblock(16, 16, 1); dim3 dimgrid(1, 1, 1); child_kernel <<< dimgrid, dimblock >>> (common_val, parameters); } __global__ child_kernel( int common_val, parameters ){ // use common value do_computations(common_val, parameters); } child_kernels的数量很多,每个线程一个,并且必须有大约400×400线程。 据我所知,GPU应该并行处理所有这些内核? 或者子内核按顺序处理? 我的结果显示,性能比我原来的解决scheme慢10倍以上。

内核级线程库

我必须实现内核级线程,但在网上search时,我发现有三种方法可以在linux中创build内核级线程: NPTL KTHREAD Linux线程 这是写在linuxThreads现在被放弃的地方。 但我无法findNPTL&kthread的当前支持。 此外,我无法find任何来源,可以简单地解释我如何使用其function。 哪个是当前支持的,使用内核级线程的好库? 也请分享任何资源安装这些库,也使用它们?

android内核构build(第一次)

好的,首先,我是全新的Android开发。 这是我第一次尝试任何forms的内核。 我对Java和Python有一定的了解,但没有C. 我有一个星系标签4 sm-t330nu运行4.4.2。 其运行Qualcomm Snapdragon 400 msm8226 CPU。 即时通讯只是试图做一个testing与香草内核在这一点上。 (也是我的构build环境是最新的kali 1.1,并且在https://github.com/offensive-security/kali-nethunter/wiki/Porting-Nethunter中继续教程) 所以我有所有需要的依赖项(我希望),并从三星开源我下载源。 解压缩并通过可用的defconfigs。 find“msm8226-sec_milletwifiue_defconfig”后,我决定这是我的平板电脑最有可能的候选人。 (当做一个自定义恢复,我记得它是“philz touch milletwifiue的东西) 我做了我的出口(arch = subarch = cross_compile =),一切似乎都很好。 当我运行一个完全按照教程说(使用他们的例子中的defconfig作为一个testing)的构build我收到一个错误,指出“必须定义variant_defconfig”。 所以我反而做“variant_defconfig = msm8974_sec_defconfig”,它build立很好。 现在的问题:当我将“msm8974_sec_defconfig”更改为我的实际msm8226我收到每个生成错误,我似乎无法解决。 (减小尺寸) CC arch/arm/kernel/armksyms.o CC arch/arm/kernel/module.o AS arch/arm/kernel/sleep.o CC arch/arm/kernel/suspend.o CC arch/arm/kernel/io.o arch/arm/kernel/io.c: In function '_memcpy_fromio': arch/arm/kernel/io.c:14:3: error: implicit declaration of function 'nop' [-Werror=implicit-function-declaration] cc1: some […]

如何在Linux内核中recursion读取目录的内容?

我想实现一个树遍历函数,它打印给定的目录在内核中的所有内容。 我知道如何在用户空间做到这一点,但我的要求是在内核空间。 为此,我正在研究vfs_readdir函数,并对它的用法有点困惑。 说我会从其他内核模块调用我的遍历函数,这意味着请求不会通过用户空间。 现在的问题是如何调用vfs_readdir并使用该信息recursion地parsing给定的目录。 从vfs_readdir定义extern int vfs_readdir(struct file *,filldir_t,void *); 我可以使用像filp_open()这样的函数从文件path中获取struct file *,根据我的理解filldir_t是一个函数指针,用于callback函数,填充由void *指向的用户提供的缓冲区。 但就我而言,我不需要将任何信息传递给用户。 我应该在什么地方通过无效的地方? 查看filldir函数定义 static int filldir(void * __buf,const char * name,int namlen,loff_t offset,ino_t ino,unsigned int d_type); 这个函数的参数从哪里来。 我的假设是,vfs_readdir反过来调用类似file-> f_op_readdir(文件,但填充); 这是否在内部做一些事情,并填写参数来调用callback函数? 现在这是一个层次。 我该如何recursion地打印给定目录中的所有文件? 我想我需要在自己的callback函数中做一些事情,但是我只有一些关于通过这个callback函数传递的文件的信息,比如文件名,inode号等等。 我怎么知道它是否是常规的文件或目录使用这个信息。 我的意思是我没有关于文件的dentry或inode数据结构。 任何build议如何做到这一点? 另外,如果我想在callback函数中删除一个文件,我可以通过使用inode号码(这是我除了名称之外的callback),我应该怎么做?

如何以编程方式知道我是否在虚拟机中?

我希望能够从Windows和Linux都能这样做。 我知道通过获取sysinfo和使用与硬件标识符相关的缩略图规则是有办法的。 我想知道是否有一个更基本的方法,如查看内存地址/发出中断等 顺便说一句我正在试图在英特尔硬件上做到这一点,我使用的虚拟化软件是Vmware Workstation和Windows HyperV。

如何copy_to_user一个string和在linux内核读取函数中使用offp

声明: static char status[128] = "off\0"; 并实现了readfunction: static ssize_t read_proc(struct file *filep, char __user *buf, size_t len, loff_t *offp) { ssize_t cnt = strlen(status), ret; ret = copy_to_user(buf, status, cnt); *offp += cnt; return cnt; } 我如何考虑offp ? 目前它打印的status是无尽的