问题标签 [kernel-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1945 浏览

linux-kernel - Linux - 以编程方式写入 proc 文件

我在网上找到了几个示例,我们可以在其中创建 proc 文件,分配每次打开 proc 文件进行读取或写入时调用的读取和写入方法。

但是,我似乎找不到任何关于如何以编程方式写入 proc 文件的文档。理想情况下,我想在每次打开 proc 文件进行读取或写入时添加一个带有其他用户详细信息的时间戳。同样,我找到了可以添加在打开 proc 文件时触发的读取和写入函数的位置,但是我找不到有关如何以编程方式实际写入 proc 文件的文档。这与常规的 IO 读/写不同,对吗?

0 投票
1 回答
1056 浏览

linux-kernel - Linux 内核 - 整数到 ASCII

我需要从 Linux 内核中将一个整数转换为它的 ASCII 表示形式。我怎样才能做到这一点?我找不到任何内置的转换方法。内核中是否已经存在或者我需要添加我自己的?

0 投票
1 回答
271 浏览

linux-kernel - Linux内核 - 获取最后写入的内存块

在 linux 内核中,是否有任何数据结构自动始终保存分区的最后写入块号?我找不到任何可用于获取此信息的内置内核源。任何帮助表示赞赏。

0 投票
1 回答
2451 浏览

linux - 如何调试 Linux 内核模块 `init()` 中的问题?

我正在使用远程 (k)gdb 来调试模块中的问题,该问题在加载时会导致恐慌,例如在init()调用时。

堆栈跟踪仅显示do_one_initcall(mod->init)导致崩溃的原因。为了在 gdb 中加载符号文件,我需要获取模块文本部分的地址,并且要获取该地址,我需要加载模块。

因为insmodbusybox(1.16.1)不支持-m所以我坚持grep modulename /proc/modules+添加偏移量nm来找出地址。

所以我在这里面临着鸡和蛋的问题——为了能够调试模块加载,我需要加载模块——但是为了加载模块,我需要调试问题。 ..

所以我目前正在考虑两种选择 - 有没有办法获取地址信息:

  1. 通过模块初始化代码中的 printk()
  2. 通过内核代码中某处的 printk()

所有这一切都在调用之前mod->init()- 所以我可以在那里放置一个断点,加载符号文件,点击c并看到它崩溃并烧毁......

0 投票
3 回答
399 浏览

linux-kernel - Linux Kernel - Where in the kernel are blocks of data physically written to specific disk partitions?

I'm modifying the Linux kernel and am trying to find where in the kernel source blocks of data are physically written to disk partitions such as ubd0. Where does this occur in kernel source? The actual physical write call? I cannot find this. Thanks!

Edit: The end goal is a list of block numbers that have been written to a few different partitions. As data is physically written to the list, the block numbers written are returned and maintained.

0 投票
1 回答
2923 浏览

android - Android 和内核模块

所以 - Android 是建立在一个精简的 linux 系统之上的。缺少大多数方便的实用程序,但所有基础知识都在那里。

我可以调用 insmod 和 rmmod。没问题。

但是内核模块和固件文件在哪里呢?我找不到任何东西。标准发行版中没有 /lib/modules 。

问题:我需要模块。肯定不想将世界上每个 USB 设备的支持编译到 linux 内核中。我应该把它们放在哪里?

0 投票
1 回答
323 浏览

linux-kernel - Linux Kernel - traverse to buffer heads

In the Linux kernel, is there a way to traverse down to the buffer_heads from within a module?

I can see how to get to struct bio (task_struct macro: current->bio). But how can I get to the buffer heads? The buffer_head struct holds some information I'd like to obtain at any point regarding physical block numbers.

0 投票
1 回答
1040 浏览

c - 通过内核访问块级存储

如何通过内核访问块级存储(不使用 scsi 库)?

我的意图是通过网络实现块级存储协议以用于学习目的,几乎与 SCSI 的工作方式相同。请求将由发起者生成并发送到目标(两个用户空间程序),目标调用内核模块并使用 TCP 协议将数据返回给发起者。

到目前为止,我已经设法构建了一个简单的“Hello”模块并运行它(我是内核编程的新手),但无法继续进行块访问。

经过大量搜索,我在 中找到struct buffer_head * bread(int dev,int block)linux/fs.h,但编译器抛出错误。

请提供帮助,也请随时就内核编程提出建议。
谢谢!


bread在旧内核中使用。

调查struct request *blk_get_request(struct request_queue *, int, gfp_t);_linux/blkdev.h


访问块设备必须通过内核完成。

0 投票
3 回答
2320 浏览

gcc - 从内核模块中的结构中删除填充

我正在使用标准命令编译一个包含大小为 34 的结构的内核模块。

sizeof(some_structure)以 36 而不是 34的形式出现,即编译器正在填充结构。

如何删除此填充?

运行make V=1显示传递为的 gcc 编译器选项

0 投票
1 回答
2256 浏览

linux-kernel - inode_operations ,警告:从不兼容的指针类型初始化

我正在尝试编译一个从 proc 文件读取和写入的简单内核程序。

我正在尝试通过覆盖 inode_operations 结构(.permission)中的权限 fp 来设置该文件的权限

{ . . . }

};

出于某种原因,当我编译这个时,我得到 ->警告:从不兼容的指针类型初始化以下行:

知道如何解决这个问题吗?

谢谢!