我正在寻找将 PID 值从用户空间复制到内核空间,这是我的代码快照。
内核模块:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/siginfo.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include <linux/uaccess.h>
#include <linux/signal.h>
MODULE_LICENSE ("GPL");
struct siginfo sinfo;
pid_t pid;
struct task_struct *task;
int init_module()
{
memset(&sinfo, 0, sizeof(struct siginfo));
sinfo.si_signo = SIGIO;
sinfo.si_code = SI_USER;
pid = 5218; // Everytime a new PID
// task = find_task_by_vpid(pid); I am also working on new and old version of UBUNTU so thats why this is here
task = pid_task(find_vpid(pid), PIDTYPE_PID);
printk("%d .\n", task);
if(task …Run Code Online (Sandbox Code Playgroud) Linux 驱动程序是否有可能拥有一个 kthread、中断句柄和系统调用。意味着 linux Kernel 内核是否允许以上三个?
中断处理程序将在中断时保存来自通信通道的接收数据。
Kthread 会将数据传输出通信通道。
系统调用可用于配置驱动程序或获取其状态。
此外,如果中断处理程序和 kthread 正在使用 - 相同的硬件寄存器 - 那么我们如何保护这个关键部分?
在内核恐慌(OOPS)的情况下,我正在研究Linux上的不同日志记录机制.到目前为止,我在网上搜索,我已经能够得到以下信息:
有人可以在这方面给我启发以下内容吗?
我只是在寻找指针和高级答案,从某种意义上说,我可以采取进一步研究机制的方向.我将不胜感激这方面的任何相关信息.
谢谢
android kernel device-driver linux-device-driver linux-kernel
我正在阅读关于如何在ARM中处理中断并且知道何时任何硬件中断到达地址0x00000018的指令被执行,这通常是跳转到受尊重的中断处理程序,但是对于不同的模块可能有许多中断处理程序.
那么,这些不同的处理程序如何映射到地址0x00000018?
另外,arm cpu如何知道中断提升是irq或fiq,谁决定它以及哪个设备引发了中断,如何映射到这个中断的受尊重的处理程序.
任何机构都可以指向一个简单的中断处理程序代码,我可以看到所有中断处理程序的作用吗?
我正在尝试编译Linux设备驱动程序(内核模块),但该模块最后一次更新于2013年4月,当然它不再编译在最近的(3.13)内核上,这是错误:
als_sys.c:99:2: error: unknown field ‘dev_attrs’ specified in initializer
Run Code Online (Sandbox Code Playgroud)
我已经搜索了但是我发现的所有内容都是补丁,没有关于更新旧模块的明确"教程",我唯一理解的是我需要使用dev_groups它,但它不接受相同的值dev_attrs和我不知道如何调整现有代码.
代码(其中一些,整个代码可以在这里找到):
# als_sys.c
static ssize_t
illuminance_show(struct device *dev, struct device_attribute *attr, char *buf)
{
struct als_device *als = to_als_device(dev);
int illuminance;
int result;
result = als->ops->get_illuminance(als, &illuminance);
if (result)
return result;
if (!illuminance)
return sprintf(buf, "0\n");
else if (illuminance == -1)
return sprintf(buf, "-1\n");
else if (illuminance < -1)
return -ERANGE;
else
return sprintf(buf, "%d\n", illuminance);
}
# truncated - also "adjustment_show" is similar …Run Code Online (Sandbox Code Playgroud) 我正在尝试在发送的 skb 上计算 TCP/UDP 标头校验和。
基本上,有两个函数可以完成所有工作(在这个 stackoverflow 问题中也提到过,这个也是):
csum_tcpudp_magiccsum_partial例如,对于 TCP:
tcph->check = 0;
tcph->check = csum_tcpudp_magic(iph->saddr,
iph->daddr,
tcp_packet_len,
IPPROTO_TCP,
csum_partial((unsigned char *)tcph,
tcp_packet_len,
0));
Run Code Online (Sandbox Code Playgroud)
这工作正常 - 我能够传输 TCP/UDP 数据包并在接收端使用 wireshark 验证校验和。但是,我找不到有关碎片化 SKB 的任何信息。
当 TCP/UDP 负载碎片化时,这两个“魔法”函数会处理这种情况吗?
此外,TCP/UDP 标头可能位于 SKB 的非线性部分(也可能是分段的)。
这些功能也会处理这种情况吗?
我确实明白我可以尝试使用更大的数据包,这会导致它们碎片化,但是现在错误处理的代价将是内核 oops,而且我无法关闭系统。
我正在使用飞思卡尔 MX6 和飞思卡尔 3.10.31 修改内核。我有一个用作 IO 扩展器的 Maxim MAX7325,它的按钮连接到 P0-P2。来自 7325 的中断线连接到 GPIO_3 焊盘(我认为是 GPIO1_3...)
我在设备树中设置了 7325 和 gpio-keys,如下所示:
max7325_reset: max7325-reset {
compatible = "gpio-reset";
reset-gpios = <&gpio5 16 GPIO_ACTIVE_LOW>;
reset-delay-us = <1>;
#reset-cells = <0>;
};
gpio-keys {
compatible = "gpio-keys";
sw2 {
gpios = <&max7325 2 GPIO_ACTIVE_LOW>;
linux,code = <30>; //a
gpio-key,wakeup;
};
};
Run Code Online (Sandbox Code Playgroud)
和
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1_2>;
status = "okay";
max7325: gpio@68 {
compatible = "maxim,max7325";
reg = <0x68>; …Run Code Online (Sandbox Code Playgroud) 我想在我的驱动程序(调试)输出前加上它的名字,即[myDriver] Actual message. 因为printk(level NAMEMACRO "Actual message\n")每次我想覆盖printk/pr_*实际包含该[myDriver]部分时都写起来很烦人。但是我想不出办法来做到这一点。在最好的情况下,解决方案不会强迫我更改代码中的printk/pr_*调用(更改调用后,这变得微不足道)。
这可能吗?(由于我包含了其他标题,而这些printk标题又包含标题,因此将始终定义此规则,因此不会按照不同的 so 答案中的建议链接到原始内容)
现在的司机有什么理由不注意这个文本吗?(还有另一种方法可以按驱动程序过滤 dmesg 吗?)
我有点意识到,dev_dbg但我还没有发现任何针对一般警告的开发人员,所以我将使用printk/ pr_err。
我在 corei7 上的 ubuntu 上运行 gcc 版本 4.8.2。
从谷歌搜索中找到了有关 AVX 内在函数的信息,但我不确定这组内在函数是否可以用于 Linux 设备驱动程序并对其进行编译。
如果可以,这里的任何人都可以告诉我什么是 makefile 的正确设置以及在 c 源中包含哪些头文件以使用 gcc 编译这个 avx?
谢谢。
我可以理解Linux中的NAPI会从中断模式转换为轮询模式以处理高数据包速率.
NAPI使用权重来决定每个轮询周期中要处理的数据包数量; 它还确保每个轮询周期中的数据包处理少于一个jiffies.
但是,我无法在任何地方找到(谷歌)NAPI的民意调查期间?我们可以将民意调查期改为我们想要的任何值吗?
非常感谢您的任何帮助!
根据我的观察,似乎NAPI的民意调查时间是2秒,但我想确保我的观察是正确的.