
Linux内核设备驱动程序将DMA从设备插入用户空间内存
我想将数据从启用DMA的PCIe硬件设备尽快移入用户空间。问:如何将“直接I / O通过DMA传输和/或通过DMA传输结合到用户空间”通读LDD3,看来我需要执行几种不同类型的IO操作! dma_alloc_coherent给我可以传递给硬件设备的物理地址。但是将需要设置get_user_pages并copy_to_user在传输完成后执行类型调用。这似...
2024-01-10
谷歌Pixel7设置:深入了解自定义您的新手机
谷歌的 Pixel 设备已经简单易用,但深入了解设置可以帮助您根据自己的喜好定制手机的某些方面。例如,您可以优化手机的存储空间、提高屏幕的刷新率(或降低刷新率以节省电池寿命)以及将音量键用作相机的快捷方式。谷歌于 10 月推出了 Pixel 7 和 7 Pro,这两款手机都采用了更新的设计、面部解锁、新的Tensor G2 处理器和改进的相机。但下面的许多设置选项也应该适用于旧设备,包括Pix...
2024-03-04
CoffeeScript - 理解“@”
我已经阅读了CoffeeScript OOP上的几篇论文。从他们身上,我理解正确的话,使用中的CoffeeScript的@号(和在JavaScript this前缀):CoffeeScript - 理解“@”变量:使一个类的实例成员变量。每一个实例都有它自己的这种变量(非静态变量)的“方法”:使得方法静态的,这违背了它与变量确实我在JS和CS,一...
2024-01-10
为什么Linux内核的pr_debug没有给出任何输出?
我有一个可加载的内核模块,其初始化如下static int __init id_init(void){ struct identity *temp; /* some code which is not relevant to the question */ temp = identity_find(3); pr_debug("id 3 = %s\n", temp->name); temp = identity_find(42); if (temp == NULL) ...
2024-01-10
Linux内核中的stdlib.h替代方案?
在Linux中开发内核模块时,不允许使用C标准库。但是,如果我需要使用某些常用功能,例如strcat(),我应该去哪里?回答:无论Linux内核中没有实现什么,您都必须实现自己或从另一个开源内核模块中借鉴。但是,您会发现它strcat是在内核中实现的。请参阅内核API文档。特别是关于您的一般问题的“...
2024-01-10
如何使用Linux内核中的lockdep功能进行死锁检测
我有一个Linux内核驱动程序和一个与之交互的用户应用程序。内核驱动程序中有一个死锁。我在名为“lockdep” 的linux内核中遇到了这个功能。我能够对其进行配置并重新编译内核(并且我确实在/proc中看到lockdep文件夹)。但是我不知道该如何推断该工具的输出或如何使用该工具调试驱动程序。任何帮...
2024-01-10
如何找到Linux处理器/芯片架构
我应该使用什么命令来查找Linux处理器/芯片架构?linux-x86-32linux-x86-64linux-ppc-64回答:要显示内核体系结构: uname -a要显示cpu详细信息: cat /proc/cpuinfo...
2024-01-10
如何构建Linux内核模块,使其与所有内核版本兼容?
我想构建一个将与所有内核发行版兼容的内核模块。例如,如果我在内核3.2.0-29上构建内核模块并尝试在3.2.0-86上加载它,则会出现以下错误:modprobe my_driver致命:插入my_driver(/lib/modules/3.2.0-86-generic/kernel/fs/my_drv/my_drv.ko)时出错:无效的模块格式[在日志消息中:my_drv:对符号module_layout的版本持不同...
2024-01-10
linux内核aio功能
我正在测试内核异步io函数(不是posixaio),并试图弄清楚它是如何工作的。下面的代码是一个完整的程序,其中我简单地将一个数组重复写入使用O_DIRECT打开的文件中。我在回调函数中收到一个错误“写错的字节期望1024得到0”(请参阅work_done()中的fprintf语句)。对于不熟悉内核aio的用户,以...
2024-01-10
在Linux内核中添加了新的网络协议
我知道在linux内核中,我们可以在传输层添加我们自己的协议,类似于TCP,UDP等。是否有任何钩子可以在网络层上注册类似于IP,ARP的新协议,可以将数据包传输到应用程序,以及如何在Linux内核中添加此协议?回答:要处理从用户空间到协议的通信,请使用内核套接字API注册协议。这使您可以从用户...
2024-01-10
在Linux内核哈希列表实现中使用双指针
我试图了解链表和哈希表的Linux内核实现。实现的链接在这里。我了解链表的实现。但是我对为什么在hlist(*pprev)中使用双指针感到困惑。hlist的链接在这里。我知道hlist用于实现哈希表,因为列表的头仅需要一个指针,并且可以节省空间。为什么不能使用单个指针(就像链接列表一样prev)来完成?...
2024-01-10
Linux内核:如何捕获按键并用另一个按键代替?
我试图涉足低级编程。我的目标是让用户在终端中键入密钥,捕获该密钥并输出另一个密钥。因此,例如,如果用户键入“ a”,我将键入“ b”,如果用户键入“b”,我将输出“ c”,依此类推。这样做的步骤是什么?我已经熟悉如何访问Linux内核源代码,对其进行编译和使用。谢谢。回答:考虑...
2024-01-10
从Linux内核发送UDP数据包
即使已经存在一个类似的主题,我也注意到它可以追溯到两年前,因此我认为打开一个新主题更为合适。我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以便监视随机数生成器(/drivers/char/random.c)的行为。到目前为止,由于sock_create和sock_sendmsg函数,我已经设法监视了一些事情。您可以在此消息...
2024-01-10
在Linux内核中使用浮点
我正在阅读Robert Love的“ Linux内核开发”,并且遇到了以下段落:当用户空间进程使用浮点指令时,内核将管理从整数到浮点模式的转换。内核使用浮点指令时必须执行的操作因体系结构而异,但是内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。与用户空间不同,内核不具有对浮点...
2024-01-10
Linux内核如何测试?
Linux内核开发人员如何在提交代码后在本地测试他们的代码?他们是否使用某种单元测试,构建自动化?测试计划?回答:linux内核非常重视社区测试。通常,任何开发人员都会在提交之前测试他们自己的代码,并且经常会使用Linus的内核开发版本,或者与他们的工作相关的项目使用其他不稳定/开发树...
2024-01-10
Linux内核每个TCP / IP网络连接消耗多少内存?
每个TCP / IP网络连接Linux内核平均消耗多少内存(在内核地址空间中)?回答:对于TCP连接,消耗的内存取决于sk_buff的大小(Linux内核使用的内部网络结构)连接的读写缓冲区缓冲区的大小可以根据需要进行调整root@x:~# sysctl -A | grep net | grep mem检查这些变量这些指定内核中所有网络连接的最大...
2024-01-10
如何使用GDB和QEMU调试Linux内核?
我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试Linux内核。我实际上正在阅读罗伯特·洛夫(RobertLove)的书,但不幸的是,它没有帮助读者了解如何安装适当的工具来运行或调试内核。因此,我要做的是遵循本教程http://opensourceforu.efytimes.com/ 2011/02 / kernel-development-debugging-using-eclipse/。我使用e...
2024-01-10
Linux中的直接内存访问
我正在尝试直接为嵌入式Linux项目访问物理内存,但是我不确定如何最好地指定使用的内存。如果我定期引导设备并访问/ dev / mem,则可以轻松地对其几乎任何位置进行读写。但是,在这种情况下,我正在访问可以轻松分配给任何进程的内存。我不想做我的/ dev / mem代码是(删除了所有错误,等等。)...
2024-01-10
linux中的用户空间分配连续的物理内存
有没有办法从linux中的用户空间分配连续的物理内存?至少有几个保证的连续内存页。一个巨大的页面不是答案。回答:不,那里没有。您 确实 需要在内核空间中执行此操作。如果您说“我们需要从用户空间执行此操作”-没有在内核空间中进行任何操作,那没有什么意义-因为用户空间程序无法控制 ...
2024-01-10
Linux中的DNS缓存
我对DNS缓存感到困惑。我正在编写一个小型转发代理服务器,并想在Linux系统上使用OS DNS缓存。如果我理解正确,则在浏览器级别存在DNS缓存。然后在OS级别进行DNS缓存(Windows拥有DNS缓存。我不确定Linux发行版是否默认具有它)。那么,浏览器/代理服务器如何使用OS DNS缓存?我正在尝试查找是否可以依...
2024-01-10
JMeter-Linux内存不足
我正在尝试为应用程序运行负载测试。为此,我在具有60GB Ram和超过足够CPU能力的UbuntuVm上使用JMeter(v.2.13)。目标是达到通过WebSocket连接的1万名用户。但是,在测试运行期间,我在ssh控制台上收到以下错误(大约1.5k至2.5k模拟用户)OpenJDK 64-Bit Server VM warning: Attempt to protect stack guard pages failed.OpenJDK 64-...
2024-01-10
在Linux中接收SIGINT和异常处理
假设我们在C中有一个使用sleep()函数的程序该程序执行并进入睡眠状态。然后,我们输入Ctrl+ C将SIGINT信号发送到该进程。我们知道接收到SIGINT时的默认操作是终止该进程,我们也知道每当睡眠进程收到信号时,sleep()函数都会恢复该进程。我的教科书上说,为了允许sleep()函数返回,我们必须...
2024-01-10
为Linux创建窗口管理器
我想创建一个C供个人使用的简单堆叠窗口管理器,主要用于学习和挑战自我。我浏览了twm的源代码,它的花样少,但由于它不是基于小部件工具箱的,因此它的级别似乎很低。1使用GTK+之类的工具箱会更好吗?恐怕其中的某些代码和库twm可能过于陈旧( 编辑:已弃用),我希望窗口管理器使用相对较...
2024-01-10
Linux中堆栈内存在物理上是连续的吗?
据我所知,堆栈内存在虚拟内存地址中是连续的,但是堆栈内存在物理上也是连续的?这与堆栈大小限制有关吗?我曾经认为堆栈内存不必在物理上是连续的,但是为什么我们认为堆栈内存总是比堆内存快?如果它在物理上不是连续的,那么堆栈如何利用缓存的更多优势?还有另一件事总是让我感到...
2024-01-10
linux / unix进程的峰值内存使用率
有没有可以运行命令行并报告峰值RAM使用总量的工具?我在想类似/ usr / bin / time的东西回答:这是一种单行代码,不需要任何外部脚本或实用程序,也不需要您通过Valgrind或time之类的另一个程序来启动该过程,因此您可以将其用于已运行的任何过程:grep VmPeak /proc/$PID/status(用$PID您感兴趣的过程的P...
2024-01-10
在Linux中访问另一个进程虚拟内存(调试)
gdb如何在Linux上访问另一个进程虚拟内存?全部通过/ proc完成吗?回答:gdb如何在Linux上访问另一个进程虚拟内存?全部通过/ proc完成吗? :1)如字节数来读取比更少3 * sizeof(long)或文件系统/proc不可用或从读取/proc/PID/mem不成功则ptrace使用具有PTRACE_PEEKTEXT读取数据。这些是函数中的这些条件linux_proc...
2024-01-10
重新分配是否保持posix_memalign的内存对齐?
对齐malloc是的posix_memalign,没关系,但是对齐的realloc呢?是否realloc保留对齐方式或如何确保重新分配的内存具有相同的对齐方式?假设Linux和x86_64。回答:不,ISO或POSIX不能保证realloc返回的内存posix_memalign保持相同的对齐方式。A realloc 可以简单地将当前块扩展到相同的地址,但也可以将其移动到对齐...
2024-01-10
